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

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

3
ชุดข้อมูลเชิงพื้นที่ขนาดใหญ่ (> 22 ล้านล้านรายการ) พร้อมประสิทธิภาพการสืบค้นอย่างรวดเร็ว (<1s)
ฉันอยู่ในกระบวนการออกแบบระบบใหม่สำหรับชุดข้อมูลเชิงพื้นที่ขนาดใหญ่ที่ต้องการประสิทธิภาพการสืบค้นอย่างรวดเร็ว ดังนั้นฉันต้องการดูว่าใครคิดว่าเป็นไปได้หรือมีประสบการณ์ / คำแนะนำเกี่ยวกับ DBMSs ที่เหมาะสมโครงสร้างข้อมูลหรือวิธีการทางเลือกเพื่อให้ได้ประสิทธิภาพตามที่ต้องการในสถานการณ์ต่อไปนี้: ข้อมูลจะถูกผลิตอย่างต่อเนื่องจากข้อมูลเรดาร์ดาวเทียมที่ผ่านการประมวลผลซึ่งจะครอบคลุมทั่วโลก จากความละเอียดของดาวเทียมและพื้นที่ครอบคลุมของโลกฉันประเมินชุดข้อมูลทั้งหมดเพื่อสร้างมูลค่าที่ 75 พันล้านตำแหน่งโดยสิ้นเชิงในโลก ตลอดช่วงชีวิตของดาวเทียมดวงเดียวเอาต์พุตจะสร้างค่าได้สูงสุด 300 ค่าในแต่ละตำแหน่งเหล่านี้ (ดังนั้นชุดข้อมูลทั้งหมดที่มีค่า&gt; 22 ล้านล้านค่า) นี่เป็นดาวเทียมหนึ่งดวงและมีวงโคจรอยู่หนึ่งวินาทีและอีกสองวางแผนในไม่กี่ปีใหม่ ดังนั้นจะมีข้อมูลจำนวนมาก! รายการข้อมูลเดียวนั้นง่ายมากและจะประกอบไปด้วย (ลองจิจูด, ค่าละติจูด, ค่า) แต่เนื่องจากจำนวนรายการที่ฉันประเมินดาวเทียมหนึ่งดวงเพื่อผลิตสูงสุด 100TB ข้อมูลที่เป็นลายลักษณ์อักษรไม่ควรต้องมีการอัพเดทเนื่องจากจะเพิ่มขึ้นเมื่อมีการดำเนินการจัดหาดาวเทียมใหม่ ประสิทธิภาพการเขียนไม่สำคัญ แต่ประสิทธิภาพการอ่านมีความสำคัญ เป้าหมายของโครงการนี้คือเพื่อให้สามารถมองเห็นข้อมูลผ่านอินเทอร์เฟซแบบง่ายเช่นเลเยอร์เหนือแผนที่ google ซึ่งแต่ละจุดมีค่าสีตามค่าเฉลี่ยการไล่ระดับสีหรือฟังก์ชันบางช่วงเวลา (สาธิตที่ส่วนท้ายของโพสต์) จากข้อกำหนดเหล่านี้ฐานข้อมูลจะต้องสามารถปรับขนาดได้และเรามีแนวโน้มที่จะมองหาโซลูชั่นระบบคลาวด์ ระบบจะต้องสามารถจัดการกับข้อความค้นหาเชิงพื้นที่เช่น "points near (lat, lon)" และ "points within (box)" และมีประสิทธิภาพการอ่าน &lt;1s สำหรับการหาจุดเดียวและรูปหลายเหลี่ยมที่มีถึง 50,000 คะแนน (ถึง 200,000 คะแนนน่าจะดีกว่า) จนถึงตอนนี้ฉันมีชุดข้อมูลทดสอบ …

