使用全名作为主键与创建附加字段

时间:2015-11-25 22:51:27

标签: mysql relational-database

假设我们有两张桌子。一个是电影。电影表包含电影名称和发行年份的字段,以及哪个演员在其中加注。另一张表是主要演员。它有演员姓名和出生日期的字段。

出生日期字段取决于名称字段。使用演员全名作为主键是否有意义?如果表现不是问题该怎么办?

2 个答案:

答案 0 :(得分:1)

通常,使用名称字段(甚至是全名字段)作为主键完全没有意义。那是因为你想要在真实世界和现实世界中塑造你的数据库'名字不是唯一的。

现在,也许20世纪的美国电影演员有着独特的名字。但这是意外,而不是现实。

在图书馆学的世界里,列出了诸如演员之类的东西。名称被称为"受控词汇。"如果你想了解这种已经用几个世纪的经验解决过这种事情的方法,那值得一看。

要在DBMS中实现受控词汇表,您可以使用带有(自动增量)ID号的表。您将此人的姓名放在第二栏,将出生日期放在另一栏中,等等。如果此人有别名(例如," Prince","艺术家以前称为王子,"和#34; TAFKAP")您可能在词汇表中包含别名表。这将包含成对的id号。

(请注意,即使美国社会保障号码也不是唯一的。社会保障管理局曾经错误地发布了一张社会保障卡的照片;很多人都使用该卡上显示的号码。)

不要担心表现。即使附加了ID号,电影演员的总数,计算演员,双打和特技艺术家,也完全在小型DBMS系统的能力范围内。

答案 1 :(得分:0)

看来你有两个问题:

<强> 1。使用演员全名作为主键是否有意义?

这不可能 - 但正如其他评论者所指出的那样,这是不可取的。一个原因是演员可能会改变他们的名字(另见list of actors who have changed their name)。

此外,不止一个演员可能具有相同的名称,因此全名不适合主键。

最好使用保证的唯一字段,例如UUIDauto-increment字段来识别您的演员。

<强> 2。如果表现不是问题怎么办?

我认为这不是一个性能问题,而是逻辑数据建模问题。您可以拥有一个有效的主键,它是一个字符串(例如名称),但在这种情况下,这将不适合使用。