Bạn đã viết trong một bình luận ở trên:
cuốn sách "Nguyên tắc cơ bản của hệ thống cơ sở dữ liệu" [...] nói rằng [...] rằng nên sử dụng bảng giao nhau nếu có nhiều giá trị NULL trong cột khóa ngoài (ví dụ: nếu 98% nhân viên không quản lý một bộ phận)
Khi có nhiều giá trị NULL trong cột khóa ngoài, các chương trình của bạn sẽ phải xử lý cột này hầu như trống cho mỗi và mọi bản ghi mà chúng xử lý. Cột có thể sẽ chiếm một số dung lượng đĩa mặc dù trong 98% trường hợp trống, truy vấn mối quan hệ có nghĩa là truy vấn cột đó cung cấp cho bạn nhiều lưu lượng mạng hơn và nếu bạn đang sử dụng ORM tạo ra các lớp từ các bảng của bạn, các chương trình của bạn cũng sẽ cần nhiều không gian hơn ở phía khách hàng hơn mức cần thiết. Sử dụng bảng giao cắt để tránh điều này, sẽ chỉ có các bản ghi liên kết cần thiết trong trường hợp khóa ngoại tương đương sẽ không phải là NULL.
Đối lập với điều đó, nếu bạn không chỉ có một vài giá trị NULL, giả sử 50% hoặc nhiều mối quan hệ không phải là NULL, sử dụng bảng giao nhau mang lại cho bạn hiệu ứng ngược lại - nhiều không gian đĩa hơn, độ phức tạp cao hơn dẫn đến lưu lượng mạng nhiều hơn, v.v.
Vì vậy, sử dụng bảng giao cắt chỉ là một hình thức tối ưu hóa, chỉ hợp lý cho một trường hợp cụ thể và đặc biệt là ngày nay, nơi không gian đĩa và bộ nhớ trở nên rẻ hơn, ít cần thiết hơn. Lưu ý rằng "Nguyên tắc cơ bản của hệ thống cơ sở dữ liệu" ban đầu được viết cách đây hơn 20 năm (tôi đã tìm thấy một tài liệu tham khảo cho phiên bản thứ hai từ năm 1994), và tôi đoán rằng khuyến nghị đã có ở đó vào thời điểm đó. Trước năm 1994, tối ưu hóa không gian có lẽ quan trọng hơn nhiều so với ngày nay, vì lưu trữ lớn vẫn còn đắt hơn và máy tính và mạng chậm hơn nhiều so với ngày nay.
Như một lưu ý phụ cho một nhận xét kén chọn: tuyên bố trên chỉ là cố gắng dự đoán những gì tác giả của "Nguyên tắc cơ bản của hệ thống cơ sở dữ liệu" đã nghĩ đến với khuyến nghị của mình, tôi đoán rằng ông đã đưa ra một tuyên bố chung chung, hợp lệ cho hầu hết các hệ thống. Trong một số cơ sở dữ liệu có các tối ưu hóa có thể khác như "các cột thưa thớt" khiến việc sử dụng bảng giao cắt trở nên lỗi thời hơn.
Vì vậy, đừng hiểu sai về đề xuất đó. Cuốn sách không cho bạn biết các bảng giao nhau cho các {0,1}:n
mối quan hệ nói chung, hoặc - như bạn đã viết - rằng đây là "cách chính xác". Sử dụng tối ưu hóa như thế này sẽ làm cho chương trình của bạn phức tạp hơn chỉ khi bạn thực sự cần chúng.