0

我正在设计一个包含 table 的数据库reference,其中的一列type是几个预定义值之一(例如,bookmoviemagazine等)。我打算随着时间的推移扩大可能值的范围(例如,如果我意识到我错过了academic_paper类型,我希望能够把它放进去)。

最简单的解决方案似乎是将表示类型的字符串简单地存储到表中。但这听起来会导致大量空间浪费。

我想到的另一个解决方案是创建一个新表reference_types,该type列在其外键中引用该表。这似乎具有确保有效外键的额外好处(这样我就不会在代码中的某处意外输入“杂志”),可能允许对某种类型的所有媒体进行更快的查询(因为整数比较应该很多比字符串比较快),但也会减慢我的应用程序速度,因为每当我需要引用类型时都需要连接,并且可能由于这些额外的连接而使逻辑复杂化。

你对这个问题的模式设计有什么想法?

4

3 回答 3

1

创建reference_types 表。并且在您的引用表中使用整数并添加一个reference_type_name 字段。

您可以查询引用表以获取整数键并在需要时打印其名称,而无需执行与另一个表的连接,并且仍然使用该表来执行其他操作,只需保持两个表具有相同的类型名称。

我知道这听起来很多余,但它确实是通过 int 键进行简单查询并将所有内容放在一起的最快方法。

于 2012-12-19T05:47:04.150 回答
1

这取决于,如果您想向引用类型添加一些其他信息,那么使用第二种方法。如果没有,请使用第一个,因为它更快并且存储的信息只是一个字符串(您始终可以选择唯一的来检索您的类型)。阅读这篇文章了解更多信息。

于 2012-12-19T05:48:24.153 回答
1

您的第二个解决方案是正确的。创建一个辅助表来存储您的引用类型并使用外键链接它们。

为了进一步阅读这个主题,您想要使用的搜索词是“数据库规范化”。

于 2012-12-19T05:37:49.320 回答