3
การใช้ชนิดย่อยของชนิดย่อยในรูปแบบการออกแบบชนิด / ชนิดย่อยที่มีคลาสย่อยเฉพาะซึ่งกันและกัน
บทนำ เพื่อให้คำถามนี้มีประโยชน์สำหรับผู้อ่านในอนาคตฉันจะใช้ตัวแบบข้อมูลทั่วไปเพื่อแสดงปัญหาที่ฉันเผชิญ รูปแบบข้อมูลของเราประกอบด้วย 3 หน่วยงานซึ่งจะต้องได้รับการระบุว่าเป็นA, และB Cเพื่อให้ทุกอย่างง่ายขึ้นคุณลักษณะทั้งหมดของพวกเขาจะเป็นintประเภท Entity Aมีแอตทริบิวต์ต่อไปนี้: D, EและX; Entity Bมีแอตทริบิวต์ต่อไปนี้: D, EและY; เอนทิตีCมีคุณสมบัติดังต่อไปนี้: DและZ; เนื่องจากเอนทิตีทั้งหมดใช้แอตทริบิวต์ร่วมกันDฉันจึงตัดสินใจใช้การออกแบบชนิด / ชนิดย่อย ข้อสำคัญ: เอนทิตีเป็นเอกสิทธิ์เฉพาะบุคคล! หมายความว่าเอนทิตีนั้นเป็น A หรือ B หรือ C ปัญหา: หน่วยงานAและBมีอีกแอตทริบิวต์ทั่วไปแต่แอตทริบิวต์นี้ไม่ได้อยู่ในกิจการEC คำถาม: ฉันต้องการใช้คุณลักษณะที่อธิบายข้างต้นเพื่อเพิ่มประสิทธิภาพการออกแบบของฉันถ้าเป็นไปได้ ความจริงแล้วฉันไม่รู้ว่าจะทำอย่างไรและจะเริ่มต้นอย่างไรจึงจะโพสต์นี้

4
มีเครื่องมือในการตรวจสอบว่าฐานข้อมูลของฉันเป็นมาตรฐานในรูปแบบปกติที่สามหรือไม่?
ฉันเรียนรู้เกี่ยวกับการทำให้เป็นมาตรฐานเมื่อเร็ว ๆ นี้และเข้าใจว่าการใช้สคีมาใหม่นั้นมีความสำคัญเพียงใด ฉันจะตรวจสอบว่าฐานข้อมูลของฉันเป็นไปตาม 2NF หรือ 3NF ได้หรือไม่? การตรวจสอบด้วยตนเองเป็นตัวเลือกที่แน่นอน แต่ฉันกำลังมองหาเครื่องมืออัตโนมัติที่นี่ ฉันไม่ได้กำลังมองหาเครื่องมือจุดและคลิกสิ่งที่มากกว่านั้นจะเน้นการปรับให้เหมาะสมที่สุดเพื่อให้เป็นไปตามตาราง 3NF ฉันเดาว่าอาจใช้สถิติจากข้อมูลตัวอย่างที่ดีและ / หรือการวิเคราะห์ความหมายของชื่อคอลัมน์

5
คอลัมน์ว่างเปล่าใช้พื้นที่ในตารางหรือไม่?
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันมีตารางที่เก็บจากข้อมูลพื้นฐานมาก เพียงแค่ชื่อและเขตข้อมูลวันที่ไม่กี่ มีเขตข้อมูลหนึ่งที่เรียกว่าความคิดเห็นซึ่งเป็น varchar (4000) ส่วนใหญ่เวลาที่เราเว้นว่างไว้ แต่บางครั้งจะป้อนข้อมูลจำนวนมากที่นี่ นี่เป็นการออกแบบที่ไม่ดีจริงเหรอ? หรือนี่เป็นเพียงเล็กน้อยที่ไม่มีประสิทธิภาพ? ฉันจะถือว่าการสร้างตารางแยกสำหรับคอลัมน์นี้จะดีกว่า หมายเหตุ: นี่คือ sql server 2008

