我有一个 properties
table和每个 property
可以有很多 amenities
.
示例 amenities
是“hasterrace”、“hasgarden”和“hasprivateparking”。大约有50个便利设施。
名单 amenities
未来不大可能改变。我看到两种选择:
将布尔标志添加到 properties
表中列出了大约50个字段,例如“hasterrace”。
创建称为 amenities
以及 property_amenity
去喝一杯 many-to-many
关系。
一个典型的用例是查询具有任何给定数量便利设施的所有属性。
我倾向于将所有内容放在一个表中并使用布尔值,因为:
便利设施的清单不大可能改变。
我认为我的查询速度会更快(可能是一个垃圾的原因,因为所有的数据库调整,可以做)。
我的问题会更简单。
我会写更少的代码,代码也不会那么复杂。
然而,在一个表中有60个左右的字段似乎是一个相当高的值。
对于上述问题,哪种数据库设计最好?
1条答案
按热度按时间2sbarzqh1#
考虑使用
50个属性只需要7个字节。设置和测试有点复杂;请参阅手册。
类似地
BIGINT UNSIGNED
将允许8字节中最多64个标志,但您需要使用数字0..63和“shift”(例如,1 << 22
).与
BIGINT
在这种方法中,您可以“轻松地”测试任意数量的标志在同一时间内是否打开/关闭WHERE
条款。如果不知道您需要执行哪种类型的查询,我就不能推荐其中一种。