คำถามติดแท็ก database-design

การออกแบบฐานข้อมูลเป็นกระบวนการในการระบุโครงสร้างและด้านตรรกะของฐานข้อมูล เป้าหมายของการออกแบบฐานข้อมูลคือการแสดง "จักรวาลแห่งวาทกรรม" - ประเภทของข้อเท็จจริงกฎเกณฑ์ทางธุรกิจและข้อกำหนดอื่น ๆ ที่ฐานข้อมูลมีวัตถุประสงค์เพื่อเป็นแบบจำลอง

15
การออกแบบตารางคอลัมน์เดียวดีไหม [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ มีตารางที่มีคอลัมน์เดียวได้ไหม ฉันรู้ว่ามันไม่ผิดกฎหมาย แต่ถือว่าเป็นการออกแบบที่ไม่ดีหรือไม่? แก้ไข: นี่คือตัวอย่างบางส่วน: คุณมีตารางที่มีรหัสสถานะของสหรัฐอเมริกาที่ถูกต้อง 50 รายการ แต่คุณไม่จำเป็นต้องเก็บชื่อรัฐแบบละเอียด บัญชีดำอีเมล มีคนพูดถึงการเพิ่มฟิลด์คีย์ อย่างที่ฉันเห็นคอลัมน์เดียวนี้น่าจะเป็นคีย์หลัก

17
ดัชนีฐานข้อมูลมีจำนวนมากเกินไป?
ฉันกำลังทำงานในโครงการที่มีฐานข้อมูล Oracle ค่อนข้างใหญ่ (แม้ว่าคำถามของฉันจะใช้ได้ดีกับฐานข้อมูลอื่น ๆ ) เรามีเว็บอินเทอร์เฟซที่ช่วยให้ผู้ใช้สามารถค้นหาในฟิลด์ต่างๆที่เป็นไปได้เกือบทั้งหมด เพื่อให้การค้นหาเหล่านี้ดำเนินไปอย่างรวดเร็วเราได้เพิ่มดัชนีลงในฟิลด์และชุดค่าผสมของฟิลด์ที่เราเชื่อว่าผู้ใช้มักจะค้นหา อย่างไรก็ตามเนื่องจากเราไม่รู้จริงๆว่าลูกค้าของเราจะใช้ซอฟต์แวร์นี้อย่างไรจึงยากที่จะบอกได้ว่าจะสร้างดัชนีใด พื้นที่ไม่ใช่เรื่องน่ากังวล เรามีไดรฟ์ RAID 4 เทราไบต์ซึ่งเราใช้เพียงเศษเสี้ยวเล็ก ๆ อย่างไรก็ตามฉันกังวลเกี่ยวกับบทลงโทษด้านประสิทธิภาพที่อาจเกิดขึ้นจากการมีดัชนีมากเกินไป เนื่องจากดัชนีเหล่านั้นจำเป็นต้องได้รับการอัปเดตทุกครั้งที่มีการเพิ่มลบหรือแก้ไขแถวฉันจึงคิดว่าเป็นความคิดที่ไม่ดีที่จะมีดัชนีหลายสิบรายการในตารางเดียว จำนวนดัชนีที่ถือว่ามากเกินไป? 10? 25? 50? หรือฉันควรจะครอบคลุมกรณีที่พบได้บ่อยและชัดเจนจริงๆและเพิกเฉยต่อสิ่งอื่น ๆ ?

9
เหตุใดจึงใช้หลายคอลัมน์เป็นคีย์หลัก (คีย์หลักแบบผสม)
ตัวอย่างนี้จะนำมาจาก w3schools CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) ) ความเข้าใจของฉันคือทั้งสองคอลัมน์ร่วมกัน ( P_IdและLastName) Personsเป็นคีย์หลักสำหรับตาราง ถูกต้องหรือไม่ เหตุใดบางคนจึงต้องการใช้หลายคอลัมน์เป็นคีย์หลักแทนที่จะเป็นคอลัมน์เดียว สามารถใช้คอลัมน์ร่วมกันเป็นคีย์หลักในตารางได้กี่คอลัมน์

