我有一个properties
表,每个property
可以有多个amenities
。
amenities
的例子是" hasTerrace"," hasGarden"和#34; hasPrivateParking"。 大约有50种设施。
amenities
列表将来不太可能改变。我看到两个选择:
properties
表中为50个左右的字段添加布尔标记,例如" hasTerrace"。amenities
和property_amenity
的单独表格,并建立many-to-many
关系。一个典型的用例是查询具有任何给定数量设施的所有房产。
我倾向于将所有内容保存在一个表中并使用布尔值,因为:
然而,表中有60个左右的字段似乎相当高。
哪个是上述问题的最佳数据库设计?
答案 0 :(得分:0)
考虑使用
SET ('hasTerrace', 'hasGarden', ...) NOT NULL
50个属性只需7个字节。设置和测试有点复杂;参见手册。
类似地,BIGINT UNSIGNED
允许8个字节中最多64个标志,但是你需要使用数字0..63和&#34; shift&#34; (例如,1 << 22
)。
使用BIGINT
方法,您可以轻松地[&nbsp;在单个WHERE
子句中测试任意数量的标志是打开/关闭的。
在不知道您需要执行哪些类型的查询的情况下,我不能推荐一个与另一个相比。