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

การพัฒนาสกีมาแนวคิดและ / หรือโมเดลเชิงตรรกะและ / หรือการตั้งค่าทางกายภาพของฐานข้อมูล

3
ชนิดข้อมูลที่เหมาะสมที่สุดสำหรับเขตข้อมูล MD5 คืออะไร
เรากำลังออกแบบระบบที่รู้กันว่าอ่านยาก (ตามคำสั่งของการอ่านหมื่นครั้งต่อนาที) มีตารางnamesที่ทำหน้าที่จัดเรียงรีจิสทรีกลาง แต่ละแถวมีtextเขตข้อมูลrepresentationและไม่ซ้ำกันkeyซึ่งเป็นแฮช MD5 ของสิ่งrepresentationนั้น 1ตารางนี้มีระเบียนหลายสิบล้านระเบียนและคาดว่าจะเติบโตเป็นพันล้านตลอดอายุการใช้งานแอปพลิเคชัน มีตารางอื่น ๆ อีกหลายสิบตาราง (ของสคีมาที่แตกต่างกันอย่างมากและจำนวนเรคคอร์ด) ที่อ้างอิงถึงnamesตาราง ระเบียนใดก็ตามที่ระบุในตารางใดตารางหนึ่งเหล่านี้รับประกันว่าจะมี a name_keyซึ่งเป็น foreign key ไปยังnamesตาราง 1: อนึ่งตามที่คุณคาดไว้ระเบียนในตารางนี้จะไม่เปลี่ยนรูปเมื่อมีการเขียน สำหรับตารางใดก็ตามที่ไม่ใช่namesตารางแบบสอบถามที่พบบ่อยที่สุดจะเป็นไปตามรูปแบบนี้: SELECT list, of, fields FROM table WHERE name_key IN (md5a, md5b, md5c...); ฉันต้องการปรับให้เหมาะสมสำหรับการอ่าน ฉันสงสัยว่าจุดแรกของฉันควรจะลดขนาดของดัชนี (แม้ว่าฉันจะไม่ได้รับการพิสูจน์ว่าผิด) คำถาม: อะไรคือ / ชนิดข้อมูลที่ดีที่สุดสำหรับkeyและname_keyคอลัมน์คืออะไร? มีเหตุผลที่จะใช้hex(32)มากกว่าbit(128)? BTREEหรือGIN?

4
ลำดับของคอลัมน์ในคำจำกัดความของตารางมีความสำคัญหรือไม่
เมื่อกำหนดตารางการเรียงลำดับคอลัมน์ในกลุ่มเชิงตรรกะและกลุ่มจะเป็นประโยชน์ การเรียงลำดับแบบลอจิคัลของคอลัมน์ในตารางบ่งบอกถึงความหมายของผู้พัฒนาและเป็นองค์ประกอบของสไตล์ที่ดี นั่นชัดเจน อย่างไรก็ตามสิ่งที่ไม่ชัดเจนคือว่าการเรียงลำดับเชิงตรรกะของคอลัมน์ในตารางมีผลกระทบต่อการจัดเรียงทางกายภาพที่ชั้นการจัดเก็บหรือไม่หรือมีผลกระทบอื่น ๆ ที่อาจสนใจ นอกเหนือจากผลกระทบต่อสไตล์การเรียงลำดับของคอลัมน์มีความสำคัญหรือไม่ มีคำถามเกี่ยวกับ Stack Overflowเกี่ยวกับเรื่องนี้ แต่ไม่มีคำตอบที่เชื่อถือได้

3
ทุกตารางควรมีคีย์หลักตัวแทน / ฟิลด์หลักเทียมหรือไม่
ฉันเข้าใจถึงประโยชน์อย่างหนึ่งของคีย์ตัวแทนเสมือน / คีย์ประดิษฐ์โดยทั่วไป - มันไม่เปลี่ยนแปลงและสะดวกสบายมาก สิ่งนี้เป็นจริงไม่ว่าจะเป็นเขตข้อมูลเดียวหรือหลายเขตข้อมูลตราบใดที่พวกเขาเป็น 'ประดิษฐ์' อย่างไรก็ตามบางครั้งดูเหมือนว่าเป็นเรื่องของนโยบายที่จะมีฟิลด์จำนวนเต็มที่เพิ่มขึ้นอัตโนมัติเป็นคีย์หลักของแต่ละตาราง นี่เป็นความคิดที่ดีที่สุดเสมอหรือไม่ที่จะมีคีย์ฟิลด์เดียวและทำไม (หรือทำไมไม่) เพื่อความชัดเจนคำถามนี้ไม่เกี่ยวกับการประดิษฐ์เทียบกับธรรมชาติ แต่เกี่ยวกับว่ากุญแจเทียมทั้งหมดควรเป็นแบบ Single-field หรือไม่


