Mysql - 存储有关表中项目是/否重复详细信息的最佳方法

标签 mysql sql database

我在数据库中有一张表,其中包含公寓列表,每个公寓都有便利设施。

我曾经将设施保存在公寓列表中,但这是一个问题,因为有时我需要添加/编辑设施,而没有设施的公寓会占用不必要的字段。

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/

相关文章:

sql - 如果确切时间不可用,如何根据最后一个可用时间戳返回值?

mysql - JdbcTemplate,MySQL错误

php - 当查询没有返回结果时,如何显示错误消息?

php - 使用 HTML 表单通过 PHP 发送 MySQL 表

sql - Like 从句的模式匹配

sql - 使用 CTE 的分层数据

android - 使用游标从 android 中的谷歌应用引擎查询

MySQL合并共享相似列的多个表

mysql - 简单的 MySql select 语句返回 0 行

c# - 完全卡住了,简短地在标题中解释,涵盖了 c# asp.net 控件和 html 代码以及一点 javascript