在这种情况下,我应该使用多对多还是一个带有布尔标志的表?

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

我有一个 properties table和每个 property 可以有很多 amenities .
示例 amenities 是“hasterrace”、“hasgarden”和“hasprivateparking”。大约有50个便利设施。
名单 amenities 未来不大可能改变。我看到两种选择:
将布尔标志添加到 properties 表中列出了大约50个字段,例如“hasterrace”。
创建称为 amenities 以及 property_amenity 去喝一杯 many-to-many 关系。
一个典型的用例是查询具有任何给定数量便利设施的所有属性。
我倾向于将所有内容放在一个表中并使用布尔值,因为:
便利设施的清单不大可能改变。
我认为我的查询速度会更快(可能是一个垃圾的原因,因为所有的数据库调整,可以做)。
我的问题会更简单。
我会写更少的代码,代码也不会那么复杂。
然而,在一个表中有60个左右的字段似乎是一个相当高的值。
对于上述问题,哪种数据库设计最好?

2sbarzqh

2sbarzqh1#

考虑使用

SET ('hasTerrace', 'hasGarden', ...) NOT NULL

50个属性只需要7个字节。设置和测试有点复杂;请参阅手册。
类似地 BIGINT UNSIGNED 将允许8字节中最多64个标志,但您需要使用数字0..63和“shift”(例如, 1 << 22 ).
BIGINT 在这种方法中,您可以“轻松地”测试任意数量的标志在同一时间内是否打开/关闭 WHERE 条款。
如果不知道您需要执行哪种类型的查询,我就不能推荐其中一种。

相关问题