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

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

5
หลักการตั้งชื่อตารางเชิงสัมพันธ์
ฉันเริ่มโครงการใหม่และต้องการรับชื่อตารางและคอลัมน์ของฉันตั้งแต่เริ่มต้น ตัวอย่างเช่นฉันเคยใช้พหูพจน์ในชื่อตารางเสมอ ดังนั้นถ้าฉันได้รับตาราง "ผู้ใช้" แล้วฉันได้รับผลิตภัณฑ์ที่มีผู้ใช้เท่านั้นที่จะมีตารางควรมีชื่อ "user_product" หรือเพียงแค่ "ผลิตภัณฑ์"? นี่คือความสัมพันธ์แบบหนึ่งต่อหลาย และถ้าหากฉันมีคำอธิบายผลิตภัณฑ์หลายอย่างสำหรับแต่ละผลิตภัณฑ์มันจะเป็น "user_product_description" หรือ "product_description" หรือเพียงแค่ "คำอธิบาย" หรือไม่ แน่นอนว่ามีการตั้งค่าคีย์ต่างประเทศที่เหมาะสม .. การตั้งชื่อเฉพาะคำอธิบายจะเป็นปัญหาเนื่องจากฉันอาจมีรายละเอียดผู้ใช้หรือรายละเอียดบัญชีหรืออะไรก็ตาม .. ถ้าฉันต้องการตารางสัมพันธ์ที่บริสุทธิ์ (มากไปหามาก) ที่มีเพียงสองคอลัมน์สิ่งนี้จะมีลักษณะอย่างไร "user_stuff" หรืออาจจะเป็น "rel_user_stuff" และถ้าเป็นอันแรกสิ่งที่จะแยกความแตกต่างนี้จากตัวอย่างเช่น "user_product"? ความช่วยเหลือใด ๆ ที่ได้รับการชื่นชมอย่างมากและหากมีมาตรฐานของการตั้งชื่อตามที่คุณแนะนำให้ใช้ ขอบคุณ

7
โครงสร้างฐานข้อมูลสำหรับโครงสร้างข้อมูลแบบต้นไม้
อะไรจะเป็นวิธีที่ดีที่สุดในการใช้โครงสร้างข้อมูลแบบต้นไม้ที่มีจำนวนระดับที่ไม่ทราบค่าในฐานข้อมูล ฉันทำสิ่งนี้ครั้งเดียวก่อนที่จะใช้ตารางที่มี foreign key เป็นของตัวเอง คุณเห็นการปรับใช้อื่นใดและการใช้งานนี้สมเหตุสมผลหรือไม่

