Rum*_*ser 44 sql sql-server postgresql constraints create-table
我目前有:
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
);
Run Code Online (Sandbox Code Playgroud)
但是这会增加自动生成名称的约束,这使得以后很难删除约束.为了命名约束,我需要添加什么?
上面的例子是mssql我也需要它在postgresql中
Cri*_*scu 74
在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
);
Run Code Online (Sandbox Code Playgroud)
我只是做了一个测试,显然同样的东西也适用于PostgreSQL:http://www.sqlfiddle.com/#!12/ 2ae29
Mat*_*sen 37
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)
);
Run Code Online (Sandbox Code Playgroud)
使用CONSTRAINT关键字指定约束名称.IMO它更清晰,更易读,可以做到这个结束而不是内联(两者都可以接受,如第二个答案所示),这也允许你在多个列上创建UNIQUE约束,以及多个FK到同一张桌子.CONSTRAINT关键字不能用于非null; 更改为非空约束需要ALTER TABLE MODIFY COLUMN ... null.约束名称必须小于或等于30个字符.使用标准命名约定.我个人总是使用前面列名的表名,如果约束名超过30个字符,则后面是约束类型(pk,fk,uk等).
| 归档时间: |
|
| 查看次数: |
33727 次 |
| 最近记录: |