私は現在持っています:
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
);
ただし、これにより、自動生成された名前の制約が追加され、後で制約を削除することが難しくなります。制約に名前を付けるには、何を追加する必要がありますか?
上記の例はmssqlですが、postgresqlでも必要です
SQL Serverでは、constraint
キーワードを使用して、外部キーをインラインで定義し、同時に名前を付けることができます。
更新されたスクリプトは次のとおりです。
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
);
私はちょうどテストを行いましたが、明らかに同じことは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)
);
CONSTRAINTキーワードを使用して、制約名を指定します。 IMOインラインではなく、このテーブルの終わりを実行する方がクリーンで読みやすく(2番目の答えが示すように、両方とも受け入れられます)、これにより、複数の列と複数のFKにUNIQUE制約を作成することもできます同じテーブルに。 CONSTRAINTキーワードは、非ヌルには使用できません。非NULL制約を変更するには、ALTER TABLE MODIFY COLUMN ... nullが必要です。制約名は30文字以下でなければなりません。標準の命名規則を使用します。個人的には常に、列名の前に付けられたテーブル名を使用します。これは、制約名が30文字を超える場合にデボウエルされ、その後に制約タイプ(pk、fk、ukなど)が続きます。