Bạn đang triển khai Thực thể-Thuộc tính-Giá trị phản vật chất. Đây không thể là một thiết kế cơ sở dữ liệu chuẩn hóa, vì nó không quan hệ.
Thay vào đó, điều tôi sẽ đề xuất là Kế thừa Bảng Lớp mẫu thiết kế:
- Tạo một bảng cho Sinh vật, chứa các thuộc tính chung cho tất cả các loài.
-
Tạo một bảng cho mỗi loài, chứa các thuộc tính đặc trưng cho loài đó. Mỗi bảng này có mối quan hệ 1-1 với Sinh vật, nhưng mỗi thuộc tính thuộc về cột riêng của nó.
____________________ ____________________ | Organisms | | Species | |--------------------| |--------------------| |OrganismId (int, PK)| |SpeciesId (int, PK) | |SpeciesId (int, FK) |∞---------1|Name (varchar) | |Name (varchar) | |____________________| |____________________| 1 | | 1 ______________________ | HumanOrganism | |----------------------| |OrganismId (int, FK) | |Sex (enum) | |Race (int, FK) | |EyeColor (int, FK) | |.... | |______________________|
Điều này có nghĩa là bạn sẽ tạo nhiều bảng, nhưng hãy coi đây là sự đánh đổi với nhiều lợi ích thiết thực để lưu trữ các thuộc tính theo cách đúng đắn về mặt quan hệ:
- Bạn có thể sử dụng các kiểu dữ liệu SQL một cách thích hợp, thay vì coi mọi thứ là một varchar dạng tự do.
- Bạn có thể sử dụng các ràng buộc hoặc bảng tra cứu để hạn chế các thuộc tính nhất định bằng một bộ giá trị được xác định trước.
- Bạn có thể đặt thuộc tính bắt buộc (tức là KHÔNG ĐẦY ĐỦ) hoặc sử dụng các ràng buộc khác.
- Dữ liệu và chỉ mục được lưu trữ hiệu quả hơn.
- Các truy vấn dễ viết hơn cho bạn và dễ dàng hơn để RDBMS thực thi.
Để biết thêm về thiết kế này, hãy xem cuốn sách của Martin Fowler Các mẫu kiến trúc ứng dụng doanh nghiệp hoặc bản trình bày của tôi Mô hình hướng đối tượng thực tế trong SQL hoặc sách của tôi, Phản nguyên lý SQL:Tránh cạm bẫy của lập trình cơ sở dữ liệu .