ถ้าฉันใช้ RDBMS (เช่น SQL Server) เพื่อเก็บข้อมูลการจัดหาเหตุการณ์สคีมาจะมีลักษณะอย่างไร
ฉันเคยเห็นรูปแบบบางอย่างที่พูดถึงในแง่นามธรรม แต่ไม่มีอะไรเป็นรูปธรรม
ตัวอย่างเช่นสมมติว่ามีเอนทิตี "ผลิตภัณฑ์" และการเปลี่ยนแปลงของผลิตภัณฑ์นั้นอาจอยู่ในรูปแบบของ: ราคาต้นทุนและคำอธิบาย ฉันสับสนว่าฉันจะ:
- มีตาราง "ProductEvent" ซึ่งมีช่องทั้งหมดสำหรับผลิตภัณฑ์โดยที่การเปลี่ยนแปลงแต่ละครั้งหมายถึงระเบียนใหม่ในตารางนั้นรวมทั้ง "ใครทำอะไรที่ไหนทำไมเมื่อใดและอย่างไร" (WWWWWH) ตามความเหมาะสม เมื่อต้นทุนราคาหรือคำอธิบายมีการเปลี่ยนแปลงแถวใหม่ทั้งหมดที่เพิ่มเพื่อแสดงถึงผลิตภัณฑ์
- จัดเก็บต้นทุนราคาและคำอธิบายของผลิตภัณฑ์ในตารางแยกกันที่เชื่อมต่อกับตารางผลิตภัณฑ์ด้วยความสัมพันธ์ของคีย์ต่างประเทศ เมื่อเกิดการเปลี่ยนแปลงคุณสมบัติเหล่านั้นให้เขียนแถวใหม่ด้วย WWWWWH ตามความเหมาะสม
- จัดเก็บ WWWWWH รวมทั้งอ็อบเจ็กต์ที่ทำให้เป็นอนุกรมซึ่งเป็นตัวแทนของเหตุการณ์ในตาราง "ProductEvent" ซึ่งหมายความว่าเหตุการณ์นั้นจะต้องถูกโหลดยกเลิกการต่ออนุกรมและเล่นซ้ำในรหัสแอปพลิเคชันของฉันเพื่อสร้างสถานะแอปพลิเคชันใหม่สำหรับผลิตภัณฑ์ที่กำหนด .
โดยเฉพาะอย่างยิ่งฉันกังวลเกี่ยวกับตัวเลือก 2 ข้างต้น ตารางผลิตภัณฑ์จะแทบจะเป็นตารางเดียวต่อคุณสมบัติโดยที่การโหลดสถานะแอปพลิเคชันสำหรับผลิตภัณฑ์ที่กำหนดจะต้องมีการโหลดเหตุการณ์ทั้งหมดสำหรับผลิตภัณฑ์นั้นจากตารางเหตุการณ์ของผลิตภัณฑ์แต่ละรายการ ระเบิดโต๊ะนี้มีกลิ่นผิดสำหรับฉัน
ฉันแน่ใจว่า "ขึ้นอยู่กับ" และแม้ว่าจะไม่มี "คำตอบที่ถูกต้อง" สักคำเดียว แต่ฉันก็พยายามทำความเข้าใจกับสิ่งที่ยอมรับได้และสิ่งใดที่ยอมรับไม่ได้โดยสิ้นเชิง ฉันทราบด้วยว่า NoSQL สามารถช่วยได้ที่นี่ซึ่งเหตุการณ์สามารถจัดเก็บไว้กับรูทรวมซึ่งหมายถึงการร้องขอเพียงครั้งเดียวไปยังฐานข้อมูลเพื่อรับเหตุการณ์เพื่อสร้างวัตถุขึ้นใหม่ แต่เราไม่ได้ใช้ฐานข้อมูล NoSQL ที่ ช่วงเวลาที่ฉันรู้สึกถึงทางเลือกอื่น