1

我有一个非常基本的问题,这将是一个更有效的设计,涉及更多连接的东西,或者只是将列添加到一个更大的表中?

例如,如果我们有一个存储亲戚的表,如下所示:

Person  |  Father  |  Mother  |  Cousing  | Etc.
________________________________________________

直接在该表中列出姓名、年龄等会更好.. 还是有一个包含他们的姓名、年龄等并通过 person_id 或其他东西链接的人员表会更好?

这可能是一个简单的例子,因为不仅仅是这两个选项。但为了说明起见,假设关系不能存储在 person 表中。

我目前正在做上述两个选择中的后者,但我很好奇这是否会达到性能会受到影响的地步,无论是当人员表变得足够大还是关系表中有足够的链接列时.

4

3 回答 3

2

我会选择更多的“正常性”来增加灵活性并减少数据重复。

PERSON:
ID
First Name
Last Name

Person_Relations
PersonID
RelationID
TypeID

Relation_Type
TypeID
Description

这样您就可以支持任何关系(一旦删除了第四表亲母亲一方),而无需更改代码。

于 2013-07-02T20:02:23.120 回答
1

这是一种更加灵活的设计,可以将每个人的详细信息从将他们联系在一起的表格中分离出来。通常,这将导致更少的数据消耗。

您甚至可以更进一步,拥有三个表:一张用于人员,一张用于关系类型,一张用于关系。

People将拥有所有个人识别信息——年龄、姓名等。

Relationship_types会有一个键,一个标签,可能还有一个描述。此表用于详细说明每种可能关系的详细信息。所以你会有一行代表“父母”,一行代表“孩子”,一行代表“兄弟”,等等。

然后Relationships表有四个字段:一个是关系中每个人的key,一个是relationship_type的key,一个是自己的key。请注意,您需要明确命名person列的方式,以明确哪一方是关系的哪一部分(即说 A 和 B 具有“父母”关系只有在您指出哪个人父母 vs其中父母)。

于 2013-07-02T19:56:13.670 回答
1

根据您计划如何使用数据,可能会有更好的结构

  • Person 表( id , name 等)

  • 关系表(person_a_id、person_b_id、relation_type 等)

其中 person_a_id 和 person_b_id 与个人样本数据中的 id 相关可能看起来像

 ID Name 
  1 Frank
  2 Suzy
  3 Emma

关系

  A B Relationship 
  1 2 Wife
  2 1 Husband
  1 3 Daughter
  2 3 Daughter
  3 1 Father
  3 2 Mother
于 2013-07-02T19:56:27.750 回答