我在数据库中有一张表,其中包含公寓列表,每个公寓都有便利设施。
我曾经将设施保存在公寓列表中,但这是一个问题,因为有时我需要添加/编辑设施,而没有设施的公寓会占用不必要的字段。
table 看起来像这样(有更多便利设施):
+----+---------+---------+-------+------+
| id | Address | Doorman | Cable | Pets |
+----+---------+---------+-------+------+
| 1 | E 55th | 1 | 0 | 1 |
| 2 | E 72th | 0 | 1 | 1 |
+----+---------+---------+-------+------+
我还可以通过哪些其他方式存储此类数据?
可能正确的方法是将设施存储在不同的表中,但是我如何按设施查询公寓?
现在要查询我做的Select * from table where Cable=1
最佳答案
恕我直言,存储这些信息的最佳方法是创建一个三 TableView 。
第一个表仅存储公寓信息。
第二个表是便利设施字典,它将每个便利设施转换为 ID (id_amenity/amenity_name)(表名为:amenities
)。
最后,您将有一个表,用于存储设施和公寓之间的匹配 (id_apartment/id_amenity)(表名为:apar_amen
)。
要检索信息,您将查询将其与其他两个表连接的最后一个表:
SELECT apartments.*, amenity_name FROM apar_amen
JOIN apartments ON apar_amen.id_apartment = apartments.id
JOIN amenities ON apar_amen.id_amenity=amenities.id_amenity
WHERE amenity_name = '1' //where 1 = 'Cable' in amenities list
通过这种方式,您可以添加任意数量的便利设施、更改其名称,并让任何公寓拥有所需数量的记录。这样,链接仅通过 id 建立,并且如果您将“Cable”更改为“Cable TV”,您的代码仍然可以工作,例如,因为“Cable”只是一个标签而不是列名称。
关于Mysql - 存储有关表中项目是/否重复详细信息的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31668398/