oop—在mysql数据库中保存对象及其类型的最佳方法

xj3cbfub  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(498)

使用面向对象的编程语言,我遇到的情况是,我有一个对象,其中一个属性是对象的类型。当我将它保存到数据库时,我总是创建两个表,一个用于对象本身,另一个用于对象类型(id,name)。然后我将typeid分配给对象,并为objecttype表创建一个外键。我不确定这是否正确,因为:
我使用整个表只保存很少的记录(5-10种可能的对象类型),它们很少更新。
我需要在两个表之间进行连接以显示对象类型的名称。
在代码中,我用与类型表中相同的id声明常量(在编程和将类型分配给对象时进行操作),我不喜欢这种冗余。
另一个选项是使用字符串并将其直接保存在对象中´但这听起来不太好,因为搜索速度会比使用typeid慢,而且没有关于所有可能类型的列表。另外,更改一种类型的名称更为复杂。你能告诉我在这种情况下最好做什么吗?

0md85ypi

0md85ypi1#

在本例中,您有3个选项:
瓦尔查尔
枚举字段
其他联接表(查找表)。
您有5个评估参数:
冗余
可扩展性
可修改性
演出
简单
瓦尔查尔:
非常糟糕(应该复制值)
好(你可以很容易地添加新类型)
非常糟糕(应该用相同的值更改所有插入的数据)
优秀(基于参考)
优秀(易于用作其他字段和orms)
枚举字段:
良好(dbms控制冗余)
非常非常差(基于参考)
非常非常差(基于参考)
优秀(基于参考)
非常好(有些orm的行为类似于字符串字段,请参阅此参考)
其他联接表(查找表):
优秀(er正常方法)
优秀(er正常方法)
优秀(er正常方法)
正常(可能不好-如果速度如此重要)
正常(取决于程序员)
参考文献:
请参阅此处的性能分析(enum fields vs varchar vs int+joined table:什么更快?)。
请参阅这里的enum优缺点(mysql的enum数据类型不好的8个原因)。
请参阅mysql中的lookup table和varchar示例。
最后:根据您的评估参数,您可以选择适当的选项。
另一种可能是只在数据库中使用整数,并在源代码中管理所有内容。我不把它放在评估中,因为它不是数据库设计。这是一种编程方法。

相关问题