NULL-waarden
Het betekent ook dat het item 5 id's zal hebben, inclusief zijn eigen. Dit veroorzaakt allemaal null-waarden (blijkbaar een grote nee-nee, wat ik kan begrijpen) want als plaats en prijs optioneel zijn en niet worden gebruikt voor één item in de itemstabel, heb ik daar een null-waarde
Persoonlijk denk ik dat dit een situatie is waarin NULL
waarden zijn perfect, en ik zou zeker geen twijfel hebben om dit in mijn database-ontwerp te plaatsen.
Op één manier heb ik anderen hetzelfde zien bereiken zonder NULL
waarden is om een record te maken in de optionele tabellen (plaats en prijs in uw voorbeeld) met een ID van 0, wat betekent dat er geen gerelateerde record is - maar dit maakt de ontwikkelaar van de applicatie gewoon 10 keer meer werk om deze records eruit te filteren - het is VEEL eenvoudiger om een join te doen en als u geen records terugkrijgt, zijn er geen gerelateerde records in de optionele tabel.
Vergeet niet om een LEFT
te doen of RIGHT OUTER
doe mee als je Item
wilt retourneren s ongeacht of ze een Place
. hebben of Price
gekoppeld (u krijgt NULL
waarden in de optionele tabelkolommen voor Item
s die geen bijbehorende records hebben) en een INNER
doe mee als je alleen wil het Item
is dat doen een bijbehorend optioneel record hebben.
Samengestelde toetsen
Een samengestelde sleutel is een sleutel in een tabel die uit meer dan één kolom bestaat. Als elk van uw Person
, Item
, Place
en Price
hebben allemaal een ID (zelfs als het slechts een automatisch oplopend nummer is) je hebt geen samengestelde sleutel nodig - alleen een primaire sleutelkolom in elke tabel en een externe sleutelkolom in het Item
tabel voor elke gerelateerde tabel - bijv. item_id
, person_id
, place_id
, price_id
. U geeft aan dat Item
heeft zijn eigen ID, dus u zou geen samengestelde sleutel nodig moeten hebben - alleen een primaire sleutel op de item_id
kolom.