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

Validate that value is unique over multiple tables access

场景: 我必须创建一个数据库,该数据库必须包含 3 个不同的 table 来保存有关人员的信息。我们称他们为 Members、Non_Members 和 Employees。在他们可能分享的其他信息中,一个是电话phone 号码。 phone 个数字是唯一的,每个数字都在其各自的 table.

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

附加信息: 虽然 3 table 包含相同的信息(姓名、地址等),但并不总是需要填写它们。所以我不确定通用 table 命名的 Persons 是否适用于我的情况。

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

ERD

我假设你在谈论关系数据库。

我会选择带有 "type" 列的单个 person table(成员,non_member,...)。这在 long 运行 中要灵活得多。添加新的 "person types" 很容易 - 如果您以后想要 "guest" 类型怎么办?

您需要将其定义为可为 null 以满足 "not all information is required" 部分。

只需一个 table,就可以很容易地使 phone 号码独一无二。

如果您需要使其在不同的table中唯一,您需要将phone数字放在它们自己的table(其中数字是唯一的)以及 phone_number table 来自其他 table 的引用。

编辑

这里有一个创建这样的例子 phone_number table:

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
);

tables non_memberemployee 将具有相同的结构( 一个强烈的迹象表明它们应该是单一的实体)

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

正如 sqlvogel 正确指出的那样,将 phone 号码放入单个 table 中并不会阻止 phone 号码被多人使用(我误解了要求,因此 phone 号码不应存储超过一次)