การออกแบบฐานข้อมูลสำหรับผลิตภัณฑ์ที่มีชุดผลิตภัณฑ์


14

ฉันกำลังสร้างระบบฐานข้อมูลสำหรับธุรกิจค้าปลีกของฉัน ฉันได้ตั้งค่าบางตารางซึ่ง:

  • สินค้า
  • ซื้อ
  • ขาย
  • สมดุล

ทั้งหมดเชื่อมต่อกันและสามารถแสดงระดับสินค้าคงคลังของฉัน

ปัญหาที่ฉันมีคือฉันยังขายชุดผลิตภัณฑ์ - ซึ่งมีราคาแตกต่างจากราคาของแต่ละผลิตภัณฑ์
ตัวอย่าง: ฉันขายส้มราคา $ 1, แอปเปิ้ลราคา $ 1.2; ฉันขายแพคเกจผลไม้ 1 (2 ส้มและ 2 แอปเปิ้ล) ในราคา 3.8 ดอลลาร์, แพ็คเกจ 2 (4 ส้มและ 4 แอปเปิ้ล) ในราคา 7 ดอลลาร์

มีวิธีที่ถูกต้องในการสร้างความสัมพันธ์สำหรับกลุ่มผลิตภัณฑ์เหล่านี้หรือไม่

PS: ฉันใช้ FileMaker Pro สร้างสิ่งนี้

คำตอบ:


16

รูปแบบที่คุณอธิบายมักเรียกว่า " ชิ้นส่วนระเบิด " หรือ "รายการวัสดุ " มันเป็นส่วนหนึ่งของกราฟและส่วนต้นไม้ในการศึกษาโครงสร้างข้อมูล สาระสำคัญของการแก้ปัญหาคือการตระหนักว่า "ผลิตภัณฑ์" ใด ๆ ที่สามารถสร้างขึ้นจาก "ผลิตภัณฑ์อื่น ๆ " การออกแบบนั้นเป็นโครงสร้างเครือข่ายที่มีProductตารางที่มีแถวสำหรับแต่ละผลิตภัณฑ์ - ไม่ว่าจะประกอบด้วยผลิตภัณฑ์อื่นหรือไม่และจากนั้นProduct Componentตารางที่มีแถวสำหรับแต่ละผลิตภัณฑ์ที่ประกอบด้วยผลิตภัณฑ์อื่น ๆ และ แต่ละผลิตภัณฑ์ที่เกี่ยวข้องซึ่งเป็นส่วนประกอบของผลิตภัณฑ์นั้น ในกรณีของคุณแต่ละผลิตภัณฑ์มีราคา คุณจะได้อะไรแบบนี้

Product
-----------------------------------
|Name             |Price          |
-----------------------------------
|Orange           |1             |
|Apple            |1.20          |
|Fruit Package    |3.80          |
-----------------------------------

Product Component
----------------------------------------------------------
|Product               |Contains                |Quantity|
----------------------------------------------------------
|Fruit Package         |Orange                  |2       |
|Fruit Package         |Apple                   |2       |
----------------------------------------------------------

การออกแบบนี้เหมาะสำหรับตารางเดี่ยวที่มีการเชื่อมโยงแบบเรียกซ้ำเนื่องจากเป็นการแยกประเภทเอนทิตีที่แท้จริงสองอย่างคือโหนดและลิงก์ ในกรณีของเราผลิตภัณฑ์เป็นโหนดและส่วนประกอบของผลิตภัณฑ์เป็นลิงก์

ในขณะที่การออกแบบเครือข่ายเป็นโครงสร้างที่พบบ่อยการสืบค้นมันมีปัญหาราวกับว่าเมื่อเติมเต็มมันเป็นโครงสร้างแบบเรียกซ้ำของความลึกที่แตกต่างกัน ความแข็งแกร่งของอุตสาหกรรม DBMS 'เช่น Oracle และ SQL Server มีองค์ประกอบภาษาพิเศษ (Oracle's CONNECT BY และ SQL Server ของ recursive CTE) เพื่อช่วยในการประกาศแบบสอบถาม ให้คุณใช้ File Maker Pro ซึ่งฉันรู้เพียงเล็กน้อยคุณอาจไม่มีโครงสร้างภาษาดังกล่าวเพื่อช่วยและอาจต้องเขียนโค้ดโพรซีเดอร์เพื่อสำรวจเครือข่าย ปัญหานี้สามารถคลี่คลายได้อย่างไรก็ตามหากเครือข่ายมีความลึกคงที่ - บอกว่าทุกผลิตภัณฑ์ไม่มีส่วนประกอบหรือส่วนประกอบหนึ่งระดับ นี่คือการอ้างอิงบางส่วนเกี่ยวกับโครงสร้างเครือข่ายในการออกแบบฐานข้อมูล:

  1. ปัญหาในทางปฏิบัติในการจัดการฐานข้อมูล - Fabian ปาสคาล บทที่ 7 ให้คำอธิบายที่ดีที่สุดและเข้าใจง่ายที่สุดที่ฉันพบ
  2. โจเซลโกของต้นไม้และลำดับชั้นใน SQL สำหรับ Smarties พิมพ์ครั้งที่สอง นี่คือหนังสือทั้งเล่มในหัวข้อเฉพาะสำหรับมาตรฐาน SQL
  3. รุ่น Enterprise รูปแบบ - เดวิดเฮย์ หนังสือเกี่ยวกับรูปแบบที่ใช้ร่วมกันกับทุกองค์กร (น่าเสียดายที่ ER Diagrams ถูกนำเสนอใน UML แต่สามารถเอาชนะได้) มีตัวอย่างของโครงสร้างเครือข่ายหลายอย่าง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.