【发布时间】:2017-10-21 09:55:50
【问题描述】:
我正在尝试创建一个图书馆关系数据库,其中有两个表:用户和书籍。这种关系是一对多:一。一个用户有很多书,而一本书只有一个用户拥有。我在想 book 表应该有一个引用用户 id 的外键列。
但是,如果我想获取给定用户的所有书籍,我遇到了问题。 唯一的选择是使用 join 查询用户 ID 等于给定用户 ID 的书籍。 但是如果有很多书,那将需要很多时间。 所以有人可能会建议将外键列索引为非聚集索引。但是,图书用户组合会经常更新——您在此图书馆中的图书存放时间不会超过一天。但我读到更新索引列通常不是最佳做法。
那我该怎么办?这种情况的最佳解决方案是什么?
【问题讨论】:
-
不重复。我的主要问题是我是否应该索引经常更新的列,如果不是,那么正确的解决方案是什么
-
你的主要问题是它是一个糟糕的设计。建议您阅读链接和其他类似的内容。
-
通常有一个用于书籍的表,一个用于用户,一个用于 user_has_borrowed_book。您可以改为使用 NULL 存储用户表和组合其他两者的表。出于什么原因更喜欢哪个是设计质量的问题。 (包括实施问题。)第一个设计很简单,第二个不是。查找并关注有关信息建模和数据库设计的文本。当我们可以证明它有性能问题而另一个没有时,我们会放弃一个简单的设计。您需要对前者有更多的经验,然后才能欣赏后者。
标签: sql indexing database-design foreign-keys relational-database