5
การออกแบบฐานข้อมูลสำหรับการบันทึกการตรวจสอบ
ทุกครั้งที่ฉันต้องการออกแบบฐานข้อมูลใหม่ฉันใช้เวลาค่อนข้างจะคิดเกี่ยวกับวิธีที่ฉันควรตั้งค่าสคีมาฐานข้อมูลเพื่อเก็บบันทึกการตรวจสอบของการเปลี่ยนแปลง มีบางคำถามที่ถูกถามถึงที่นี่เกี่ยวกับเรื่องนี้ แต่ฉันไม่เห็นด้วยว่ามีวิธีการที่ดีที่สุดสำหรับทุกสถานการณ์: การออกแบบฐานข้อมูลสำหรับการแก้ไข การออกแบบที่ดีที่สุดสำหรับตารางฐานข้อมูลการตรวจสอบบันทึกการเปลี่ยนแปลง แนวคิดเกี่ยวกับการออกแบบฐานข้อมูลเพื่อรวบรวมหลักฐานการตรวจสอบ ฉันยังสะดุดกับบทความที่น่าสนใจนี้เกี่ยวกับการดูแลบันทึกการเปลี่ยนแปลงของฐานข้อมูลที่พยายามแสดงรายการข้อดีข้อเสียของแต่ละวิธี มันเขียนได้ดีมากและมีข้อมูลที่น่าสนใจ แต่มันทำให้การตัดสินใจของฉันยากขึ้น คำถามของฉันคือ:มีการอ้างอิงที่ฉันสามารถใช้ได้หรืออาจเป็นหนังสือหรือบางอย่างเช่นแผนผังการตัดสินใจที่ฉันสามารถอ้างถึงตัดสินใจว่าฉันควรจะไปทางไหนโดยพิจารณาจากตัวแปรอินพุตบางตัวเช่น: ครบกําหนดของสคีมาฐานข้อมูล วิธีสอบถามข้อมูลจะถูกสอบถาม ความน่าจะเป็นที่จะต้องสร้างเร็กคอร์ดใหม่ มีความสำคัญมากกว่า: เขียนหรืออ่านประสิทธิภาพ ลักษณะของค่าที่บันทึกไว้ (สตริง, ตัวเลข, blobs) มีพื้นที่เก็บของว่าง แนวทางที่ฉันรู้คือ: 1. เพิ่มคอลัมน์สำหรับวันที่สร้างและแก้ไขและผู้ใช้ ตัวอย่างตาราง: รหัส value_1 value_2 VALUE_3 วันที่สร้าง MODIFIED_DATE สร้างโดย modified_by ข้อเสียที่สำคัญ: เราสูญเสียประวัติของการแก้ไข ไม่สามารถย้อนกลับหลังคอมมิชชัน 2. ใส่เฉพาะตาราง ตัวอย่างตาราง : รหัส value_1 value_2 VALUE_3 จาก ถึง ลบแล้ว (บูลีน) ผู้ใช้งาน ข้อเสียที่สำคัญ: จะทำให้คีย์ต่างประเทศทันสมัยอย่างไร? …

15
เมื่อใด / เพราะเหตุใดจึงใช้ Cascading ใน SQL Server
เมื่อตั้งค่าคีย์ต่างประเทศใน SQL Server ภายใต้สถานการณ์ใดที่คุณควรให้มันเป็นลบหรือปรับปรุงและเหตุผลที่อยู่เบื้องหลังมันคืออะไร? อาจใช้กับฐานข้อมูลอื่นเช่นกัน ฉันกำลังมองหาตัวอย่างที่เป็นรูปธรรมมากที่สุดของแต่ละสถานการณ์โดยเฉพาะอย่างยิ่งจากคนที่ใช้พวกเขาสำเร็จ

6
เกิดอะไรขึ้นกับคอลัมน์ที่ไม่มีค่าในคีย์หลักคอมโพสิต
ORACLE ไม่อนุญาตให้มีค่า NULL ในคอลัมน์ใด ๆ ที่ประกอบด้วยคีย์หลัก ดูเหมือนว่าจะเป็นจริงสำหรับระบบ "ระดับองค์กร" อื่น ๆ ส่วนใหญ่ ในเวลาเดียวกันระบบส่วนใหญ่ยังอนุญาตให้มีข้อ จำกัดเฉพาะในคอลัมน์ที่ไม่มีค่าได้ เหตุใดข้อ จำกัด ที่ไม่ซ้ำกันจึงสามารถมีค่า NULL ได้ แต่คีย์หลักไม่สามารถทำได้ มีเหตุผลเชิงตรรกะสำหรับสิ่งนี้หรือมีข้อ จำกัด ทางเทคนิคมากกว่านี้หรือไม่?

