Kann es in einem DB Einschränkungen mit demselben Namen geben?
Dies ist eine Folge-Frage, als ich Sie gefragt hier.
Können Einschränkungen in der DB haben den gleichen Namen?
Sagen, ich habe:
CREATE TABLE Employer
(
EmployerCode VARCHAR(20) PRIMARY KEY,
Address VARCHAR(100) NULL
)
CREATE TABLE Employee
(
EmployeeID INT PRIMARY KEY,
EmployerCode VARCHAR(20) NOT NULL,
CONSTRAINT employer_code_fk FOREIGN KEY (EmployerCode) REFERENCES Employer
)
CREATE TABLE BankAccount
(
BankAccountID INT PRIMARY KEY,
EmployerCode VARCHAR(20) NOT NULL,
Amount MONEY NOT NULL,
CONSTRAINT employer_code_fk FOREIGN KEY (EmployerCode) REFERENCES Employer
)
Ist dies zulässig? Kommt es auf das DBMS (ich bin auf SQL Server 2005)? Wenn es ist nicht zulässig, hat jemand irgendwelche Vorschläge auf, wie man es umgehen?
InformationsquelleAutor der Frage Andrew | 2009-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, ein constraint ist eine Datenbank, die Objekt-als auch, und damit seinen Namen eindeutig sein muss.
Versuchen, indem z.B. der name der Tabelle, um Ihre Einschränkung, dass die Art und Weise es wird eindeutig sein.
Wir grundsätzlich verwenden "FK_"(untergeordnete-Tabelle)_(parent-Tabelle)" zu nennen, die Zwänge und sind ganz glücklich mit dieser Namensgebung.
Informationen aus dem MSDN
Dass constraint-Namen müssen einzigartig sein, um das schema (dh. zwei verschiedene schemas in der gleichen Datenbank können beide enthalten eine Einschränkung mit dem gleichen Namen) ist nicht explizit dokumentiert. Vielmehr müssen Sie davon ausgehen, die Bezeichner der Datenbank-Objekte müssen eindeutig sein innerhalb des enthaltenden schema sofern nicht anders angegeben. So wird der einschränkungsname definiert:
Vergleichen Sie dazu den Namen einer index:
explizit grenzt den Gültigkeitsbereich des Bezeichners.
InformationsquelleAutor der Antwort marc_s
Die anderen Antworten sind alle gut, aber ich dachte, ich würde hinzufügen, eine Antwort auf die Frage im Titel, d.h., "kann es Einschränkungen mit dem gleichen Namen in einer DB?"
Die Antwort für MS SQL Server ist ja – aber nur so lange, wie die Einschränkungen sind in verschiedenen schemas. Einschränkungsnamen müssen eindeutig in ein schema.
InformationsquelleAutor der Antwort Anthony Geoghegan
War ich immer verwundert warum Einschränkung müssen eindeutige Namen in der Datenbank, da Sie scheinen, wie Sie sind im Zusammenhang mit Tabellen.
Dann Las ich über SQL-99
ASSERTION
Einschränkung, die wie eine check-Einschränkung, aber besteht abgesehen von jeder einzelnen Tabelle. Die Bedingungen erklärt, die in eine Behauptung, die erfüllt sein müssen, konsequent wie jede andere Einschränkung, aber die Behauptung kann auf mehrere Tabellen.AFAIK keine SQL-Anbieter implementiert
ASSERTION
Einschränkungen. Aber dies hilft zu erklären, warum constraint-Namen sind Datenbank-wide in scope.InformationsquelleAutor der Antwort
Ja, anscheinend abhängig von der DBMS.
Anderen Antworten sagen, es ist nicht erlaubt, aber ich habe eine MS SQL CE ("Compact Edition") Datenbank, in der ich zufällig erfolgreich erstellt zwei FK-Constraints werden in zwei Tabellen mit dem gleichen contraint Namen.
InformationsquelleAutor der Antwort ChrisW
Guter Praxis ist das erstellen von index-und constraint-Namen angeben Tabelle Namen am Anfang.
Es gibt 2 Ansätze, mit index - /constraint-Typ, der am Anfang oder am Ende) zB.
oder
Foreign keys, sollten die Namen auch Namen der referenzierten Tabelle/Feld(s).
Gut Namenskonventionen zu geben Tabellennamen in form von FullName_3LetterUniqueAlias zB.
Diese geben Ihnen die Gelegenheit, zur "vordefinierten" - Aliase in Abfragen, die verbessert die Lesbarkeit und macht auch die Benennung von fremden Schlüsseln zu erleichtern, wie:
InformationsquelleAutor der Antwort Niikola
Es kommt auf das DBMS.
Beispielsweise auf PostgreSQLdie Antwort ist ja :
Quelle : https://www.postgresql.org/docs/current/static/sql-set-constraints.html
Ich habe gesehen, Fremdschlüssel-constraint-Namen, die gleich auf 2 verschiedenen Tabellen im gleichen schema.
InformationsquelleAutor der Antwort Guillaume Husta