2012-12-19 187 views
0

我设计数据库以包含一个表reference,类型与列type即几个预定义值(例如,bookmoviemagazine,等)中的一个。我打算随着时间的推移扩大可能的价值范围(例如,如果我意识到我错过了academic_paper类型,我希望能够将其纳入)。SQL数据库设计:存储行

最简单的解决方案似乎只是将表示类型的字符串存储到表中。但这听起来像会造成很多浪费空间。

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

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

回答

1

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

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

1

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

您可以查询引用表以获取整数键并在需要时输出其名称,而不需要执行到其他表的连接,并仍然使用该表执行其他操作,只需使用相同类型名称保留两个表即可。

我知道它是多余的,但它确实是通过int key做一个简单查询并将它们放在一起的最快方法。

1

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