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

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

2
ฉันควรใช้การเปรียบเทียบชุดใดในฮีบรูในพระคัมภีร์ไบเบิล?
ฉันควรใช้การเปรียบเทียบ SQL Server สำหรับภาษาฮีบรูในพระคัมภีร์ไบเบิลอย่างไร ฐานข้อมูลที่อยู่ระหว่างการพิจารณาจำเป็นต้องมีการกำกับกำกับ (เช่นเสียงสระ, เสียง, เสียงแหลม, ฯลฯ )

2
ข้อ จำกัด ค่าเริ่มต้นคุ้มค่าหรือไม่
ฉันมักจะออกแบบฐานข้อมูลตามกฎต่อไปนี้: ไม่มีใครอื่นนอกจาก db_owner และดูแลระบบสามารถเข้าถึงตารางฐานข้อมูล บทบาทของผู้ใช้จะถูกควบคุมที่ชั้นแอปพลิเคชัน ฉันมักจะใช้บทบาท db หนึ่งรายการเพื่อให้สิทธิ์เข้าถึงมุมมองโพรซีเดอร์และฟังก์ชันที่เก็บไว้ แต่ในบางกรณีฉันเพิ่มกฎที่สองเพื่อปกป้องโพรซีเดอร์ที่เก็บไว้บางส่วน ฉันใช้ TRIGGERS เพื่อตรวจสอบข้อมูลที่สำคัญในขั้นต้น CREATE TRIGGER <TriggerName> ON <MyTable> [BEFORE | AFTER] INSERT AS IF EXISTS (SELECT 1 FROM inserted WHERE Field1 <> <some_initial_value> OR Field2 <> <other_initial_value>) BEGIN UPDATE MyTable SET Field1 = <some_initial_value>, Field2 = <other_initial_value> ... END DML ดำเนินการโดยใช้กระบวนงานที่เก็บไว้: …

2
MySQL - varchar ความยาวและประสิทธิภาพ
VARCHARขนาดที่ประกาศออกมาเหมาะสมกับประสิทธิภาพหรือไม่? มีความแตกต่าง (ความเร็ว) ระหว่างVARCHAR(50)และVARCHAR(255)? หรือการกำหนดความยาวคือข้อ จำกัด ด้านตรรกะ / การออกแบบ?

