L'ajout d'nommé les contraintes de clé étrangère 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 l'auto généré des noms qui font qu'il est difficile de supprimer la contrainte plus tard. De quoi ai-je besoin d'ajouter pour nom les contraintes?
L'exemple ci-dessus est mssql j'ai aussi besoin de postgresql
- voici le create table à partir de MSDN.
rowguid uniqueidentifier ROWGUIDCOL NOT NULL CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (newid())
Vous devez vous connecter pour publier un commentaire.
Dans SQL Server, vous pouvez utiliser le
constraint
mot clé pour définir les clés étrangères en ligne et nom en même temps.Voici le script de mise à jour:
Je viens de faire un test et apparemment la même chose travaille également dans PostgreSQL: http://www.sqlfiddle.com/#!12/2ae29
Utiliser la CONTRAINTE de mot-clé pour spécifier les noms de contrainte. IMO c'est plus propre et plus lisible pour faire de cette fin-de-TABLE plutôt qu'en ligne (les deux sont acceptables, comme la deuxième réponse indique), et cela permet également de créer des contraintes sur plusieurs colonnes, ainsi que de multiples FKs à la même table. La CONTRAINTE de mot clé ne peut pas être utilisé pour ne pas null; un changement à une contrainte not null nécessite un ALTER TABLE de MODIFIER la COLONNE ... nulle. Les noms de contrainte doit être inférieure ou égale à 30 caractères. Utiliser une convention de nommage. Personnellement j'utilise toujours le nom de la table de préfixer le nom de la colonne, qui est devoweled si le nom de la contrainte est de plus de 30 caractères, suivi par le type de contrainte (pk, fk, royaume-uni, etc.)