8
เมื่อใดควรใช้ View แทน Table?
เมื่อใดควรใช้ View บนตารางจริง สิ่งนี้ควรคาดหวังว่าจะได้รับอะไรบ้าง? โดยรวมแล้วข้อดีของการใช้มุมมองบนตารางคืออะไร? ฉันไม่ควรออกแบบโต๊ะในแบบที่มุมมองตั้งแต่แรกหรือไม่?

14
แนวทางปฏิบัติที่ดีที่สุดในการจัดเก็บที่อยู่ไปรษณีย์ในฐานข้อมูล (RDBMS)?
มีการอ้างอิงที่ดีสำหรับแนวทางปฏิบัติที่ดีที่สุดในการจัดเก็บที่อยู่ทางไปรษณีย์ใน RDBMS หรือไม่ ดูเหมือนว่าจะมีข้อแลกเปลี่ยนมากมายที่สามารถทำได้และข้อดีข้อเสียมากมายสำหรับแต่ละข้อที่ต้องประเมิน - นี่เป็นสิ่งที่ต้องทำครั้งแล้วครั้งเล่า? อาจมีคนเขียนบทเรียนบางอย่างที่ได้เรียนรู้จากที่ไหนสักแห่ง? ตัวอย่างของการแลกเปลี่ยนที่ฉันกำลังพูดถึงคือการจัดเก็บรหัสไปรษณีย์เป็นจำนวนเต็มเทียบกับช่องถ่านควรจัดเก็บหมายเลขบ้านเป็นช่องแยกหรือเป็นส่วนหนึ่งของที่อยู่บรรทัดที่ 1 ควรทำให้หมายเลขชุด / อพาร์ทเมนต์ / ฯลฯ เป็นมาตรฐานหรือเก็บไว้เป็น กลุ่มข้อความในที่อยู่บรรทัดที่ 2 คุณจัดการ zip +4 อย่างไร (แยกช่องหรือช่องใหญ่ช่องเดียวจำนวนเต็มเทียบกับข้อความ) เป็นต้น ในตอนนี้ฉันกังวลเป็นหลักเกี่ยวกับที่อยู่ในสหรัฐอเมริกา แต่ฉันคิดว่ามีแนวทางปฏิบัติที่ดีที่สุดบางประการเกี่ยวกับการเตรียมตัวให้พร้อมสำหรับการก้าวไปทั่วโลกในที่สุด (เช่นการตั้งชื่อช่องให้เหมาะสมเช่นภูมิภาคแทนที่จะเป็นรัฐหรือรหัสไปรษณีย์แทนรหัสไปรษณีย์ เป็นต้น


1
จะใช้ความสัมพันธ์แบบกลุ่มต่อกลุ่มใน PostgreSQL ได้อย่างไร
ฉันเชื่อว่าชื่อเรื่องนี้อธิบายได้ในตัวเอง คุณสร้างโครงสร้างตารางใน PostgreSQL เพื่อสร้างความสัมพันธ์แบบกลุ่มต่อกลุ่มได้อย่างไร ตัวอย่างของฉัน: Product(name, price); Bill(name, date, Products);

15
วิธีที่ดีที่สุดในการจัดเก็บเวลา (hh: mm) ในฐานข้อมูล
ฉันต้องการจัดเก็บเวลาในตารางฐานข้อมูล แต่ต้องจัดเก็บชั่วโมงและนาทีเท่านั้น ฉันรู้ว่าฉันสามารถใช้ DATETIME และเพิกเฉยต่อส่วนประกอบอื่น ๆ ของวันที่ได้ แต่วิธีใดที่ดีที่สุดในการดำเนินการนี้โดยไม่ต้องจัดเก็บข้อมูลมากกว่าที่ฉันต้องการจริงๆ

5
วิธีสร้างมุมมองที่เป็นรูปธรรมใน SQL Server
ฉันกำลังจะออกแบบ DW และฉันได้ยินเกี่ยวกับมุมมองที่เป็นรูปธรรม อันที่จริงฉันต้องการสร้างมุมมองและควรอัปเดตโดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงตารางพื้นฐาน ใครช่วยอธิบายด้วยตัวอย่างแบบสอบถาม ..

12
โดยทั่วไปคอลัมน์ใดที่สร้างดัชนีที่ดี
จากการติดตามผล " ดัชนีคืออะไรและฉันจะใช้เพื่อเพิ่มประสิทธิภาพการสืบค้นในฐานข้อมูลของฉันได้อย่างไร " ที่ฉันกำลังพยายามเรียนรู้เกี่ยวกับดัชนีคอลัมน์ใดบ้างที่เป็นดัชนีที่ดี โดยเฉพาะสำหรับฐานข้อมูล MS SQL? หลังจาก googling แล้วทุกสิ่งที่ฉันได้อ่านชี้ให้เห็นว่าคอลัมน์ที่โดยทั่วไปเพิ่มขึ้นและไม่ซ้ำกันทำให้ดัชนีที่ดี (เช่นการเพิ่มอัตโนมัติของ MySQL) ฉันเข้าใจสิ่งนี้ แต่ฉันใช้ MS SQL และฉันใช้ GUID สำหรับคีย์หลักดังนั้นดูเหมือนว่า ดัชนีนั้นจะไม่เป็นประโยชน์ต่อคอลัมน์ GUID ...

2
จัดทำดัชนีหลายคอลัมน์ใน Ruby on Rails
ฉันกำลังใช้ฟังก์ชันเพื่อติดตามว่าผู้ใช้อ่านบทความใดบ้าง create_table "article", :force => true do |t| t.string "title" t.text "content" end นี่คือการย้ายข้อมูลของฉันจนถึงตอนนี้: create_table :user_views do |t| t.integer :user_id t.integer :article_id end ตาราง user_views จะถูกสอบถามเพื่อค้นหาทั้งสองคอลัมน์เสมอไม่ใช่เพียงคอลัมน์เดียว คำถามของฉันคือดัชนีของฉันควรมีลักษณะอย่างไร ลำดับของตารางเหล่านี้มีความแตกต่างกันหรือไม่ควรมีตัวเลือกมากกว่านี้หรืออะไรก็ตาม ฐานข้อมูลเป้าหมายของฉันคือ Postgres add_index(:user_views, [:article_id, :user_id]) ขอบคุณ. อัปเดต: เนื่องจากมีเพียงแถวเดียวที่มีค่าเดียวกันในทั้งสองคอลัมน์ (เนื่องจากทราบว่า user_id HAS อ่าน article_id หรือไม่) ฉันควรพิจารณาตัวเลือก: unique หรือไม่ หากฉันไม่เข้าใจผิดนั่นหมายความว่าฉันไม่ต้องทำการตรวจสอบใด ๆ ด้วยตัวเองและเพียงแค่ทำการแทรกทุกครั้งที่ผู้ใช้เข้าชมบทความ

13
หลักการตั้งชื่อคีย์หลัก / คีย์ต่างประเทศ [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ ในกลุ่มนักพัฒนาของเรามีการถกเถียงกันอย่างดุเดือดเกี่ยวกับหลักการตั้งชื่อสำหรับคีย์หลักและคีย์ต่างประเทศ โดยพื้นฐานแล้วมีโรงเรียนความคิดสองแห่งในกลุ่มของเรา: 1: Primary Table (Employee) Primary Key is called ID Foreign table (Event) Foreign key is called EmployeeID หรือ 2: Primary Table (Employee) Primary Key is called EmployeeID Foreign table (Event) Foreign key is called EmployeeID ฉันไม่ต้องการให้ชื่อของตารางซ้ำกันในคอลัมน์ใด ๆ (ดังนั้นฉันชอบตัวเลือกที่ 1 …

8
ความยาวที่เหมาะสมที่สุดสำหรับที่อยู่อีเมลในฐานข้อมูลคือเท่าใด
นี่คือส่วนที่แยกออกมาจากข้อความค้นหาของฉันซึ่งสะท้อนถึงEMAIL_ADDRESSประเภทข้อมูลคอลัมน์และคุณสมบัติ: EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, อย่างไรก็ตามจอห์นแซนเดอVARYING(256)ใช้ สิ่งนี้ชี้ให้เห็นว่าฉันไม่จำเป็นต้องเข้าใจ VARYING อย่างถูกต้อง ฉันเข้าใจดีว่าความยาวของที่อยู่อีเมลคือ 20 ตัวอักษรในกรณีของฉันในขณะที่ 256 สำหรับ Jodn บริบทในรหัสของ John CREATE TABLE so."User" ( USER_ID SERIAL NOT NULL, USER_NAME CHARACTER VARYING(50) NOT NULL, EMAIL_ADDRESS CHARACTER VARYING(256) NOT NULL, // Here HASHED_PASSWORD so.HashedPassword NOT NULL, OPEN_ID CHARACTER VARYING(512), A_MODERATOR BOOLEAN, LOGGED_IN BOOLEAN, HAS_BEEN_SENT_A_MODERATOR_MESSAGE …

2
มอบทั้งหมดบนสคีมาเฉพาะในฐานข้อมูลให้กับบทบาทกลุ่มใน PostgreSQL
เมื่อใช้ PostgreSQL 9.0 ฉันมีบทบาทกลุ่มที่เรียกว่า "staff" และต้องการให้สิทธิ์ทั้งหมด (หรือบางอย่าง) กับบทบาทนี้บนตารางในสคีมาเฉพาะ ไม่มีงานต่อไปนี้ GRANT ALL ON SCHEMA foo TO staff; GRANT ALL ON DATABASE mydb TO staff; สมาชิกของ "staff" ยังไม่สามารถเลือกหรืออัปเดตตารางแต่ละตารางในสคีมา "foo" หรือ (ในกรณีของคำสั่งที่สอง) ไปยังตารางใดก็ได้ในฐานข้อมูลเว้นแต่ฉันจะให้สิทธิ์ทั้งหมดในตารางนั้น ฉันจะทำอย่างไรให้ชีวิตของฉันและผู้ใช้ง่ายขึ้น ปรับปรุง:คิดออกด้วยความช่วยเหลือของคำถามที่คล้ายกันใน serverfault.com GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;

8
MySQL - รหัสไปรษณีย์แผ่นหน้าด้วย“ 0” ได้อย่างไร?
ในฐานข้อมูล MySQL InnoDB ของฉันฉันมีข้อมูลรหัสไปรษณีย์สกปรกที่ฉันต้องการล้างข้อมูล ข้อมูลรหัสไปรษณีย์ที่สะอาดคือเมื่อฉันมีตัวเลข 5 หลักสำหรับรหัสไปรษณีย์ (เช่น "90210") แต่ด้วยเหตุผลบางอย่างฉันสังเกตเห็นในฐานข้อมูลของฉันว่าสำหรับรหัสไปรษณีย์ที่ขึ้นต้นด้วย "0" นั้น 0 จะถูกทิ้ง ดังนั้น " Holtsville, New York " ที่มีรหัสไปรษณีย์ " 00544" จึงถูกเก็บไว้ในฐานข้อมูลของฉันเป็น " 544" และ " Dedham, MA " พร้อมรหัสไปรษณีย์ " 02026" ถูกเก็บไว้ในฐานข้อมูลของฉันเป็น " 2026" ฉันสามารถเรียกใช้ SQL ใดที่แป้นด้านหน้า "0" ไปยังรหัสไปรษณีย์ที่มีความยาวไม่เกิน 5 หลัก หมายความว่าถ้ารหัสไปรษณีย์มีความยาว 3 หลักให้กดแป้นด้านหน้า "00" หากรหัสไปรษณีย์มีความยาว 4 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.