1
การออกแบบฐานข้อมูล: ความสัมพันธ์ 1 ถึง 2 หลายรายการไปยังตารางเดียวกัน
ฉันต้องสร้างแบบจำลองสถานการณ์ที่ฉันมีตาราง Chequing_Account (ซึ่งมีงบประมาณหมายเลข iban และรายละเอียดอื่น ๆ ของบัญชี) ซึ่งจะต้องเกี่ยวข้องกับสองตารางที่แตกต่างกัน Person and Corporation ซึ่งทั้งสองสามารถมีบัญชี chequing 0, 1 หรือหลายบัญชี กล่าวอีกนัยหนึ่งฉันมีความสัมพันธ์แบบ 1 ต่อ 2 สองความสัมพันธ์กับบัญชี Chequing ตารางเดียวกัน ฉันต้องการฟังวิธีแก้ไขปัญหานี้ซึ่งเป็นไปตามข้อกำหนดการทำให้เป็นมาตรฐาน โซลูชันส่วนใหญ่ที่ฉันเคยได้ยินคือ: 1) ค้นหาเอนทิตีทั่วไปที่ทั้ง Person และ Corporation อยู่และสร้างตารางเชื่อมโยงระหว่างตารางนี้กับตาราง Chequing_Account สิ่งนี้ไม่สามารถทำได้ในกรณีของฉันและแม้ว่าฉันต้องการแก้ไขปัญหาทั่วไปไม่ใช่อินสแตนซ์เฉพาะนี้ 2) สร้างตารางเชื่อมโยงสองตาราง PersonToChequingAccount และ CorporationToChequingAccount ซึ่งเกี่ยวข้องกับสองเอนทิตีกับบัญชี Chequing อย่างไรก็ตามฉันไม่ต้องการให้บุคคลสองคนมีบัญชี chequing เดียวกันและฉันไม่ต้องการให้บุคคลธรรมดาและ บริษัท แบ่งปันบัญชี chequing! เห็นภาพนี้ 3) สร้างกุญแจต่างประเทศสองใบในบัญชี Chequing …

7
ฉันจะบังคับให้หนึ่งระเบียนมีค่าจริงสำหรับคอลัมน์บูลีนและค่าอื่น ๆ ทั้งหมดเป็นค่าเท็จได้อย่างไร
ฉันต้องการบังคับใช้ว่ามีเพียงระเบียนเดียวในตารางที่ถือว่าเป็นค่า "เริ่มต้น" สำหรับคิวรีหรือมุมมองอื่นที่อาจเข้าถึงตารางนั้น โดยพื้นฐานแล้วฉันต้องการรับประกันว่าแบบสอบถามนี้จะส่งคืนแถวเดียวเสมอ: SELECT ID, Zip FROM PostalCodes WHERE isDefault=True ฉันจะทำเช่นนั้นใน SQL ได้อย่างไร

4
ปัญหาความสัมพันธ์ของเอนทิตี
ฉันมี 4 ตารางที่เกี่ยวข้องเช่นนี้ (เป็นตัวอย่าง): Company: ID Name CNPJ Department: ID Name Code ID_Company Classification: ID Name Code ID_Company Workers: Id Name Code ID_Classification ID_Department สมมติว่าผมมีกับclassification id = 20, id_company = 1และdepartmentที่มีid_company = 2(ที่แสดงถึง บริษัท อื่น) สิ่งนี้จะทำให้เกิดการสร้างคนงานที่มาจากสอง บริษัท เนื่องจากการจำแนกประเภทและแผนกเชื่อมโยงกับ บริษัท แยกกัน ฉันไม่ต้องการที่จะเกิดขึ้นดังนั้นฉันคิดว่าฉันมีปัญหากับความสัมพันธ์ของฉันและฉันไม่รู้วิธีแก้ปัญหา

2
ปิดใช้งานข้อ จำกัด และการตรวจสอบตารางทั้งหมดขณะที่กู้คืนดัมพ์
ฉันได้รับดัมพ์ของฐานข้อมูล PostgreSQL ของฉันด้วย: pg_dump -U user-name -d db-name -f dumpfile ซึ่งฉันแล้วดำเนินการคืนค่าในฐานข้อมูลอื่นด้วย: psql X -U postgres -d db-name-b -f dumpfile ปัญหาของฉันคือฐานข้อมูลมีข้อ จำกัด การอ้างอิงการตรวจสอบและทริกเกอร์และข้อผิดพลาดบางอย่าง (การตรวจสอบโดยเฉพาะอย่างยิ่งดูเหมือนจะเกิดขึ้น) ในระหว่างการกู้คืนเนื่องจากข้อมูลไม่ถูกโหลดตามลำดับที่จะทำให้การตรวจสอบเหล่านั้นได้รับเกียรติ ยกตัวอย่างเช่นการแทรกแถวในตารางอาจจะเกี่ยวข้องกับการCHECKที่เรียกplpgsqlฟังก์ชั่นที่ตรวจสอบไม่ว่าจะเป็นสภาพที่ถือในตารางที่ไม่เกี่ยวข้องอื่น ๆ หากตารางหลังนั้นไม่โหลดpsqlก่อนก่อนจะเกิดข้อผิดพลาด ต่อไปนี้เป็น SSCCE ที่สร้างฐานข้อมูลดังกล่าวซึ่งเมื่อทิ้งด้วยpg_dumpไม่สามารถกู้คืนได้: CREATE OR REPLACE FUNCTION fail_if_b_empty () RETURNS BOOLEAN AS $$ SELECT EXISTS (SELECT 1 FROM b) $$ LANGUAGE SQL; CREATE …

