场景:我必须创建一个数据库,该数据库必须包含3个不同的表,其中包含有关人员的信息。让我们称他们为会员,非会员和员工。在他们可能分享的其他信息中,一个是电话号码。电话号码是唯一的,每个都在各自的表格中。
我的问题:我想确保这3个表中的电话号码始终是唯一的。有没有办法为此创建验证规则?如果没有,我需要重新设计数据库,这是推荐的方法。
附加信息:虽然3个表格中包含相同的信息(名称,地址等),但不需要填写它们。所以我不确定名为Persons的通用表是否适合我的情况。
一些想法:我想知道是否以及如何将查询用作验证规则(这会使事情变得更容易)。如果我最终会创建一个名为电话号码的表,那么4个表之间的关系将如何起作用以确保3个表中的每个表都有电话号码。
答案 0 :(得分:0)
我假设您正在谈论关系数据库。
我会选择一个带有“type”列的person
表(member,non_member,...)。从长远来看,这更加灵活。添加新的“人员类型”很容易 - 如果您以后想要“访客”类型会怎么样?
您需要定义为nullable以满足“并非所有信息都需要”部分。
只需一张桌子,就可以轻松制作独特的电话号码。
如果你做需要在不同的表中使其唯一,你需要将电话号码放在他们自己的表中(数字是唯一的)和phone_number
表的引用来自其他表格。
修改强>
以下是创建此类phone_number
表的示例:
create table phone_number
(
id integer primary key,
phone varchar(100) not null unique
);
create table member
(
id integer primary key,
name varchar(100),
... other columns
phone_number_id integer references phone_number
);
表non_member
和employee
具有相同的结构( 强烈表明它们应该是单个实体)
编辑2 (2016-01-08 20:12)
正如sqlvogel正确指出的那样,将电话号码放在一个表中并不会阻止多个人使用电话号码(我误解了要求,因此不应该存储多个电话号码)< / p>