Tôi đang xây dựng cơ sở dữ liệu kiểm kê lưu trữ phần cứng CNTT, chẳng hạn như máy tính để bàn, máy tính xách tay, thiết bị chuyển mạch, bộ định tuyến, điện thoại di động, v.v. Tôi đang sử dụng mẫu supertype / subtype, trong đó tất cả các thiết bị được lưu trữ trong một bảng và thông tin cụ thể được đưa vào bảng phụ. Vấn đề nan giải của tôi là lựa chọn giữa hai thiết kế sau:
Trong sơ đồ hàng đầu, tất cả các thiết bị chia sẻ các kiểu con phổ biến. Ví dụ: máy tính để bàn và máy tính xách tay sẽ có các bản ghi trong các bảng sau: Thiết bị, NetworkDevice. Một chuyển đổi sẽ có hồ sơ trong: Thiết bị, NetworkDevice. Một bộ định tuyến sẽ có các bản ghi trong: Device, NetworkDevice, WANDevice. Bất kỳ thiết bị nào chúng tôi theo dõi vị trí sẽ có bản ghi trong Vị trí. Một số ưu và nhược điểm mà tôi nghĩ đến cho thiết lập này:
- Pro: CHỌN bản ghi dựa trên một trường chung, như Tên máy chủ hoặc LocationID dễ dàng hơn.
- Pro: Không có trường null.
- Con: Các bảng nên được bao gồm trong các hoạt động CRUD cho một thiết bị cụ thể là không rõ ràng và có thể gây nhầm lẫn cho các DBA trong tương lai.
Trong sơ đồ dưới cùng, tất cả các thiết bị đều có kiểu con riêng (Có nhiều lớp thiết bị không được hiển thị ở đây). Trong tình huống này, rõ ràng các bản ghi bảng được chèn vào hoặc được chọn từ đó. Máy tính để bàn và máy tính xách tay đi trong Máy tính, vv Một số ưu và nhược điểm mà tôi nghĩ đến cho thiết lập này:
- Pro: Rõ ràng ngay lập tức sử dụng bảng nào cho các hoạt động CRUD cho các kiểu con.
- Pro: Chỉ phải sử dụng một bảng cho các hoạt động CRUD.
- Con: CHỌN các bản ghi dựa trên các trường con phổ biến yêu cầu tất cả các bảng được kết hợp, ví dụ: tìm kiếm theo Tên máy chủ hoặc LocationID.
Trong cả hai trường hợp, trường ClassDiscriminator được đặt trong các bảng phụ để sử dụng với ràng buộc CHECK để kiểm soát loại nào có thể được chèn.
Có bất kỳ khuyến nghị cho thiết kế nào là tốt hơn, hoặc nó hoàn toàn là một vấn đề quan điểm và phụ thuộc vào mục đích dự định của cơ sở dữ liệu?
EDIT: Một câu hỏi cụ thể mà tôi có liên quan đến tính chất chồng chéo của bảng "NetworkDevice". Bảng này có nghĩa là chứa thông tin mạng cho bất kỳ thiết bị nào có tên máy chủ và / hoặc địa chỉ IP, cho dù đó là máy tính, bộ chuyển mạch hoặc bộ định tuyến. Là bản chất chồng chéo của bảng này một cái gì đó có thể gây ra vấn đề, hoặc có thể thực hiện nó theo cách này?
Cảm ơn bạn trước cho bất kỳ đầu vào được cung cấp. Xin hỏi nếu có thêm thông tin cần thiết.