Giá trị NULL
Nó cũng có nghĩa là mặt hàng sẽ có 5 id bao gồm cả id của nó. Tất cả điều này gây ra giá trị null (dường như là một không lớn, mà tôi có thể hiểu được) bởi vì nếu địa điểm và giá cả là tùy chọn và không được sử dụng trên một mục nhập của bảng mục, tôi sẽ có giá trị null ở đó
Cá nhân tôi nghĩ đây là một tình huống mà NULL
các giá trị là hoàn hảo và tôi chắc chắn sẽ không nghi ngờ gì về việc đưa điều này vào thiết kế cơ sở dữ liệu của mình.
Một cách tôi đã thấy những người khác đạt được điều tương tự mà không cần NULL
giá trị là tạo bản ghi trong các bảng tùy chọn (vị trí và giá trong ví dụ của bạn) với ID là 0 cho biết không có bản ghi liên quan - nhưng điều này chỉ khiến nhà phát triển ứng dụng phải làm việc nhiều hơn 10 lần để lọc các bản ghi này ra - việc tham gia sẽ dễ dàng hơn FAR và nếu bạn không lấy lại được bất kỳ bản ghi nào, thì không có bản ghi liên quan nào trong bảng tùy chọn.
Chỉ cần nhớ thực hiện LEFT
hoặc RIGHT OUTER
tham gia nếu bạn muốn trả lại Item
bất kể họ có Place
hay không hoặc Price
được liên kết (bạn sẽ nhận được NULL
giá trị trong các cột bảng tùy chọn cho Item
không có các bản ghi được liên kết) và một INNER
tham gia nếu bạn chỉ muốn Item
đó làm có một bản ghi tùy chọn được liên kết.
Phím tổng hợp
Khóa tổng hợp là một khóa trong bảng được tạo thành từ nhiều cột. Nếu mỗi người trong số Person
của bạn , Item
, Place
và Price
tất cả đều có ID (ngay cả khi đó chỉ là một số tự động tăng dần), bạn sẽ không cần khóa tổng hợp - chỉ cần một cột khóa chính trong mỗi bảng và một cột khóa ngoại trong Item
bảng cho mỗi bảng liên quan - ví dụ:item_id
, person_id
, place_id
, price_id
. Bạn nói rằng Item
có ID riêng, vì vậy bạn không cần khóa tổng hợp - chỉ cần khóa chính trên item_id
cột.