ฉันกำลังสร้างฐานข้อมูลสินค้าคงคลังที่เก็บฮาร์ดแวร์ไอทีเช่นคอมพิวเตอร์เดสก์ท็อปแล็ปท็อปสวิตช์เราเตอร์โทรศัพท์มือถือ ฯลฯ ฉันใช้รูปแบบ supertype / subtype ที่เก็บอุปกรณ์ทั้งหมดไว้ในตารางเดียวและข้อมูลเฉพาะ ใส่ลงในตารางย่อย กระอักกระอ่วนของฉันคือการเลือกระหว่างสองแบบต่อไปนี้:
ในแผนภาพด้านบนอุปกรณ์ทั้งหมดแบ่งปันชนิดย่อยทั่วไป ตัวอย่างเช่นคอมพิวเตอร์เดสก์ท็อปและแล็ปท็อปจะมีระเบียนในตารางต่อไปนี้: อุปกรณ์, NetworkDevice สวิตช์จะมีระเบียนเป็น: อุปกรณ์, NetworkDevice เราเตอร์จะมีระเบียนใน: อุปกรณ์, NetworkDevice, WANDevice อุปกรณ์ใด ๆ ที่เราติดตามตำแหน่งจะมีการบันทึกในตำแหน่ง ข้อดีและข้อเสียบางประการที่ฉันคิดไว้สำหรับการตั้งค่านี้:
- Pro: การเลือกระเบียนตามเขตข้อมูลทั่วไปเช่นชื่อโฮสต์หรือ LocationID นั้นง่ายกว่า
- Pro: ไม่มีช่องว่าง
- คอนดิชั่น: ตารางที่ควรรวมอยู่ในการดำเนินการ CRUD สำหรับอุปกรณ์เฉพาะนั้นไม่ชัดเจนและอาจสร้างความสับสนใน DBAs ในอนาคต
ในแผนภาพด้านล่างอุปกรณ์ทั้งหมดมีประเภทย่อยของตัวเอง (มีอุปกรณ์มากกว่าคลาสที่ไม่แสดงที่นี่) ในสถานการณ์เช่นนี้จะเห็นได้ชัดว่าระเบียนใดได้รับการแทรกหรือเลือกจากตาราง คอมพิวเตอร์เดสก์ท็อปและแล็ปท็อปไปที่คอมพิวเตอร์ ฯลฯ ข้อดีและข้อเสียบางประการที่ฉันคิดไว้สำหรับการตั้งค่านี้:
- Pro: เป็นที่ชัดเจนทันทีว่าตารางใดที่จะใช้สำหรับการดำเนินการ CRUD สำหรับชนิดย่อย
- Pro: ต้องใช้เพียงหนึ่งตารางสำหรับการดำเนินการ CRUD
- คอนดิชั่น: การเลือกเร็กคอร์ดที่อิงตามฟิลด์ย่อยทั่วไปจำเป็นต้องรวมตารางทั้งหมด, เช่นค้นหาตามชื่อโฮสต์, หรือ LocationID.
ในทั้งสองสถานการณ์ฟิลด์ ClassDiscriminator จะถูกวางในตารางย่อยสำหรับใช้กับข้อ จำกัด CHECK เพื่อควบคุมประเภทที่สามารถแทรกได้
มีคำแนะนำใด ๆ สำหรับการออกแบบที่ดีกว่าหรือเป็นเรื่องของความคิดเห็นอย่างสมบูรณ์และขึ้นอยู่กับจุดประสงค์ของฐานข้อมูล
แก้ไข: คำถามเฉพาะที่ฉันคำนึงถึงธรรมชาติที่ทับซ้อนกันของตาราง "NetworkDevice" ตารางนี้มีไว้เพื่อเก็บข้อมูลเครือข่ายสำหรับอุปกรณ์ใด ๆ ที่มีชื่อโฮสต์และ / หรือที่อยู่ IP ไม่ว่าจะเป็นคอมพิวเตอร์สวิตช์หรือเราเตอร์ ลักษณะที่ทับซ้อนกันของตารางนี้เป็นสิ่งที่อาจทำให้เกิดปัญหาหรือไม่หรือไม่ที่จะใช้มันในลักษณะนี้
ขอขอบคุณล่วงหน้าสำหรับข้อมูลที่ให้ไว้ โปรดถามว่าต้องการข้อมูลเพิ่มเติมใด ๆ