Ich habe Tabellen mit folgendem Layout anwenden:Wie eine eindeutige Einschränkung über mehrere Hierarchieebenen
- A
Project
können vieleEntity
Beziehungen haben. EineEntity
kann vieleDataPoint
Beziehungen haben.
Wie kann ich erzwingen, dass die Name
Spalte der Tabelle DataPoint
pro Projekt eindeutig sein muss?
Derzeit habe ich einen Fremdschlüssel in Entity
für das Projekt und einen anderen Fremdschlüssel in DataPoint
für die Entität. Ich dachte über das Hinzufügen der ProjectId als eine andere Fremdschlüsselspalte in der DataPoint
Tabelle, so dass ich eine eindeutige Integritätsbedingung mit DataPoint.ProjectId, DataPoint.Name
erstellen konnte, aber das würde ein neues Problem einführen, nicht in der Lage zu garantieren, dass DataPoint.EntityId tatsächlich ein Kind von DataPoint ist. Projekt-ID
Ich glaube nicht, dass Sie solche hierarchischen Einschränkungen in Ihrer Datenbank benötigen, und ich könnte argumentieren, dass die Notwendigkeit solcher Contraints eine schlechte Anwendungslogik impliziert. –
@TimBiegeleisen, ich wünschte du hättest deine Antwort nicht gelöscht. Es hat mich zum Nachdenken gebracht, konnte ich nicht einen zusammengesetzten Fremdschlüssel mit ProjectId und EntityId von 'DataPoint' zu 'Entity' haben? Das würde die eindeutige Integritätsbedingung erlauben und auch garantieren, dass das Projekt/Entity-Paar gültig ist, oder nicht? – adam0101
Das ist über meinen Kopf :-(... jemand anderes wird hoffentlich antworten. –