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, ce qui rend difficile la suppression de la contrainte ultérieurement. Que dois-je ajouter pour nommer les contraintes?
L'exemple ci-dessus est mssql, j'en ai également besoin dans postgresql
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 également 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 non null; une modification d'une contrainte non nulle nécessite une ALTER TABLE MODIFY COLUMN ... null. Les noms de contrainte doivent être inférieurs ou égaux à 30 caractères. Utilisez une convention de dénomination standard. Personnellement, j'utilise toujours le nom de la table ajouté au nom de la colonne, qui est devoweled si le nom de la contrainte est supérieur à 30 caractères, suivi du type de contrainte (pk, fk, uk, etc.)