使用面向对象的编程语言我遇到的情况是我有一个Object,其中一个属性是对象的类型。当我将它保存到数据库时,我总是创建两个表,一个用于对象本身,另一个用于对象类型(id,name)。然后我将typeId分配给对象并创建ObjectType表的外键。我不确定这是否正确,因为:
另一个选项是使用一个字符串并将其直接保存在对象的表中,但这听起来不太好,因为搜索速度比使用typeId慢,并且没有关于所有可能类型的列表。更改一种类型的名称也更复杂。你能告诉我在这种情况下最好的做法是什么吗?
答案 0 :(得分:1)
在这种情况下,您有3个选项:
您有5个评估参数:
Varchar :
枚举字段:
其他已加入的表格(查找表格):
参考:
请参阅此处的效果分析(Enum Fields VS Varchar VS Int + Joined table: What is Faster?)。
在此处查看Enum的优缺点(8 Reasons Why MySQL's ENUM Data Type Is Evil)。
请参阅SO中的查找表和mysql here中的Varchar示例。
最后:根据您的评估参数,您可以选择正确的选项。
另一种可能性是在数据库中仅使用整数编号并管理源代码中的所有内容。我没有把它放在评估中,因为它不是数据库设计。这是编程方法。