Ajout de contraintes de clé étrangère nommées dans une instruction SQL Create
J'ai actuellement:
CREATE TABLE galleries_gallery (
id INT NOT NULL PRIMARY KEY IDENTITY,
title NVARCHAR(50) UNIQUE NOT NULL,
description VARCHAR(256),
templateID INT NOT NULL REFERENCES galleries_templates(id),
jsAltImgID INT NOT NULL REFERENCES libraryImage(id)
jsAltText NVARCHAR(500),
dateCreated SMALLDATETIME NOT NULL,
dateUpdated SMALLDATETIME NOT NULL,
lastUpdatedBy INT,
deleted BIT NOT NULL DEFAULT 0
);
Mais cela ajoute des contraintes avec des noms générés automatiquement qui rendent difficile la suppression de la contrainte plus tard. Que dois-je ajouter pour nommer les contraintes?
L'exemple ci-dessus est mssql j'en ai aussi besoin dans postgresql
2 réponses
Dans SQL Server, vous pouvez utiliser le mot clé constraint
pour définir des clés étrangères en ligne et les nommer en même temps.
Voici le script mis à jour:
CREATE TABLE galleries_gallery (
id INT NOT NULL PRIMARY KEY IDENTITY,
title NVARCHAR(50) UNIQUE NOT NULL,
description VARCHAR(256),
templateID INT NOT NULL
CONSTRAINT FK_galerry_template
REFERENCES galleries_templates(id),
jsAltImgID INT NOT NULL
CONSTRAINT FK_gallery_jsAltImg
REFERENCES libraryImage(id)
jsAltText NVARCHAR(500),
dateCreated SMALLDATETIME NOT NULL,
dateUpdated SMALLDATETIME NOT NULL,
lastUpdatedBy INT,
deleted BIT NOT NULL DEFAULT 0
);
Je viens de faire un test et apparemment la même chose fonctionne aussi dans PostgreSQL: http://www.sqlfiddle.com/#! 12 / 2ae29
CREATE TABLE galleries_gallery (
id INT NOT NULL,
title NVARCHAR(50) NOT NULL,
description VARCHAR(256),
templateID INT NOT NULL,
jsAltImgID INT NOT NULL,
jsAltText NVARCHAR(500),
dateCreated SMALLDATETIME NOT NULL,
dateUpdated SMALLDATETIME NOT NULL,
lastUpdatedBy INT,
deleted BIT NOT NULL DEFAULT 0,
CONSTRAINT galleries_gallery_id_pk PRIMARY KEY (id),
CONSTRAINT galleries_gallery_title_uk UNIQUE (title),
CONSTRAINT galleries_gallery_tmpltid_fk FOREIGN KEY (templateID) REFERENCES galleries_templates (id),
CONSTRAINT galleries_gallery_jsAltImgIDfk FOREIGN KEY (isAltImgID) REFERENCES libraryImage (id)
);
Utilisez le mot clé CONSTRAINT pour spécifier les noms des contraintes. IMO il est plus propre et plus lisible de faire cette fin de TABLE plutôt qu'en ligne (les deux sont acceptables, comme l'indique la deuxième réponse), et cela vous permet également de créer des contraintes uniques sur plusieurs colonnes, ainsi que plusieurs FK à la même table. Le mot-clé CONSTRAINT ne peut pas être utilisé pour not null; une modification d'une contrainte not null nécessite une colonne ALTER TABLE MODIFY ... NULL. Les noms de contraintes doivent être inférieurs à ou égal à 30 caractères. Utiliser une convention de nommage. Personnellement, j'utilise toujours le nom de la table ajouté au nom de la colonne, qui est dévoué si le nom de la contrainte est supérieur à 30 caractères, suivi du type de contrainte (pk, fk,uk, etc.)