5
เทคโนโลยีฐานข้อมูลใดที่เครื่องมือค้นหาขนาดใหญ่ใช้ [ปิด]
ไม่มีใครรู้ว่า Google หรือ Yahoo ทำการค้นหาคำหลักอย่างไรกับข้อมูลจำนวนมหาศาลมาก? พวกเขาใช้ฐานข้อมูลหรือเทคโนโลยีประเภทใด ใช้เวลาไม่กี่มิลลิวินาที แต่มีดัชนีมากกว่าพันล้านหน้า

5
ตกลงเพื่อเก็บค่าซึ่งอัพเดตในตารางหรือไม่?
เรากำลังพัฒนาแพลตฟอร์มสำหรับบัตรเติมเงินซึ่งโดยทั่วไปเก็บข้อมูลเกี่ยวกับบัตรและยอดเงินการชำระเงินและอื่น ๆ จนถึงตอนนี้เรามีนิติบุคคลที่มีการรวบรวมบัญชีนิติบุคคลและแต่ละบัญชีมีจำนวนเงินซึ่งจะอัพเดทในทุกการฝาก / ถอน ตอนนี้มีการถกเถียงกันในทีม มีคนบอกเราว่าการแบ่งกฎ 12 ข้อของ Coddและการอัปเดตค่าในการชำระเงินแต่ละครั้งนั้นเป็นปัญหา นี่เป็นปัญหาจริงๆหรือ ถ้าเป็นเช่นนั้นเราจะแก้ไขได้อย่างไร

1
การออกแบบแพลตฟอร์ม: ฐานข้อมูลเดียวหรือหลายฐานข้อมูล?
เรากำลังสร้างแพลตฟอร์มเว็บที่รวมบริการหลายอย่างแต่ละรายการมีข้อมูลอ้างอิงของตนเอง บริการเหล่านี้ถูกสร้างขึ้นอย่างอิสระตามหลักการของService-Oriented Architectureแต่ทำธุรกรรมกับข้อมูลที่อาจเกี่ยวข้อง เรากำลังพิจารณาว่าบริการเหล่านี้ควรแบ่งปันฐานข้อมูลขนาดใหญ่หนึ่งฐานหรือแต่ละแห่งมีฐานข้อมูลของตนเอง (เราวางแผนที่จะใช้ SQL Server 2008 Enterprise ในคลัสเตอร์ Windows 2008) ข้อดีบางประการสำหรับแต่ละวิธีที่เราพิจารณาแล้วรวมถึง: ฐานข้อมูลเดียว ข้อมูลที่เกี่ยวข้องจากบริการที่แตกต่างกันสามารถถูกรวมเข้าด้วยกันโดยข้อ จำกัด ของกุญแจต่างประเทศ สารสกัดจากการวิเคราะห์นั้นง่ายต่อการเขียนและดำเนินการได้เร็วขึ้น ในกรณีที่เกิดภัยพิบัติการกู้คืนแพลตฟอร์มให้อยู่ในสถานะที่สอดคล้องกันนั้นง่ายขึ้น สำหรับข้อมูลที่อ้างอิงโดยหลายบริการข้อมูลที่แคชโดยบริการหนึ่งมีแนวโน้มที่จะถูกใช้ในไม่ช้าหลังจากบริการอื่น การบริหารและการตรวจสอบนั้นง่ายและถูกกว่า หลายฐานข้อมูล งานบำรุงรักษาปัญหาฮาร์ดแวร์การละเมิดความปลอดภัยและอื่น ๆ ไม่จำเป็นต้องส่งผลกระทบต่อแพลตฟอร์มทั้งหมด สมมติว่าแต่ละฐานข้อมูลอยู่บนฮาร์ดแวร์ที่แยกจากกันการขยายขนาดของหลายเครื่องจะให้ประโยชน์ด้านประสิทธิภาพมากกว่าการปรับขนาดฐานขนาดใหญ่ขึ้น จากมุมมองการดำเนินงานเป็นประโยชน์หรือไม่ที่แต่ละบริการในแพลตฟอร์มนี้ได้รับฐานข้อมูลของตนเองหรือว่าพวกเขาทั้งหมดไปในฐานข้อมูลเดียวกัน ปัจจัยสำคัญใดที่แจ้งคำตอบสำหรับคำถามนี้