6
ข้อเสียของการมีคอลัมน์จำนวนเต็มเดียวเป็นคีย์หลักเสมอ
ภายในเว็บแอปพลิเคชั่นตัวหนึ่งที่ฉันทำงานอยู่การดำเนินการฐานข้อมูลทั้งหมดจะถูกทำให้เป็นนามธรรมโดยใช้แหล่งเก็บข้อมูลทั่วไปที่กำหนดไว้ผ่าน Entity Framework ORM อย่างไรก็ตามเพื่อให้มีการออกแบบที่เรียบง่ายสำหรับที่เก็บข้อมูลทั่วไปตารางที่เกี่ยวข้องทั้งหมดจะต้องกำหนดจำนวนเต็มเฉพาะ ( Int32ใน C #, intใน SQL) จนถึงขณะนี้ได้รับเสมอ PK IDENTITYของตารางและยังได้ คีย์ต่างประเทศมีการใช้งานอย่างหนักและจะอ้างอิงคอลัมน์จำนวนเต็มเหล่านี้ จำเป็นสำหรับทั้งความสอดคล้องและสำหรับการสร้างคุณสมบัติการนำทางโดย ORM โดยทั่วไปแล้วแอปพลิเคชันเลเยอร์จะดำเนินการดังต่อไปนี้: การโหลดข้อมูลเริ่มต้นจากตาราง (*) -SELECT * FROM table อัพเดท -UPDATE table SET Col1 = Val1 WHERE Id = IdVal ลบ -DELETE FROM table WHERE Id = IdVal ส่วนแทรก -INSERT INTO table (cols) VALUES (...) …

6
วิธีที่ต้องการในการจัดเก็บ DateTime
เราสามารถจัดเก็บข้อมูลวันที่และเวลาได้หลายวิธี วิธีที่ดีที่สุดในการจัดเก็บข้อมูล DateTime คืออะไร การจัดเก็บวันที่และเวลาใน2 คอลัมน์แยกกันหรือหนึ่งคอลัมน์โดยใช้ DateTime ? คุณช่วยอธิบายได้ไหมว่าทำไมวิธีการนั้นถึงดีกว่า? (ลิงก์ไปยังเอกสาร MySQL สำหรับการอ้างอิงคำถามทั่วไปไม่ใช่เฉพาะ MySQL) ประเภทวันที่และเวลา : วันที่และเวลา

8
เหตุใดค่าคีย์หลักจึงเปลี่ยนไป
ฉันได้ค้นคว้าแนวคิดของ ROWGUID เมื่อเร็ว ๆ นี้และได้พบกับคำถามนี้ คำตอบนี้ให้ข้อมูลเชิงลึก แต่ทำให้ฉันลงหลุมกระต่ายที่แตกต่างกับการกล่าวถึงการเปลี่ยนค่าคีย์หลัก ความเข้าใจของฉันคือกุญแจหลักที่ไม่ควรเปลี่ยนและการค้นหาของฉันตั้งแต่การอ่านคำตอบนี้ได้ให้คำตอบที่สะท้อนการปฏิบัติที่ดีที่สุดเท่านั้น ค่าคีย์หลักจะต้องมีการเปลี่ยนแปลงภายใต้สถานการณ์ใดหลังจากสร้างเรคคอร์ดแล้ว

2
ตัวอย่างโมเดลฐานข้อมูลที่พร้อมใช้งาน
ฉันจะหาโมเดลฐานข้อมูลที่พร้อมใช้งานได้จากที่ใด ฉันไม่ต้องการฐานข้อมูลที่มีข้อมูลอยู่ แต่มีเพียงสกีมา (ไดอะแกรม UML) บางทีบางอย่างเช่นแบบจำลองข้อมูลที่ลิงค์นี้แต่มีความซับซ้อนและโลกแห่งความเป็นจริงมากขึ้น

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

2
ทำไมฉันไม่สามารถใช้ NEWSEQUENTIALID () เป็นค่าเริ่มต้นสำหรับคอลัมน์ของฉันได้
ฉันกำลังพยายามสร้างตารางใน Management Studio และหลังจากอ่านเกี่ยวกับNEWSEQUENTIALID()ฟังก์ชั่นใหม่ (จาก SQL 2005 เป็นต้นไป) คิดว่าฉันจะเลิกใช้แล้ว นี่คือสิ่งที่ฉันทำ: แต่มันไม่ให้ฉัน ข้อความแสดงข้อผิดพลาดที่ฉันได้รับคือ: 'FormTemplate (Forms)' table - Error validating the default for column 'FormTemplateId'. ฉันไม่มีเคล็ดลับที่นี่หรือไม่ ฉันใช้ SQL Server 2008 R2 แน่นอน

7
วิธีที่ดีในการจัดเก็บคอลัมน์จำนวนมากคืออะไร
ฉันมีปัญหาในการตัดสินใจว่าจะเก็บข้อมูลนี้ในฐานข้อมูลของฉันอย่างไร ข้อเสนอแนะเกี่ยวกับวิธีที่ดีที่สุดที่จะทำมัน? ฉันไม่รู้เกี่ยวกับฐานข้อมูลจำนวนมากฉันอาจเพิ่ม ฉันมีข้อมูลมาในรูปแบบเช่นนี้ แต่มากกว่า 4 จำนวนคอลัมน์คือประมาณ 240 ดังนั้นวันที่แต่ละวันจึงมีค่าที่ไม่ซ้ำกันจำนวน 240 ค่าที่เกี่ยวข้อง: Date/Time 200,00 202,50 205,00 2010.11.12 13:34:00 45,8214 43,8512 41,5369 2010.11.12 13:35:00 461,9364 454,2612 435,5222 นอกจากนี้แถวยังเชื่อมโยงกับ DataSites ด้วย ความคิดแรกของฉันคือการมีตารางดังนี้: DataID (pk), DataSiteID, ParameterID, Date, Value พร้อมดัชนีใน DataSite, Parameter และ Date พารามิเตอร์ ID อ้างถึงตารางอื่นที่เก็บส่วนหัวคอลัมน์อินพุต (200,00 202,50 205,00 ... ) ความคิดที่สองของฉันคือการมีโต๊ะที่มีคอลัมน์ทั้งหมด 240 …

4
การออกแบบที่ดีที่สุดในการอ้างอิงหลายตารางจากคอลัมน์เดียว?
สคีมาที่เสนอ ก่อนอื่นนี่คือตัวอย่างของสคีมาที่ฉันเสนอเพื่ออ้างอิงตลอดโพสต์ของฉัน: Clothes ---------- ClothesID (PK) INT NOT NULL Name VARCHAR(50) NOT NULL Color VARCHAR(50) NOT NULL Price DECIMAL(5,2) NOT NULL BrandID INT NOT NULL ... Brand_1 -------- ClothesID (FK/PK) int NOT NULL ViewingUrl VARCHAR(50) NOT NULL SomeOtherBrand1SpecificAttr VARCHAR(50) NOT NULL Brand_2 -------- ClothesID (FK/PK) int NOT NULL PhotoUrl VARCHAR(50) …

4
การออกแบบฐานข้อมูล: วิธีจัดการกับปัญหา "เก็บถาวร"?
ฉันค่อนข้างมั่นใจว่ามีแอปพลิเคชั่นมากมายแอปพลิเคชันที่สำคัญธนาคารและอื่น ๆ ทำสิ่งนี้เป็นประจำทุกวัน แนวคิดเบื้องหลังทั้งหมดคือ: แถวทั้งหมดต้องมีประวัติ ลิงก์ทั้งหมดจะต้องเชื่อมโยงกัน มันควรจะง่ายต่อการร้องขอเพื่อรับคอลัมน์ "ปัจจุบัน" ลูกค้าที่ซื้อสิ่งที่ล้าสมัยควรยังคงเห็นสิ่งที่พวกเขาซื้อแม้ว่าผลิตภัณฑ์นี้ไม่ได้เป็นส่วนหนึ่งของแคตตาล็อกอีกต่อไป และอื่น ๆ นี่คือสิ่งที่ฉันต้องการจะทำและฉันจะอธิบายปัญหาที่ฉันเผชิญ ตารางทั้งหมดของฉันจะมีคอลัมน์เหล่านี้: id id_origin date of creation start date of validity start end of validity และนี่คือแนวคิดสำหรับการดำเนินการ CRUD: สร้าง = แทรกแถวใหม่ด้วยid_origin= id, date of creation= ตอนนี้start date of validity= ตอนนี้end date of validity= null (= หมายความว่าเป็นระเบียนที่ใช้งานในปัจจุบัน) ปรับปรุง = read = …

2
ตาราง mysql ที่มีประสิทธิภาพ / การออกแบบดัชนีสำหรับ 35 ล้านแถว + ตารางโดยมี 200+ คอลัมน์ที่เกี่ยวข้อง (สองเท่า) การรวมกันใด ๆ ที่อาจมีการสอบถาม
ฉันกำลังมองหาคำแนะนำในการออกแบบตาราง / ดัชนีสำหรับสถานการณ์ต่อไปนี้: ฉันมีตารางขนาดใหญ่ (ข้อมูลประวัติราคาหุ้น InnoDB 35 ล้านแถวและเพิ่มขึ้น) ด้วยคีย์หลักผสม (assetid (int) วันที่ (วันที่) นอกเหนือจากข้อมูลการกำหนดราคาแล้วฉันมี 200 ค่าสองเท่าที่จำเป็นต้องสอดคล้องกับแต่ละระเบียน CREATE TABLE `mytable` ( `assetid` int(11) NOT NULL, `date` date NOT NULL, `close` double NOT NULL, `f1` double DEFAULT NULL, `f2` double DEFAULT NULL, `f3` double DEFAULT NULL, `f4` double DEFAULT NULL, ... skip …

4
SQL ออกแบบตารางขนาดใหญ่
ฉันมีคำถามทั่วไปเกี่ยวกับการออกแบบตาราง SQL Server 2008 ขณะนี้เรามีตารางที่มีมากกว่า 600GB และเติบโตที่ประมาณ 3GB ต่อวัน ตารางนี้มีตัวบ่งชี้ที่เหมาะสม แต่กำลังกลายเป็น hangup ที่สำคัญเมื่อเรียกใช้คิวรีและเนื่องจากขนาดของมัน คำถามคือฉันควรแบ่งตารางออกเป็นหลาย ๆ ตารางตามปีและเดือน (ซึ่งจะเหมาะสมกับแผนกอื่น ๆ ที่แยกชุดข้อมูลขนาดใหญ่ของพวกเขา) หรือเราควรใช้ประโยชน์จากการแบ่งพาร์ติชันที่สร้างไว้ใน SQL Server ดูเหมือนว่าการใช้การแบ่งพาร์ติชันจะต้องมีการเปลี่ยนแปลงรหัสน้อย จากสิ่งที่ฉันอ่านเมื่อทำการแบ่งพาร์ติชั่นคุณยังคงสืบค้นเฉพาะหนึ่งตารางและเซิร์ฟเวอร์จะจัดการวิธีรับข้อมูล หากเราไปหลายเส้นทางเราจะต้องจัดการกับการดึงข้อมูลจากหลายตาราง


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