-
Nếu các mô hình không chia sẻ các nhóm màu thì thiết kế sẽ là một bảng:
model [model] comes in color [color]
-
Nếu các mô hình chia sẻ các nhóm màu thì có hai bảng:
model [model] comes in the colors of group [group] group [group] has color [color]
Các bảng này kết hợp với phép chiếu tới bảng đầu tiên:
SELECT model, color FROM model_group NATURAL JOIN group_color
-
Nếu một mô hình có thể có các màu đặc biệt có sẵn và / hoặc không có sẵn ngoài hoặc thay vì một nhóm thì hãy có các bảng ngoại lệ. Nhóm của bảng hiện là mặc định của nó màu sắc (nếu có):
model [model] has default color group [group] group [group] has color [color] model [model] is exceptionally available in color [color] model [model] is exceptionally unavailable in color [color]
Các bảng ngoại lệ sau đó tương ứng được UNIONed với và MINUSed / EXCEPTed khỏi JOIN-plus-PROJECT / SELECT để đưa ra bảng đầu tiên:
SELECT group, color FROM model_default NATURAL JOIN group_colour EXCEPT SELECT * FROM model_unavailable UNION SELECT * FROM model_available
"Dự phòng" không phải là về các giá trị xuất hiện ở nhiều nơi. Nó là về nhiều hàng nêu cùng một điều về ứng dụng.
Mọi bảng (và biểu thức truy vấn) đều có mẫu câu lệnh điền vào chỗ trống (được đặt tên-) được liên kết (hay còn gọi là vị từ). Các hàng tạo một câu lệnh true sẽ có trong bảng. Nếu bạn có hai vị từ độc lập thì bạn cần hai bảng. Các giá trị có liên quan nằm trong các hàng của mỗi giá trị.
Re hàng đưa ra tuyên bố về ứng dụng sẽ thấy điều này. (Và tìm kiếm các câu trả lời khác của tôi là "câu lệnh" hoặc "tiêu chí" của bảng.) Chuẩn hóa hữu ích vì nó thay thế các bảng có các hàng trạng thái các thứ có dạng "... VÀ ..." bằng các bảng khác có "... " riêng biệt. Xem cái này và cái này.
Nếu bạn chia sẻ các nhóm và chỉ sử dụng một bảng hai cột cho mô hình và màu sắc thì vị từ của nó là:
FOR SOME group
model [model] comes in the colors of group [group]
AND group [group] has color [color]
Vì vậy, gạch đầu dòng thứ hai loại bỏ một "AND" khỏi vị từ này, tức là nguồn của "phụ thuộc nhiều giá trị". Ngược lại, nếu bạn thay đổi nhóm của mô hình hoặc màu của một nhóm thì bạn phải thay đổi đồng thời nhiều hàng một cách nhất quán. (Mục đích là giảm lỗi và độ phức tạp do dư thừa chứ không phải tiết kiệm dung lượng.)
Nếu bạn không muốn lặp lại các chuỗi vì lý do triển khai (-phụ thuộc) (chiếm không gian hoặc tốc độ hoạt động với chi phí của nhiều phép nối hơn), sau đó thêm một bảng id tên và chuỗi và thay thế các cột và giá trị tên cũ của bạn bằng các cột và giá trị id. (Đó không phải là chuẩn hóa, điều đó làm phức tạp giản đồ của bạn vì lợi ích của việc cân bằng tối ưu hóa dữ liệu phụ thuộc vào việc triển khai. Và bạn nên chứng minh điều này là cần thiết và hoạt động.)