Đây là một nhận xét nhiều hơn, nhưng vì đây là một phản hồi dài đáng được đề cập, tôi sẽ đăng nó như một câu trả lời.
Cơ sở dữ liệu của bạn có vẻ đủ cho nhu cầu của bạn. (Vâng, là tốt nhất có thể giả định từ biểu đồ.) Tôi giả định rằng UserAccountbảng có mối quan hệ một-nhiều giữa bốn bảng Vehicle, Book, VideoGamevà Movie(từ đây trở đi, các bảng VBVM.) Tiếp theo, tôi giả định rằng Assetbảng có mối quan hệ một đối một với mỗi liên kết giữa các mục trong bảng VBVM. Với thông tin này, tôi khuyên bạn nên chuyển UserAccount_idtừ mỗi bảng VBVM sang AssetTable.
Tiếp theo, dường như Assetluôn được liên kết với một trong bốn bảng VBVM. Xem xét loại thiết lập này, tôi khuyên bạn nên tạo một bảng bổ sung-- AssetType.
+-----------+
| AssetType |
+-----------+
| id |
| typeDesc |
+-----------+
Tiếp theo, cập nhật Assetbảng và từng bảng VBVM để bao gồm một AssetType_IDtrường. các AssetTypebảng nên bao gồm một bài dự thi, đối với từng loại tài sản. Trong trường hợp này, Vehicle, Book, Video Gamevà Movie, mỗi với một mô tả độc đáo và ID.
Bạn có thể muốn làm điều này vì một vài lý do-- Trước tiên, bây giờ bạn có thể truy vấn Assetbảng và phân biệt loại tài sản nào được lưu trữ trong một bản ghi cụ thể mà không phải liên kết dữ liệu với bốn bảng VBVM khác của bạn. Điều này sẽ tăng tốc truy vấn dữ liệu của bạn, khi tất cả thông tin từ bốn bảng của bạn không cần thiết. Thứ hai, điều này cũng cung cấp một phương tiện dễ dàng liên kết trong một mô tả văn bản về loại tài sản được liên kết với Assetmục nhập. Một lần nữa, không cần phải liên kết với các bảng VBVM để tìm ra điều đó.
Cuối cùng, bạn có thể muốn xem xét xử lý dữ liệu mã vạch khác nhau. Nếu mã vạch là một tra cứu đơn giản, bạn có thể thêm nó vào bảng nội dung. Tuy nhiên, nếu các giá trị mã vạch phải là duy nhất, việc giữ nó trong một bảng phụ là cần thiết bởi vì bạn phải đặt một ràng buộc trên cơ sở dữ liệu. Bạn có thể làm điều này nếu nó được tích hợp trong Assetbảng, tuy nhiên, dữ liệu xe của bạn sẽ gây ra vấn đề vì xe không có mã vạch. Theo hiểu biết của tôi, nếu không phải tất cả, các công cụ cơ sở dữ liệu chính sẽ không cho phép bạn xác định một trường duy nhất, điều đó cũng cho phép nullcác giá trị bởi vì, sau đó, dữ liệu không còn là duy nhất.
Bạn có thể có xu hướng nghĩ rằng bạn có thể kết hợp Barcodetrường với VIN. Vì số VIN là duy nhất và Mã vạch là duy nhất và không giống nhau, tại sao chúng không thể được kết hợp thành một trường trên Assetbảng, cho phép bạn bỏ Barcodebảng bổ sung . Tôi không khuyến nghị điều này bởi vì tôi nghĩ rằng nó mang lại cho dữ liệu ít "trọng tâm" hơn.
Đúng, nó là một dạng ID đối tượng duy nhất nhưng mã vạch là mã vạch và số VIN là số VIN-- khái niệm đằng sau cả hai hoàn toàn khác nhau và hợp nhất cả hai có thể trở nên khó hiểu với thời gian. Hơn nữa, nếu bạn mở rộng dự án của mình trong tương lai, nó có thể gây ra va chạm. Về mặt kỹ thuật, tôi không thấy vấn đề lớn với điều đó (trong trường hợp của bạn) nhưng tôi vẫn khuyên bạn nên tránh lựa chọn đó.
Ngoài ra, tôi cũng sẽ thêm assetType_idvào Barcodebảng, vì những lý do tương tự như bạn thêm nó vào Assetbảng.
messylà thực sựnormalizationlà một điều tốt.