【问题标题】:Data Modeling: ethnicities with parent-child relationship?数据建模:具有亲子关系的种族?
【发布时间】:2010-11-28 00:00:10
【问题描述】:

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

方案一(单表):

Ethnicity
- Id
- Parent Id
- Name

方案二(两张表):

Ethnicity Group
- Id
- Name

Ethnicity
- Id
- Ethnicity Group Id
- Name

我将使用它,以便用户可以根据种族搜索其他用户。这两种方法中哪一种更适合我?还有另一种我没有考虑过的方法吗?我正在使用 MySQL。

【问题讨论】:

  • 如果只有一层等级怎么会有EthnicityGroup?

标签: mysql database data-modeling database-design


【解决方案1】:

好吧,现实世界中存在种族群体这样的东西,因此您确实需要两张桌子,而不是一张。现实世界有三个级别(最高级别是 Race),但我知道这里可能没有必要。如果您将三个级别压缩为两个级别,则必须小心,并在开始时将它们全部正确放置。然而,他们很容易受到人们说他们想要真实的东西,你可能不得不改变它,或者改变结构以适应更多的东西......以后还有更多的工作)。

如果您按照现实世界正确地执行此操作,则可以消除该问题。如果您想要 Race,请告诉我,我会更改模型。

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

Link to Ethnicity Data Model(加上你其他问题的答案)

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

【讨论】:

  • @SONewbie。谢谢。你还没有回答你想要比赛(3个级别)还是2个级别。
  • 我还在考虑事情。也许这足以满足我的需求:“亚洲人、日本人”、“亚洲人、韩国人”等。也许我真的不需要这种层次结构的概念。还不确定。仍在考虑如何使用数据。如果我确实需要层次结构,我想我只需要 2 个。
【解决方案2】:

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

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

【讨论】:

  • 我从来没有听过有人说“亚裔族群”,但在这种情况下,请继续创建您的“族群”表。您的数据库结构应该模拟现实。
【解决方案3】:

我不想尴尬,但你打算对混血儿做什么?我认为你能期望的最好的就是一个简单的单级枚举,就像你在人口普查表上得到的那种东西(例如“黑人”、“白人”、“亚洲人”、“西班牙裔”等)。这并不理想,但它允许人们相当容易地自我识别。种族和民族之类的概念已经够模糊了,无需尝试在它们之上创建额外的(基本上毫无意义的)层次结构,所以我的直觉是保持简单。

【讨论】:

  • 用户将能够选择 0 个或更多种族。
猜你喜欢
  • 2018-06-28
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2013-01-18
相关资源
最近更新 更多