primarias - relacionar tablas en sql server por codigo
Agregar restricciones de claves externas con nombre en una declaración SQL Create (2)
En SQL Server, puede usar la palabra clave constraint
para definir claves foráneas en línea y nombrarlas al mismo tiempo.
Aquí está el script actualizado:
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
);
Acabo de hacer una prueba y aparentemente lo mismo también funciona en PostgreSQL: http://www.sqlfiddle.com/#!12/2ae29
Actualmente tengo:
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
);
Pero esto agrega restricciones con los nombres generados automáticamente que dificultan la eliminación posterior de la restricción. ¿Qué debo agregar para nombrar las restricciones?
El ejemplo anterior es mssql, también lo necesito en postgresql
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)
);
Use la palabra clave CONSTRAINT para especificar nombres de restricción. OMI es más limpio y más legible para hacer este final de TABLE en lugar de en línea (ambos son aceptables, como indica la segunda respuesta), y esto también le permite crear restricciones ÚNICAS en múltiples columnas, así como múltiples FK a la misma mesa La palabra clave CONSTRAINT no se puede usar para no nulo; un cambio a una restricción no nula requiere una ALTER TABLE MODIFY COLUMN ... null. Los nombres de restricciones deben ser menores o iguales a 30 caracteres. Use una convención de nomenclatura estándar. Personalmente, siempre utilizo el nombre de tabla antepuesto al nombre de la columna, que es devuelto si el nombre de la restricción tiene más de 30 caracteres, seguido del tipo de restricción (pk, fk, uk, etc.)