当名称已经单义时,是否有必要为国家 table 使用整数 ID?

Is it necessary to use an integer ID for the Country table when the name is already univocal?

既然国名是单义的,用它作为主键是个不错的选择吗?

创建 TABLE 如果不存在 <code>CookingDB.Country ( CountryName VARCHAR(50) 不为空, 主键 (CountryName) )

我在网上找到的示例使用整数ID作为主键。有必要吗?

没有必要使用整数 ID,尽管它很常见。 将国家/地区名称作为键会产生一个大键,其中(有时)包含空格或特殊字符。这意味着使用它们的速度较慢,如果您在 HTML/JavaScript 应用程序中使用它们,您可能需要转义它们。

此外,您可能希望将这些本地化一次,或者更改国家/地区名称是否应使用其本国语言的决定,或者是否使用其英文名称或拉丁文字的注音符号。或者名称本身可能会发生变化(尽管对于国家/地区而言,这可能不会发生太多),或者您可能有想要更正的拼写错误,最好不必更新所有引用国家/地区的表格。

所以拥有一个代理键根本不是一个坏主意。如果您真的想要国家/地区的文本密钥,我会在全名上选择国家/地区 ISO 代码。

相关问题:When not to use surrogate keys

没有看错!但是,我们曾经有一个包含整数的列或与每个国家记录相关的每个国家的 iso。这在很多方面都有帮助,但这取决于您要创建的内容。我建议使用另一列作为 id,这也是主键。这样,您的查询就会更加准确,并且不会浪费时间调试或试图查找很容易是印刷错误的错误。 所以,由你决定,你就是创造者!