SQL我可以检查属性的匹配ID吗?

时间:2018-03-17 23:31:56

标签: sql sql-server

假设我有各种各样的颜色供用户使用。现在让我们说我们有三种颜色,红色,蓝色和黄色。每种颜色都有颜色ID,红色(1),蓝色(2)和黄色(3)。我想知道我是否可以制作一张类似这样的表:

CREATE TABLE Colors
(
    Color CHAR(10) NOT NULL
    ,Color_ID INT NOT NULL
            CHECK (*Does Color ID match the color?*)
)
GO

即。如果你输入红色,则ID必须为“1”。这可能吗?谢谢!

2 个答案:

答案 0 :(得分:2)

您可以通过以下两种方式之一验证颜色。一种方法是在包含它们的表中使用检查约束。这不是“颜色”表,而是其他东西。例如:

create table blouses
    blouse_id int identity(1, 1) not null,
    purchase_date date,
    color varchar(255),
    constraint chk_blouses_color check (color in ('red', 'blue', 'yellow'))
);

在此方法中,颜色不是存储为数字而是存储为字符串。约束保证值是正确的。

确保正确值的第二种方法是使用外键约束。这可能看起来像:

create Colors (
    color_id int identity(1, 1) primary key
    Color varchar(10) not null unique
);

insert into colors (color)
    values ('red'), ('blue'), ('yellow');

然后将其引用为:

create table blouses
    blouse_id int identity(1, 1) not null,
    purchase_date date,
    color_id int not null,
    constraint fk_blouses_color foreign key (color_id) references colors(color_id)
);

答案 1 :(得分:0)

是的,它们通常被称为"查找表",您添加ID列和值,然后您引用其他表中的ID列。

正如shawnt00所说(在评论中),您可以使用"外键约束"设置表之间的参照完整性,以便其他表不能具有除您拥有的颜色之外的其他颜色的值在你的"颜色"中定义表