关系模型:多个重叠的功能依赖关系

时间:2014-10-28 10:50:19

标签: relational-database functional-dependencies

让我们考虑一下为客户建模的以下关系

R1 = (customer_num, birth_city, living_city, birth_city_location, living_city_location)

其中 birth_city 是客户所在的城市,而 living_city 是客户所在的城市。此外,我们认为一个城市值决定一个位置值

让我们考虑一下我们有以下功能依赖列表:

customer_num --> birth_city
customer_num --> living_city

birth_city --> birth_city_location
living_city --> living_city_location

实现正常形式的最佳分解将是:

(customer_num, birth_city, living_city)
(birth_city, birth_city_location)
(living_city, living_city_location)

这意味着为城市创造两种关系。

事实上,我认为一个关系就足够了,因为如果我们知道城市我们知道它的位置,这两个关系意味着数据冗余。但是如果我们在基本关系中考虑birth_city = living_city,我们将失去birth_city可能与每个客户的living_city不同的语义。

考虑到城市和位置的两种关系是不公平的,因为它们的价值可能会重叠,如果我们决定改变一些城市的 birth_city 值的位置,这个城市就存在于< strong> living_city 值,然后我们让DB处于不一致状态。

我可以更普遍地重新提出这个问题:

R = (A, X1, X2, Y1, Y2)

,其中

A --> X1
A --> X2

X1 --> Y1
X2 --> Y2

我们有一个特殊情况:

if t1[X1] = t2[X2] then t1[Y1] = t2[Y2]

如何建立关系模型?

1 个答案:

答案 0 :(得分:1)

虽然您的模型确实遵循完全规范化原则,但它不遵循正交设计原则,即您有两个具有重叠含义的关系。

如果你遵循这个原则,关系将是:

客户(customer_num,birth_city,living_city)
城市(city,city_location)

这样:

ρ city / birth_city (Π birth_city (Customers))⊆Π city (Cities)
ρ city / living_city (Π living_city (Customers))⊆Π city (Cities)

,其中

Π:投影
ρ:重命名

我会注意到关于正交设计的精确定义没有达成一致。