Constraints

Constraints,约束的意思。通常用来约束加入表中的数据,如果与约束冲突,则行为会被终止。

通常情况下,Constraints会与CREATE TABLE或ALTER TABLE搭配使用。

Constraints在数据仓库中一直都是一个很重要的概念,是用来管理如何插入或处理数据库数据的规则。

要知道,对于数据库而言,最重要的是数据库数据的规范化和标准化,这将决定了当前数据的延展性和复用性。

CREATE TABLE:创建表语句。

ALTER TABLE:更新表语句。

Constraints数据仓库中经常使用的有以下几种约束:

  • NOT NULL(不为空)
  • UNIQUE(唯一)
  • PRIMARY KEY(主键)
  • FOREIGN KEY(外键)
  • CHECK(检查)
  • DEFAULT(默认值)

接下来我们来了解一下不同约束的使用场景。

A.NOT NULL

NOT NULL会约束列不接受空值,因此当插入数据或者更新数据的时候,如果列的约束为NOT NULL,那么插入和更新行为将会被终止。

语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL,
列名称 数据类型 NOT NULL,
......
)

使用实例

CREATE TABLE WHITETEST (TEST INT NOT NULL, ID INT)

我们通过上述语句创建了名为WHITETEST的表,并向TEST添加约束为不为空。

我们现在要对WHITETEST表进行数据更新。

INSERT INTO WHITETEST (TEST , ID) VALUES ( NULL , 13)

在数据仓库中我们执行上述语句,会返回如下结果:

因为列限制了TEST不为空,因此数据无法更新。

我们插入其他数据看看。

INSERT INTO WHITETEST (TEST , ID) VALUES ( 16 , 13)

结果如下:

我们可以清楚的看到,数据插入成功。

B.UNIQUE与PRIMARY KEY

UNIQUE会约束列的数据作为唯一标识而存在。

PRIMARY KEY作为表的主键而存在。

注意

  • UNIQUE与PRIMARY KEY区别是很大的。
  • PRIMARY KEY会自带UNIQUE的属性。
  • 表中可以有多个列为UNIQUE的约束,但是只能有一个PRIMARY KEY。

换句话理解就是维度的主键(唯一标识)可以有多个列,但是作为表的主键只能有一个。

  • PRIMARY KEY任意两行的主键值都不能相同
  • 每行都需要有一个PRIMARY KEY
  • PRIMARY KEY的列从不修改更新
  • PRIMARY KEY不允许重用,主键值被删除的情况下也不可以给新行使用
  • UNIQUE可以包含NULL值
  • UNIQUE可修改更新
  • UNIQUE可重复使用

例如:

我们有一张订单表,其中存在订单ID,那么此时订单ID可以使用UNIQUE进行约束,来保证订单ID不重复。但是我们需要一个额外的主键来标记当前表中的每一行记录。以方便其他表引用此表中的数据。

注:订单ID也可以作为主键,但是有可能信息过长,而且有可能产生信息被利用的情况。

语法 UNIQUE语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL UNIQUE,
列名称 数据类型 NOT NULL,
CONSTRAINT uc_约束名 UNIQUE (列名称,列名称...)//多个列定义约束
......
)

PRIMARY KEY语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL PRIMARY KEY,
列名称 数据类型 NOT NULL,
CONSTRAINT pk_约束名 PRIMARY KEY (列名称,列名称...)//多个列定义约束
......
)

C.FOREIGN KEY

一个表中的外键,通常可以用来连接另外一张表中的主键。

举个例子:

我们有一张Fact表和一张Product表,两张表通过ProductID进行关联。

那么Product表中的ProductID就是主键,Fact表中的ProductID就是外键。

同时,外键的存在,可以防止意外删除。这对于数据仓库来说,很重要。

语法

CREATE TABLE 表名称
(
列名称 数据类型 FOREIGN KEY REFERENCES 表名称(主键ID),
列名称 数据类型 NOT NULL,
CONSTRAINT fk_约束名 FOREIGN KEY (外键)
REFERENCES 表名称(主键)//多个列定义约束
......
)

D.CHECK

CHECK通常可以用来约束限制列值的范围。

语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL CHECK (列名称>0),
列名称 数据类型 NOT NULL,
CONSTRAINT chk_约束名 CHECK (列名称>0,列名称='条件')//多个列定义约束
......
)

E.DEFAULT

DEFAULT通常可以用来约束列的默认值,如果没有其他值插入的情况下,默认值会出现在所有记录中。

语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL DEFAULT '默认值',
列名称 数据类型 NOT NULL,
......
)

约束的用法到这里基本上就差不多了,因为时间关系没有给小伙伴列举各个使用例子,但是建议小伙伴去动手尝试一下。

这里是白茶,一个PowerBI的初学者。