5
PostgreSQL: มันจะดีกว่าถ้าใช้หลายฐานข้อมูลกับหนึ่ง schema หรือฐานข้อมูลหนึ่งที่มีหลาย schema?
หลังจากความคิดเห็นนี้กับหนึ่งในคำถามของฉันฉันคิดว่ามันจะดีกว่าการใช้ฐานข้อมูลเดียวกับ X schemas หรือในทางกลับกัน สถานการณ์ของฉัน: ฉันกำลังพัฒนาเว็บแอปพลิเคชั่นที่เมื่อผู้คนลงทะเบียนฉันสร้าง (จริง ๆ ) ฐานข้อมูล (ไม่มันไม่ใช่เครือข่ายโซเชียล: ทุกคนต้องเข้าถึงข้อมูลของตัวเองและไม่เห็นข้อมูลของผู้ใช้คนอื่น) . นั่นคือวิธีที่ฉันใช้สำหรับเวอร์ชันก่อนหน้าของแอปพลิเคชันของฉัน (ที่ยังคงทำงานบน MySQL): ผ่าน Plesk API สำหรับการลงทะเบียนทุกครั้งฉันทำได้ สร้างผู้ใช้ฐานข้อมูลที่มีสิทธิ์ จำกัด ; สร้างฐานข้อมูลที่สามารถเข้าถึงได้โดยผู้ใช้ที่สร้างไว้ก่อนหน้าและ superuser (สำหรับการบำรุงรักษา) เติมฐานข้อมูล ตอนนี้ฉันจะต้องทำเช่นเดียวกันกับ PostgreSQL (โครงการกำลังจะเติบโตและ MySQL ... ไม่ตอบสนองทุกความต้องการ) ฉันต้องมีการสำรองฐานข้อมูล / สกีมาทั้งหมด: pg_dump ทำงานได้อย่างสมบูรณ์แบบทั้งสองวิธีและเหมือนกันสำหรับผู้ใช้ที่สามารถกำหนดค่าให้เข้าถึงสคีมาเดียวหรือฐานข้อมูลเดียว ดังนั้นสมมติว่าคุณเป็นผู้ใช้ PostgreSQL ที่มีประสบการณ์มากกว่าฉันคุณคิดว่าอะไรคือทางออกที่ดีที่สุดสำหรับสถานการณ์ของฉันและทำไม จะมีความแตกต่างด้านประสิทธิภาพโดยใช้ฐานข้อมูล $ x แทนที่จะเป็น $ x schemas หรือไม่ และจะแก้ปัญหาอะไรได้ดีในอนาคต …

7
การใช้ข้อคิดเห็นและไลค์ในฐานข้อมูล
ฉันเป็นนักพัฒนาซอฟต์แวร์ ฉันรักที่จะรหัส แต่ฉันเกลียดฐานข้อมูล ... ปัจจุบันฉันสร้างเว็บไซต์ที่ผู้ใช้จะได้รับอนุญาตให้ทำเครื่องหมายกิจการเป็นชอบ (เหมือนใน FB) แท็กมันและแสดงความคิดเห็น ฉันติดอยู่กับการออกแบบตารางฐานข้อมูลสำหรับจัดการฟังก์ชันนี้ การแก้ปัญหาเป็นเรื่องไม่สำคัญหากเราสามารถทำสิ่งนี้ได้เพียงประเภทเดียวเท่านั้น (เช่นภาพถ่าย) แต่ฉันต้องเปิดใช้งานสิ่งนี้สำหรับ 5 สิ่งที่แตกต่างกัน (ตอนนี้ แต่ฉันยังคิดว่าจำนวนนี้สามารถเพิ่มขึ้นได้เช่นกันเมื่อการบริการทั้งหมดเพิ่มขึ้น) ฉันพบคำถามที่คล้ายกันที่นี่ แต่ไม่มีคำตอบที่น่าพอใจดังนั้นฉันจึงถามคำถามนี้อีกครั้ง คำถามคือวิธีการที่ถูกต้องได้อย่างมีประสิทธิภาพและยืดหยุ่นในการออกแบบฐานข้อมูลเพื่อที่จะสามารถเก็บความคิดเห็นแตกต่างกันสำหรับตาราง , ชอบแตกต่างกันสำหรับตารางและแท็กสำหรับพวกเขา รูปแบบการออกแบบบางคำตอบจะดีที่สุด;) รายละเอียด : ฉันมีตาราง Userที่มีข้อมูลของผู้ใช้บางส่วนและอีก 3 ตาราง : Photoกับการถ่ายภาพ , Articlesกับบทความ , Placesกับสถานที่ ฉันต้องการเปิดใช้งานผู้ใช้ที่บันทึกไว้เพื่อ: แสดงความคิดเห็นใด ๆ ใน 3 ตารางเหล่านั้น ทำเครื่องหมายใด ๆ ของพวกเขาเป็นที่ชอบ ติดแท็กใด ๆ ของพวกเขาด้วยแท็กบางอย่าง ฉันต้องการนับจำนวนไลค์สำหรับทุกองค์ประกอบและจำนวนครั้งที่ใช้แท็กเฉพาะ 1 เซนต์วิธีการ : …

