如果我有多种类型的对象,当应对象。类型字符串及时,它应该是一个外国的钥匙吗?

StackOverflow https://stackoverflow.com/questions/1005384

我们说我们的书籍,可以浪漫小说,或谜。我有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,
    ....
);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top