4
ฐานข้อมูล SQL Server บน SSD - มีประโยชน์กับไฟล์แยกกันสำหรับทุกตารางหรือไม่?
ฉันกำลังสร้างฐานข้อมูลที่จะมีประมาณ 30 ตารางโดยทุกตารางมีจำนวนแถวหลายสิบล้านแถวและแต่ละตารางมีคอลัมน์สำคัญเพียงคอลัมน์เดียวและคอลัมน์คีย์หลัก / หลักต่างประเทศเพื่อเพิ่มประสิทธิภาพการสืบค้นสูงสุด อัพเดตและการแทรกและใช้ประโยชน์อย่างมากของดัชนีคลัสเตอร์ ตารางสองตารางจะมีข้อมูลที่เป็นข้อความที่มีความยาวผันแปรโดยหนึ่งในนั้นมีหลายร้อยล้านแถว แต่ที่เหลือจะมีเพียงข้อมูลตัวเลข เมื่อฉันต้องการบีบประสิทธิภาพออกมาจากฮาร์ดแวร์ที่มีอยู่ (เช่น RAM 64GB, SSD ที่เร็วมากและ 16 คอร์) ฉันคิดว่าจะอนุญาตให้แต่ละตารางมีไฟล์ของตัวเองได้ ฉันกำลังเข้าร่วมใน 2, 3, 4, 5 หรือมากกว่าตารางแต่ละตารางจะถูกอ่านโดยใช้เธรดแยกต่างหากและโครงสร้างของแต่ละไฟล์จะได้รับการจัดตำแหน่งอย่างใกล้ชิดกับเนื้อหาของตารางซึ่งหวังว่าจะช่วยลดการกระจายตัวและทำให้เร็วขึ้น สำหรับ SQL Server เพื่อเพิ่มเนื้อหาของตารางใดก็ตาม หนึ่งข้อแม้ผมติดอยู่ใน SQL Server 2008 R2 Web Edition ซึ่งหมายความว่าฉันไม่สามารถใช้การแบ่งพาร์ติชันในแนวนอนอัตโนมัติซึ่งเป็นกฎที่ออกมาเป็นการยกระดับประสิทธิภาพ จะใช้หนึ่งไฟล์ต่อตารางจริง ๆ แล้วเพิ่มประสิทธิภาพหรือไม่หรือฉันกำลังมองหาคุณลักษณะเอ็นจิน SQL Server ในตัวที่จะทำให้ซ้ำซ้อน? ข้อที่สองถ้าใช้ไฟล์หนึ่งไฟล์ต่อหนึ่งตารางจะได้เปรียบทำไมcreate tableฉันถึงให้ตัวเลือกในการจัดสรรตารางให้กับกลุ่มไฟล์และไม่ใช่เฉพาะไฟล์โลจิคัล? สิ่งนี้จะทำให้ฉันต้องสร้างกลุ่มไฟล์แยกต่างหากสำหรับทุกไฟล์ในสถานการณ์ของฉันซึ่งแนะนำให้ฉันทราบว่าบางที SQL Server อาจไม่ได้มองเห็นถึงข้อดีที่ฉันสมมติว่าจะมาจากการทำสิ่งที่ฉันเสนอ

5
การบังคับใช้ความถูกต้องของฐานข้อมูล
สิ่งนี้จะสมเหตุสมผลหรือไม่ที่จะให้แอปพลิเคชั่นบังคับใช้ความถูกต้องของฐานข้อมูลแทนการมีคีย์ต่างประเทศตรวจสอบข้อ จำกัด ฯลฯ การปรับปรุงประสิทธิภาพเท่าไหร่ที่สามารถคาดหวังว่าจะไม่บังคับใช้ความถูกต้องของฐานข้อมูลผ่านเครื่องมือฐานข้อมูลภายใน

