MYSQL选择值表结构

时间:2017-09-22 02:28:24

标签: mysql

我正在创建一个网站,用户可以在其中发布他们家的列表。我有复选框,用户可以检查他们家中包含的特征,如游泳池,壁炉,附属/独立车库等。

我不得不考虑设计,但我想知道哪个更正确:

  1. 在主列表中为每个特征创建一个列,并为其指定enum('0','1')类型,其中0表示未选中,1表示已选中

  2. 创建一个包含属性可以具有的所有特征的表:车库,游泳池,壁炉等..然后创建第二个表格,用于提取特征ID并将其与主页列表ID配对

  3. 例如:home_1有一个池,所以会创建一行:

    | home_1 | 1 |

    其中home_1是列表ID,1是特征表中的pool的id

    我应该选择哪个选项?

3 个答案:

答案 0 :(得分:1)

选项1似乎很好,因为如果你使用第二个选项,那么在查询数据库时会有联接。加入是昂贵的,并且花费时间在MySQL中。

可在此处找到更多内容https://www.percona.com/blog/2013/07/19/what-kind-of-queries-are-bad-for-mysql/

答案 1 :(得分:0)

如果您想查询“统计所有独立式住宅”等数据 具有单独列的枚举将更快,更容易地处理数据库操作。

如果您愿意仅查询房屋的地址,价格等不是那些功能。第二种方法更容易开发和维护。

简而言之,如果您不打算查询这些房屋特征,请使用第二种方法  单独

答案 2 :(得分:0)

这一切都取决于保存后使用数据的方法。但基本思路应该是以这些方式考虑映射:

  1. 在以下情况下使用第二个选项:
  2. 如果两个实体是多个(许多家庭,许多特征),你应该选择第二个选项(即使将来增加使用连接的成本很少)。

    由于您的完整数据库映射未知,如果特性与属性无关,我建议再提一个选项。这意味着,如果您计划使用特征来引用其他表的其他实体,那么最好再次使用您的第二个选项。

    1. 时使用第一个选项

      如果它只是一对多的关系(一个家庭,许多特征),你的第一个选项很有效,因为它不仅可以在获取时降低成本,还可以在你的主记录更新时更新/删除home的相关特性/删除。

      最后,由您决定数据模型的映射类型和依赖关系。