3
การใช้คีย์ต่างประเทศหลายอันคั่นด้วยเครื่องหมายจุลภาคผิดหรือไม่และถ้าใช่ทำไม
มีสองตาราง: และDeal DealCategoriesดีลหนึ่งสามารถมีได้หลายประเภทดีล ดังนั้นวิธีที่เหมาะสมควรทำตารางที่DealCategoriesมีโครงสร้างดังนี้ DealCategoryId (PK) DealId (FK) DealCategoryId (FK) อย่างไรก็ตามทีมงานภายนอกของเราเก็บหลายหมวดหมู่ไว้ใน Dealตารางด้วยวิธีนี้: DealId (PK) DealCategory -- In here they store multiple deal ids separated by commas like this: 18,25,32. ฉันรู้สึกว่าสิ่งที่พวกเขาทำผิด แต่ฉันไม่รู้วิธีอธิบายอย่างชัดเจนว่าทำไมสิ่งนี้ไม่ถูกต้อง ฉันจะอธิบายให้พวกเขาฟังได้อย่างไรว่าสิ่งนี้ผิด หรือบางทีฉันเป็นคนที่ผิดและเป็นที่ยอมรับ?

3
ฐานข้อมูลหนึ่งต่อไคลเอนต์กลายเป็นจุดที่ไม่สามารถทำได้?
สำหรับหนึ่งในระบบของเราเรามีข้อมูลลูกค้าที่ละเอียดอ่อนและจัดเก็บข้อมูลลูกค้าแต่ละรายในฐานข้อมูลแยกต่างหาก เรามีลูกค้าประมาณ 10-15 คนสำหรับระบบนั้น อย่างไรก็ตามเรากำลังพัฒนาระบบใหม่ที่จะมีลูกค้า 50-100 รายอาจจะมากกว่านี้ ฉันคิดว่ามันอาจเป็นไปไม่ได้ที่จะมีฐานข้อมูลเดียวต่อลูกค้าในตัวอย่างนี้ (เพื่อเก็บบันทึกที่ละเอียดอ่อนและประวัติการตรวจสอบ) อย่างไรก็ตามฉันไม่รู้ว่านี่เป็นเรื่องปกติอย่างสมบูรณ์หรือไม่หรือหากมีวิธีอื่นในการรักษาความปลอดภัย ความคิดใด ๆ เกี่ยวกับเรื่องนี้?

5
ใน SQL เป็นคอมโพสิตหรือคีย์ผสมหรือไม่
เกี่ยวกับ SQL (คอมพิวเตอร์ / ฐานข้อมูล): เมื่อเรามีสองฟิลด์ขึ้นไปในตารางที่ระบุระเบียนโดยไม่ซ้ำกันวิธีที่เหมาะสมในการโทรหาพวกเขาคืออะไร? แป้นผสมหรือแป้นผสม? ฉันเคยเห็นในเว็บทั้งสองใช้ดังนั้นฉันไม่แน่ใจจริงๆ

1
ต้องการดัชนีสำหรับคีย์ต่างประเทศ
ฉันกำลังดิ้นรนกับดัชนีคีย์หลักและคีย์ต่างประเทศ ... และความต้องการของพวกเขาทั้งหมด ถ้าฉันมีสองตารางทั้งสองจะมีจำนวนเต็มเป็นคีย์หลัก ตารางแรกอ้างอิงผ่าน FK ไปยังคีย์หลักของตารางที่สอง ในตารางทั้งสองฉันมีดัชนีคีย์หลักในคอลัมน์ ID ฉันสร้างข้อ จำกัด FK ในการtable1.ref_fieldอ้างอิง PK ของตารางที่สอง ( table2.id) และฉันเพิ่มดัชนีบน table1.ref_field นี่เป็นวิธีที่ดีที่สุดในการจัดระเบียบดัชนีคีย์หลักและคีย์ต่างประเทศหรือไม่

