Je denkt te veel na over het verband tussen optionaliteit en identiteit. Totdat het geheel natuurlijker voor je wordt, kun je ze het beste beschouwen als volledig los van elkaar .
Wat betreft optionaliteit is het belangrijk om te onthouden dat de optionaliteit richtinggevend is. Om uw voorbeeld van employee_equipment
te gebruiken :Tuurlijk, werknemers hebben geen apparatuur nodig. De een-op-veel-relatie van employee
naar employee_equipment
is optioneel. Tegelijkertijd, vanuit het tegenovergestelde perspectief bekeken, is de relatie verplicht. U kunt geen record hebben in employee_equipment
tenzij er een employee
. is om het mee te associëren.
Identiteit heeft niets te maken met optionaliteit, behalve toevallig een identificerende relatie is verplicht van het kind tot de ouder. Of het ook verplicht is van de ouder aan het kind is noch hier noch daar wat betreft identiteit.
Wat een relatie identificerend maakt, is dat je moet weten over welke ouder je het hebt (en nog wat andere dingen) om te weten over welk kind je het hebt. Dat wil zeggen dat de primaire sleutel van het kind een externe sleutel naar de ouder moet bevatten.
Pure intersectietabellen (bijv. employee_equipment
) zijn daar goede voorbeelden van. De primaire sleutel van een zuivere intersectie is de combinatie van de refererende sleutels naar beide bovenliggende tabellen. Merk op dat sommige mensen ook een surrogaatsleutel aan dit soort tabellen kunnen toevoegen. Vanuit identiteitsperspectief maakt het niet zoveel uit of er meerdere kandidaatsleutels zijn. Wat belangrijk is bij het bepalen van de identiteit is of de refererende sleutel deel uitmaakt van een kandidaatsleutel, of die kandidaatsleutel al dan niet de primaire sleutel is.
Een ander goed voorbeeld is zoiets als de metadatacatalogus van een database, waar een kolom wordt geïdentificeerd door de tabel waartoe hij behoort, net zoals de tabel wordt geïdentificeerd door het schema waarin hij zich bevindt, enzovoort. Weten dat een kolom NAME
heet geeft niet aan welke kolom het is. Wetende dat het de NAME
. is kolom in de CUSTOMER
tafel helpt. (Je moet ook weten welk schema CUSTOMER
is in, enzovoort).