如果我有多种类型的对象,当应对象。类型字符串及时,它应该是一个外国的钥匙吗?
-
05-07-2019 - |
题
我们说我们的书籍,可以浪漫小说,或谜。我有2个现实的选择储存这些数据。一是要有一个类型列在我的书桌,这是一个串与价值"浪漫","虚构",或者"神秘"。其他的是创建一个book_types表和储存的类型。然后我的书会有一个type_id的数据外键引用book_types表。
我的问题是如何挑选这是最好的吗?我已经看到的串的方法中使用的宁静的认证轨插件,其中包含的信息有关的用户,国家"不活跃",'主动','待定'...
有效打击使用的查表的方法考虑到我会查询信息的所有时间吗?
谢谢!
解决方案
外键方法将表现更好。字符串比较会降低速度。比较数字要快得多。
如果要进一步加快查询速度,请在用于引用外键的列上添加索引。与主键不同,不会自动为外键创建索引。
其他提示
如果没有更多的信息要存储,那么字符串通常很好(尽管这是一个非瞬态值,因此它不是正常形式)。
这似乎是表格的一个很好的候选者,所以你可能想要对类别做更多的事情,所以它应该是一个参考表,imo。
在大多数情况下方式与外国的关键一个单独表是最优势:
单独表给你一个 可扩展的方式来验证该项。把硬编码的检查的制约因素表的定义 然后需要改变表中添加一个 新的类型
如果你需要更改类型的文本由于某些原因(例如"浪漫"->"妇女的幻小说"的一个跛脚的例子),则只有一种轻质的更新,查找表。
你可以想象有类型没有条目,而且单独表可以使用一个外连接,以包括类型在SQL result sets.
从该接口的角度看,一个单独的表格可以让你轻松产生下列类型的,不需要硬编码在的用户界面。
尽可能表现的推移,适当的指数在FK任何关系型数据库引擎将执行以及加入是一个关系数据库的设计。
我会用fk。 信息较少重复。
编辑: Betther解决方案: MySql代码:
CREATE TABLE books
(
id int AUTO_INCREMENT not null,
book_type enum('romance', 'fiction', 'mystery') not null,
....
);