数据建模:有亲子关系的种族?

时间:2010-11-24 00:37:08

标签: mysql database data-modeling database-design

我有一个网站,用户希望用户能够识别他们的种族。如果只有一级层次结构,那么建模的最佳方法是什么?

解决方案1(单表):

Ethnicity
- Id
- Parent Id
- Name

解决方案2(两张表):

Ethnicity Group
- Id
- Name

Ethnicity
- Id
- Ethnicity Group Id
- Name

我将使用此功能,以便用户可以根据种族搜索其他用户。哪两种方法对我有用?还有其他方法我没考虑过吗?我正在使用MySQL。

3 个答案:

答案 0 :(得分:1)

在现实世界中有种族群体,所以你需要两张桌子,而不是一张桌子。现实世界有三个级别(最顶级的是Race),但我知道这里可能没有必要。如果你把三个级别压成两个,你必须要小心,并在开始时正确地将它们全部放好。然而,他们会容易受到那些说他们想要真实事物的人的影响,你可能不得不改变它,或者改变结构以适应更多...后来的更多工作)。

如果你按照现实世界正确地做到了,那么这个问题就会被消除。如果你想要Race,请告诉我,我会更改模型。

这些表格太小了,键太有意义了,无法为它们添加Id-iot列;将它们保留为纯关系键,否则将失去Relational引擎的功能。如果你真的想要窄键,请使用CHAR(2)EthnicityCode,而不是NUMERIC(10,0)或无意义的数字。

Link to Ethnicity Data Model(加上你的另一个问题的答案)

Link to IDEF1X Notation适用于那些不熟悉关系建模标准的人。

答案 1 :(得分:0)

如果现实世界中没有“种族群体”,我建议你不要在数据模型中引入一个。

您可以使用第二个查询执行的所有查询,也可以使用第一个查询,因为您只需选择FROM ethnicity AS e1 JOIN ethnicity AS es ON (e2.ethnicity_id = e1.parent_id)

答案 2 :(得分:0)

我不想尴尬,但你打算怎么做混血人呢?我认为你能想到的最好的是一个简单的单级枚举,就像你在人口普查表上得到的那种(例如'黑','怀特','亚洲','西班牙裔'等)。它并不理想,但它允许人们相当容易地自我识别。像种族和种族这样的概念是不够的,而不是试图在它们之上创建额外的(基本上没有意义的)层次结构,所以我的直觉就是保持简单。