การออกแบบฐานข้อมูล SQL Server 2008

ความเป็นมา: ใน SQL Server ตารางฐานข้อมูลของฉันมีเพียงสามคอลัมน์เท่านั้น:

  • DataID (PK, bigint)
  • ProductName (Nchar20)
  • Price (float)

ทุกวันมันจะแทรกข้อมูลประมาณ 5,000+ แถวลงในตารางนี้โดยอัตโนมัติ ต่อมาในตารางนี้อาจเพิ่มคอลัมน์เพิ่มเติมเช่น AdjustedPrice (float), Discount (float)...

คำถาม: ฉันรู้ว่าฉันควรจะทำให้ ProductName เป็น FK ไปยังอีกตารางหนึ่ง (ProductNameTable ด้วย ProductID (PK,int) และ ProductName (Nchar) แต่แล้ว price (float) ล่ะ? ราคาขึ้นอยู่กับว่าสามารถอยู่ในช่วง 100 - 1,000 ฉันควรทำให้ FK เป็น FK ไปอีกโต๊ะหนึ่งหรือปล่อยทิ้งไว้ อยู่คนเดียวในโต๊ะเหรอ?

มีคำแนะนำจาก DBA หรือไม่? ขอบคุณมากครับ.....


person Username Not Exist    schedule 21.05.2014    source แหล่งที่มา
comment
หมายเหตุด้านข้าง: โปรดอย่าใช้ nchar(n) - สตริงเหล่านี้เป็นสตริง ความยาวคงที่ ซึ่งจะ เสมอ ใช้ความยาวที่กำหนดไว้ (คูณสอง) ของช่องว่าง (มีช่องว่างเสริม) . ใช้ nvarchar(n) (ความยาวผันแปร) แทน! นอกจากนี้: สำหรับราคานี้ ฉันจะไม่ใช้ float - สิ่งนี้ไม่ถูกต้องโดยธรรมชาติและมีแนวโน้มที่จะเกิดข้อผิดพลาดในการปัดเศษ - ใช้ decimal(p,s) แทน!   -  person marc_s    schedule 21.05.2014
comment
อย่าใช้ float กับสิ่งที่คุณอาจคำนวณ ราคาสามารถระบุวันที่โดยเฉพาะได้ ดังนั้นคุณอาจต้องพิจารณาวันที่เริ่มต้นและวันที่สิ้นสุดของราคา หากคุณไม่ทำเช่นนั้น อย่าลืมเก็บราคา ณ เวลาที่สั่งซื้อ (หรือซื้อขึ้นอยู่กับสิ่งที่คุณกำลังทำ) ไว้ในตารางคำสั่งซื้อ คุณต้องอ่านข้อมูลเล็กน้อยเกี่ยวกับวิธีจัดการข้อมูลชั่วคราวสำหรับการออกแบบนี้ ไม่เช่นนั้นคุณจะประสบปัญหาความสมบูรณ์ของข้อมูลในเร็วๆ นี้ แนะนำให้คุณดูหนังสือเช่น: amazon.com/Managing-Time -ฐานข้อมูลเชิงสัมพันธ์-ชั่วคราว/dp/   -  person HLGEM    schedule 21.05.2014
comment
ขอบคุณ @HLGEM ฉันอ่านเจอว่า DB ไม่ควรเก็บคอลัมน์สถิติ เช่น MeanOfPrice, SumOfPrice แต่ทำไม ความสมบูรณ์หรือขีดจำกัดขนาด?   -  person Username Not Exist    schedule 22.05.2014


คำตอบ (1)


ใช่. ไม่ ราคาเป็นองค์ประกอบอะตอม แต่คำแนะนำของฉันคือรับสำเนา Data Model Ressoure Book เล่มที่ 1 ซึ่งกล่าวถึงแผนผังฐานข้อมูลสำหรับกลไกการกำหนดราคา การอ่านที่ดี

person TomTom    schedule 21.05.2014
comment
ขอบคุณ ถ้าฉันต้องการเพิ่มคอลัมน์สถิติ เช่น MeanOfPrice(DECIMAL), SumOfPrice(DECIMAL) ล่ะ ทำไมจะไม่ล่ะ? ขอบคุณอีกครั้ง - person Username Not Exist; 22.05.2014