2
INT หรือ CHAR สำหรับเขตข้อมูลประเภท
การออกแบบที่ดีที่สุดสำหรับตารางคืออะไรTypeข้อมูลที่เป็นintหรือchar(1)? กล่าวอีกนัยหนึ่งให้คีมานี้: create table Car ( Name varchar(100) not null, Description varchar(100) not null, VehType .... not null ) มันมีประสิทธิภาพมากกว่า (ฉลาดในการทำงาน) VehTypeเพื่อที่จะเป็นintหรือchar(1)? สมมติว่าคุณมีรถยนต์ห้าประเภทคุณควรใช้ค่าที่เพิ่มขึ้น 0 -&gt; 4 หรือตัวอักษรสำหรับประเภท (พูด; 'v', 's', 'c', 't', 'm')? หากเป็นมากกว่านั้นฉันจะใช้ตาราง Type แยกต่างหากและมีความสัมพันธ์กับคีย์ต่างประเทศ แต่ฉันไม่เห็นความต้องการดังกล่าว ฉันสังเกตเห็นว่าsys.objectsมุมมองแคตตาล็อกใช้อักขระสำหรับtypeฟิลด์ มีเหตุผลสำหรับสิ่งนั้นหรือไม่? ฉันเพิ่งจะคว้าที่อากาศที่นี่และมันเป็นสิ่งที่ฉันสะดวกสบายด้วยหรือไม่

3
แบบแผนการตั้งชื่อชื่อคอลัมน์และแนวปฏิบัติที่เหมาะสมที่สุด
ฉันต้องการความคิดเห็นของผู้เชี่ยวชาญบางประการเกี่ยวกับการปฏิบัติที่ดีที่สุดเมื่อมันมาถึงการตั้งชื่อคอลัมน์ พื้นหลังเป็นไปตาม Wikipedia , ไวยากรณ์ต่อไปนี้ SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID); มีประสิทธิภาพมากกว่า SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID); อย่างไรก็ตามJOIN ... USINGไวยากรณ์ทำงานเฉพาะของคอลัมน์ที่สำคัญทั้งหมดหลักมีชื่อซ้ำกันทั่วโลก ดังนั้นฉันสงสัยว่านี่เป็นสิ่งที่ถูกต้องที่จะทำ ส่วนตัวผมมักจะใช้ในการสร้างตารางที่มีคอลัมน์ PK และคอลัมน์ที่สำคัญต่างประเทศid othertable_idแต่วิธีการมันเป็นไปไม่ได้ที่จะใช้หรือUSINGNATURAL JOIN การเชื่อมโยงใด ๆ กับสไตล์การออกแบบหรือแนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบตารางจะได้รับการชื่นชมเช่นกัน!

6
Oracle สร้างไดอะแกรม ER และพจนานุกรมข้อมูล
ฉันยังใหม่กับฐานข้อมูล Oracle และต้องการพัฒนาพจนานุกรมข้อมูลและไดอะแกรม ER สำหรับฐานข้อมูลที่มีอยู่ของเรา คุณมีเคล็ดลับสคริปต์เครื่องมือในการทำเช่นนั้นหรือไม่?

2
MySQL VARCHAR และ TEXT แตกต่างกันอย่างไร?
หลังจากเวอร์ชัน 5.0.3 (ซึ่งอนุญาตให้ VARCHAR เป็น 65,535 ไบต์และหยุดการตัดทอนช่องว่างต่อท้าย) มีความแตกต่างที่สำคัญระหว่างสองประเภทข้อมูลหรือไม่ ฉันกำลังอ่านรายการความแตกต่างและโน้ตสองข้อเท่านั้นคือ: สำหรับดัชนีในคอลัมน์ BLOB และ TEXT คุณต้องระบุความยาวส่วนนำหน้าดัชนี สำหรับ CHAR และ VARCHAR ความยาวของคำนำหน้าเป็นทางเลือก ดูหัวข้อ 7.5.1“ ดัชนีคอลัมน์” และ คอลัมน์ BLOB และ TEXT ไม่สามารถมีค่าเริ่มต้นได้ ดังนั้นเนื่องจากข้อ จำกัด สองข้อนี้ในประเภทข้อมูล TEXT ทำไมคุณถึงใช้มากกว่า varchar (65535) มีผลการดำเนินงานที่แตกต่างกันอย่างใดอย่างหนึ่ง?

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

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