3

spouse在包含有关信息的数据库中规范化有关 a 的信息的最佳方法是什么persons

数据包括:

person_id
first name
middle name
last name
phone number
address
vehicle
house
health
destiny
items
spouse first name
spouse middle name
spouse last name
spouse phone number
spouse address

我正在考虑保留一个表来考虑所有persons(配偶或其他)并区分 aspouse如果它的行具有person_id另一个的值person。这种自我参考是否可取?

我还打算为重复数据创建表。如healthvehicle等。

4

3 回答 3

3

配偶也是一个“人”,因此必须将配偶的详细信息作为单独的记录进行记录。唯一可以做到的方法是引入spouse_id自引用键。您显示的上表未标准化,因为一个人的表包含另一个人的详细信息。我建议您通过以下方式修改“人员”架构

 person_id
 first_name
 middle_name
 last_name
 phone_number
 address
 vehicle
 house
 health
 destiny
 items
 spouse_id
于 2013-04-26T03:40:36.667 回答
3

规范配偶信息将包括删除spouse *列。如果你想要一个自引用表,你应该有一个spouse_id引用的列person_id;但不要重复所有配偶信息,如姓名、地址和电话号码。

对于像人对车辆这样的一对多关系,是的,您需要在“多”端(例如vehicle)带有person_idFK 列的表。

此外,强烈考虑突破address到自己的桌子。如果您计划将地址的所有元素存储在这一列中,那是非常非规范化的(< 3NF):它们应该分成不同的列(例如streetmunicipalityregion);这些真的乞求在一张不同的桌子上。

自引用表是否可取?这真的取决于情况;但是根据我的经验,它们在数据中自然出现的地方是有意义的:我认为您所概述的通用“人”场景是合格的。相比之下,考虑一个相当做作的“图片”场景 -picture包​​含一个of_picture_id列的表格,用于覆盖图片的图片......图片......(嗯,现在这对我来说听起来并不那么做作......;但希望你明白了。)

于 2013-04-26T03:17:25.907 回答
0
PARTY
id
name

PARTY_RELATIONSHIP
from_party_id not null references party(id)
to_party_id not null references party(id)
from_date not null
to_date null
primary key (from_party_id, to_party_id, from_date)
check (from_party_id <> to_party_id)
于 2013-04-27T23:34:06.530 回答