12
ใช้ตารางการกำหนดค่าแถวเดียวในฐานข้อมูล SQL Server ความคิดที่ไม่ดี?
ในการพัฒนาแอปพลิเคชั่นตะกร้าสินค้าฉันพบว่าฉันต้องการบันทึกการตั้งค่าและการกำหนดค่าตามความต้องการและความต้องการของผู้ดูแลระบบ ข้อมูลนี้สามารถเป็นอะไรก็ได้จากข้อมูล บริษัท รหัสบัญชีการจัดส่งคีย์ PayPal API การตั้งค่าการแจ้งเตือน ฯลฯ ดูเหมือนว่าไม่เหมาะสมอย่างยิ่งที่จะสร้างตารางเพื่อจัดเก็บแถวเดียวในระบบฐานข้อมูลเชิงสัมพันธ์ วิธีที่เหมาะสมในการจัดเก็บข้อมูลนี้คืออะไร? หมายเหตุ: DBMS ของฉันคือ SQL Server 2008 และมีการใช้งานเลเยอร์การเขียนโปรแกรมด้วย ASP.NET (ใน C #)

14
วิธีการออกแบบฐานข้อมูลสำหรับฟิลด์ที่ผู้ใช้กำหนด?
ความต้องการของฉันคือ: จำเป็นต้องสามารถเพิ่มเขตข้อมูลที่ผู้ใช้กำหนดเองได้ทุกประเภท จำเป็นต้องสามารถสืบค้น UDF ได้อย่างรวดเร็ว จำเป็นต้องสามารถทำการคำนวณกับ UDF ตามประเภทข้อมูล จำเป็นต้องสามารถจัดเรียง UDF ตามประเภทข้อมูล ข้อมูลอื่น ๆ: ฉันกำลังมองหาการแสดงเป็นหลัก มีข้อมูลหลักสองสามล้านระเบียนที่สามารถแนบข้อมูล UDF ได้ เมื่อฉันตรวจสอบครั้งล่าสุดมีเร็กคอร์ด UDF มากกว่า 50mil ในฐานข้อมูลปัจจุบันของเรา ส่วนใหญ่แล้ว UDF จะแนบไปกับบันทึกหลักสองสามพันเท่านั้นไม่ใช่ทั้งหมด UDF ไม่ได้เข้าร่วมหรือใช้เป็นกุญแจ เป็นเพียงข้อมูลที่ใช้สำหรับการสืบค้นหรือรายงาน ตัวเลือก: สร้างตารางขนาดใหญ่ด้วย StringValue1, StringValue2 ... IntValue1, IntValue2, ... ฯลฯ ฉันเกลียดความคิดนี้ แต่จะพิจารณาถ้ามีใครสามารถบอกฉันได้ดีกว่าความคิดอื่น ๆ และทำไม สร้างตารางแบบไดนามิกซึ่งเพิ่มคอลัมน์ใหม่ตามต้องการ ฉันไม่ชอบความคิดนี้เนื่องจากฉันรู้สึกว่าประสิทธิภาพจะช้าถ้าคุณทำดัชนีทุกคอลัมน์ สร้างตารางเดียวที่มี UDFName, UDFDataType และ Value เมื่อเพิ่ม UDF …

24
ฉันควรตั้งชื่อตารางที่แมปสองตารางเข้าด้วยกันอย่างไร [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบพร้อมข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ สมมติว่าฉันมีสองโต๊ะ: Table: Color Columns: Id, ColorName, ColorCode Table: Shape Columns: Id, ShapeName, VertexList ฉันควรเรียกตารางที่แมปสีกับรูปร่างอย่างไร Table: ??? Columns: ColorId, ShapeId

4
วิธีการออกแบบตารางผลิตภัณฑ์สำหรับผลิตภัณฑ์หลายชนิดที่แต่ละผลิตภัณฑ์มีพารามิเตอร์มากมาย
ฉันไม่มีประสบการณ์ในการออกแบบโต๊ะมากนัก เป้าหมายของฉันคือการสร้างตารางผลิตภัณฑ์อย่างน้อยหนึ่งรายการที่ตรงตามข้อกำหนดด้านล่าง: สนับสนุนผลิตภัณฑ์หลายชนิด (TV, Phone, PC, ... ) ผลิตภัณฑ์แต่ละชนิดมีชุดพารามิเตอร์ที่แตกต่างกันเช่น: โทรศัพท์จะมีสี, ขนาด, น้ำหนัก, OS ... พีซีจะมี CPU, HDD, RAM ... ชุดของพารามิเตอร์ต้องเป็นแบบไดนามิก คุณสามารถเพิ่มหรือแก้ไขพารามิเตอร์ใด ๆ ที่คุณต้องการ ฉันจะปฏิบัติตามข้อกำหนดเหล่านี้ได้อย่างไรโดยไม่มีตารางแยกสำหรับผลิตภัณฑ์แต่ละประเภท

8
วิธีที่มีประสิทธิภาพที่สุดในการจัดเก็บแท็กในฐานข้อมูลคืออะไร?
ฉันกำลังใช้ระบบติดแท็กบนเว็บไซต์ของฉันคล้ายกับการใช้สแต็คโอเวอร์โฟลว์หนึ่งคำถามของฉันคืออะไรวิธีที่มีประสิทธิภาพมากที่สุดในการจัดเก็บแท็กเพื่อให้สามารถค้นหาและกรองได้อย่างไร ความคิดของฉันคือ: Table: Items Columns: Item_ID, Title, Content Table: Tags Columns: Title, Item_ID ช้าเกินไปหรือไม่ มีวิธีที่ดีกว่า?

20
เครื่องมือที่ดีที่จะเห็นภาพคีมาฐานข้อมูล? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา มีเครื่องมือที่ดีสำหรับการแสดงภาพสคีมาฐานข้อมูลที่มีอยู่ก่อนหรือไม่ ฉันใช้ MySQL ถ้ามันสำคัญ ขณะนี้ฉันใช้ MySQL Workbench เพื่อประมวลผล SQL สร้างสคริปต์การถ่ายโอนข้อมูล แต่มัน clunky ช้าและกระบวนการแบบแมนนวลเพื่อลากตารางทั้งหมดเกี่ยวกับ (ซึ่งจะไม่เป็นไรถ้ามันไม่ช้า)

13
ออกแบบฐานข้อมูล Facebook?
ฉันสงสัยมาตลอดว่า Facebook ออกแบบความสัมพันธ์กับผู้ใช้ของเพื่อน <-> อย่างไร ฉันคิดว่าตารางผู้ใช้เป็นดังนี้: user_email PK user_id PK password ฉันคิดว่าตารางที่มีข้อมูลของผู้ใช้ (เพศอายุ ฯลฯ ที่เชื่อมต่อผ่านอีเมลผู้ใช้ฉันจะถือว่า) มันเชื่อมต่อเพื่อนทั้งหมดกับผู้ใช้นี้อย่างไร? อะไรทำนองนี้? user_id friend_id_1 friend_id_2 friend_id_3 friend_id_N อาจจะไม่. เนื่องจากไม่ทราบจำนวนผู้ใช้และจะขยายออกไป

9
คุณจำลองการสืบทอดอย่างมีประสิทธิภาพในฐานข้อมูลได้อย่างไร?
แนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้างแบบจำลองการสืบทอดในฐานข้อมูลคืออะไร? อะไรคือการแลกเปลี่ยน (เช่นความสามารถในการตอบสนอง)? (ฉันสนใจ SQL Server และ. NET มากที่สุด แต่ฉันก็อยากเข้าใจว่าแพลตฟอร์มอื่น ๆ แก้ไขปัญหานี้อย่างไร)

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