验证该值对多个表访问是唯一的

时间:2016-01-08 16:37:20

标签: validation database-design unique

场景:我必须创建一个数据库,该数据库必须包含3个不同的表,其中包含有关人员的信息。让我们称他们为会员,非会员和员工。在他们可能分享的其他信息中,一个是电话号码。电话号码是唯一的,每个都在各自的表格中。

我的问题:我想确保这3个表中的电话号码始终是唯一的。有没有办法为此创建验证规则?如果没有,我需要重新设计数据库,这是推荐的方法。

附加信息:虽然3个表格中包含相同的信息(名称,地址等),但不需要填写它们。所以我不确定名为Persons的通用表是否适合我的情况。

一些想法:我想知道是否以及如何将查询用作验证规则(这会使事情变得更容易)。如果我最终会创建一个名为电话号码的表,那么4个表之间的关系将如何起作用以确保3个表中的每个表都有电话号码。

ERD

1 个答案:

答案 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_memberemployee具有相同的结构( 强烈表明它们应该是单个实体)

编辑2 (2016-01-08 20:12)

正如sqlvogel正确指出的那样,将电话号码放在一个表中并不会阻止多个人使用电话号码(我误解了要求,因此不应该存储多个电话号码)< / p>