ฉันถูกขอให้สร้างบางสิ่งบางอย่างซึ่งติดตามค่าใช้จ่ายรายวันเพื่อรวบรวมในบัญชีและฉันกำลังพยายามหาสคีมาตารางฐานข้อมูลที่จะสนับสนุนสิ่งนี้
นี่คือสิ่งที่ฉันรู้
- บริษัท มีบัญชีมากกว่า 2.5 ล้านบัญชี
- ในบรรดาเหล่านี้พวกเขาทำงานเฉลี่ย 200,000 ต่อเดือน (การเปลี่ยนแปลงที่มีระดับพนักงานซึ่งปัจจุบันอยู่ในระดับต่ำ)
- พวกเขามีประเภทค่าใช้จ่ายที่แตกต่างกัน 13 แบบที่พวกเขาต้องการติดตามและพวกเขาได้เตือนว่าพวกเขาอาจเพิ่มมากขึ้นในอนาคต
- พวกเขาต้องการค่าใช้จ่ายในการติดตามรายวัน
- ค่าใช้จ่ายจะไม่แยกระหว่างสินค้าคงคลังทั้งหมด พวกเขาจะแยกตาม # ของบัญชีที่ทำงานต่อเดือน (200,000) หรือผู้ใช้สามารถป้อนตัวระบุบัญชีเพื่อใช้ค่าใช้จ่ายกับกลุ่มบัญชีหรือพวกเขาสามารถระบุบัญชีที่จะใช้ค่าใช้จ่าย
ความคิดแรกของฉันคือฐานข้อมูลปกติ:
หมายเลขบัญชี วันที่ CostTypeId จำนวน
ปัญหาของฉันคือสิ่งนี้ทำคณิตศาสตร์ ตารางนี้จะใหญ่ขึ้นอย่างรวดเร็ว สมมติว่ามีการคิดค่าใช้จ่ายทั้งหมด 13 ประเภทสำหรับบัญชีที่ทำงานทั้งหมดสำหรับเดือนปัจจุบันนั่น200k * 13 * N days in month
คือที่ ๆ ประมาณ 75-80 ล้านระเบียนต่อเดือนหรือใกล้เคียงกับหนึ่งพันล้านรายการต่อปี
ความคิดที่สองของฉันคือการทำให้เป็นปกติเล็กน้อย
หมายเลขบัญชี วันที่ ค่าใช้จ่ายทั้งหมด CostType1 CostType2 CostType3 CostType4 CostType5 CostType6 CostType7 CostType8 CostType9 CostType10 CostType11 CostType12 CostType13
วิธีนี้มีความผิดปกติมากขึ้นและสามารถสร้างได้มากถึง 6 ล้านแผ่นต่อเดือน ( 200k * N days in month
) หรือประมาณ 72 ล้านต่อปี มันน้อยกว่าวิธีแรกมากอย่างไรก็ตามหาก บริษัท ตัดสินใจเลือกประเภทต้นทุนใหม่ในอนาคตจำเป็นต้องเพิ่มคอลัมน์ฐานข้อมูลอื่น
จากสองวิธีที่คุณชอบ ทำไม? มีทางเลือกอื่นที่คุณสามารถคิดได้ว่าจะจัดการกับสิ่งนี้ดีกว่าหรือไม่?
ฉันสนใจประสิทธิภาพการรายงานมากที่สุดทั้งรายงานในหน้าร้อนและรายละเอียด งานที่จะกระจายต้นทุนออกไปยังบัญชีจะทำงานทุกคืนเมื่อไม่มีงานทำ ข้อกังวลรองคือขนาดฐานข้อมูล ฐานข้อมูลที่มีอยู่เกือบ 300GB แล้วและฉันเชื่อว่าพื้นที่บนดิสก์ประมาณ 500GB
ฐานข้อมูลคือ SQL Server 2005