Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Peut-il y avoir des contraintes portant le même nom dans une BD ?

Non - une contrainte est également un objet de base de données et son nom doit donc être unique.

Essayez d'ajouter par ex. le nom de la table à votre contrainte, ainsi elle sera unique.

CREATE TABLE BankAccount
(
    BankAccountID   INT            PRIMARY KEY,
    EmployerCode    VARCHAR(20)    NOT NULL,
    Amount          MONEY          NOT NULL,
    CONSTRAINT FK_BankAccount_Employer 
        FOREIGN KEY (EmployerCode) REFERENCES Employer
)

Nous utilisons essentiellement "FK_"(table enfant)_(table parent)" pour nommer les contraintes et sommes assez satisfaits de cette convention de nommage.

Informations de MSDN

Le fait que les noms de contraintes doivent être uniques au schéma (c'est-à-dire que deux schémas différents dans la même base de données peuvent tous deux contenir une contrainte avec le même nom) n'est pas explicitement documenté. Vous devez plutôt supposer que les identifiants des objets de base de données doivent être uniques dans le schéma conteneur sauf indication contraire . Ainsi, le nom de la contrainte est défini comme :

Comparez cela au nom d'un index :

qui restreint explicitement la portée de l'identifiant.