3
ทำคอลัมน์ซ้ำเพื่อการสืบค้นที่เร็วขึ้นไหม
ชื่อเรื่องไม่สมเหตุสมผล แต่ฉันไม่สามารถคิดชื่อที่ดีกว่าสำหรับปัญหานี้ได้ ฉันมีตารางต่อไปนี้ โครงการ รหัส ชื่อ ลูกค้า รหัส id_project ชื่อ การชำระเงิน รหัส id_customer วันที่ รวม เมื่อผู้ใช้เข้าสู่ระบบเขาจะสามารถเข้าถึงโครงการบางอย่างได้ ตอนนี้ฉันต้องการแสดงรายการการชำระเงินทั้งหมดสำหรับโครงการนั้นและควรง่าย: SELECT FROM payments where id_customer in (SELECT id from customers where id_project = 5) คำถามของฉันคือ: หากการเพิ่มคอลัมน์ id_project ในตารางการชำระเงินไม่ดีกว่าวิธีนี้จะทำให้การสืบค้นง่ายขึ้นและเร็วขึ้น

10
วิธีที่มีประสิทธิภาพในการติดฉลากคอลัมน์ในฐานข้อมูลคืออะไร?
ฉันเคยติดป้ายกำกับคอลัมน์ในฐานข้อมูลของฉันเช่นนี้: user_id user_name user_password_hash เพื่อหลีกเลี่ยงความขัดแย้งเมื่อเข้าร่วมสองตาราง แต่จากนั้นฉันเรียนรู้เพิ่มเติมเกี่ยวกับวิธีนามแฝงตารางและฉันหยุดทำสิ่งนี้ วิธีที่มีประสิทธิภาพในการติดฉลากคอลัมน์ในฐานข้อมูลคืออะไร? ทำไม?

4
ดัชนีเชิงพื้นที่สามารถช่วยแบบสอบถามแบบ "ช่วง - เรียงตาม - ขีด จำกัด "
ถามคำถามนี้โดยเฉพาะสำหรับ Postgres เนื่องจากมี supoort ที่ดีสำหรับดัชนี R-tree / spatial เรามีตารางต่อไปนี้พร้อมโครงสร้างแบบต้นไม้ (ชุดแบบซ้อน) ของคำและความถี่: lexikon ------- _id integer PRIMARY KEY word text frequency integer lset integer UNIQUE KEY rset integer UNIQUE KEY และแบบสอบถาม: SELECT word FROM lexikon WHERE lset BETWEEN @Low AND @High ORDER BY frequency DESC LIMIT @N ฉันคิดว่าดัชนีการครอบคลุม(lset, frequency, word)จะมีประโยชน์ แต่ฉันรู้สึกว่ามันอาจทำงานได้ไม่ดีหากมีlsetค่ามากเกินไปใน(@High, …

3
เป็นที่ยอมรับได้หรือไม่ที่จะมีการอ้างอิงคีย์ต่างประเทศแบบวงกลม \ จะหลีกเลี่ยงได้อย่างไร?
เป็นที่ยอมรับหรือไม่ที่จะมีการอ้างอิงแบบวงกลมระหว่างสองตารางในเขตข้อมูล foreign key? หากไม่สามารถหลีกเลี่ยงสถานการณ์เหล่านี้ได้อย่างไร ถ้าเป็นเช่นนั้นข้อมูลจะถูกแทรกได้อย่างไร? ด้านล่างเป็นตัวอย่างของที่ (ในความคิดของฉัน) อ้างอิงวงกลมจะยอมรับได้: CREATE TABLE Account ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50) ) CREATE TABLE Contact ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50), AccountID INT FOREIGN KEY REFERENCES Account(ID) ) ALTER TABLE Account ADD PrimaryContactID INT FOREIGN KEY REFERENCES Contact(ID)

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