una tablas tabla relacionar primarias por llaves llave foráneas foreign foranea externa ejemplo datos creada constraint compuesta como codigo clave agregar sql sql-server postgresql constraints create-table

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.)