假设我有各种各样的颜色供用户使用。现在让我们说我们有三种颜色,红色,蓝色和黄色。每种颜色都有颜色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”。这可能吗?谢谢!
答案 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所说(在评论中),您可以使用"外键约束"设置表之间的参照完整性,以便其他表不能具有除您拥有的颜色之外的其他颜色的值在你的"颜色"中定义表