MYSQL选择值表结构

MYSQL选择值表结构,mysql,Mysql,我正在创建一个网站,用户可以发布他们家的列表。我有一些复选框,用户可以在这些复选框中检查他们家中包含的特征,如游泳池、壁炉、附属/独立车库等 我必须考虑设计,但我想知道哪个更正确: 在主列表表中为每个特征创建一列,并将其命名为enum('0','1'),其中0表示未选中,1表示已选中 创建一个表,其中包含一个属性可以具有的所有特征,例如:车库、游泳池、壁炉等。。然后创建第二个表,该表提取特征id并将其与主列表id配对 例如:home_1有一个池,因此将创建一行,如下所示: |家1 | 1| 其中

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

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

  • 在主列表表中为每个特征创建一列,并将其命名为
    enum('0','1')
    ,其中0表示未选中,1表示已选中

  • 创建一个表,其中包含一个属性可以具有的所有特征,例如:车库、游泳池、壁炉等。。然后创建第二个表,该表提取特征id并将其与主列表id配对

  • 例如:home_1有一个池,因此将创建一行,如下所示:

    |家1 | 1|

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


    我应该使用哪个选项?

    选项1看起来不错,因为如果使用第2个选项,那么在查询数据库时会有连接。在MySQL中,join和join既昂贵又耗时


    如果您想查询“清点所有独立房屋”之类的数据,可以在此处找到更多信息 使用独立列的枚举将更快、更容易地处理数据库操作

    如果你只想查询房屋的地址、价格等信息,而不是这些特征。第二种方法更易于开发和维护

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

    这完全取决于您保存数据后使用数据的方法。但基本思路应该是以以下方式考虑映射:

  • 在以下情况下使用第二个选项:
  • 如果这两个实体是多个(多个家庭,多个特征),那么您应该选择第二个选项(即使它不会增加将来使用连接的成本)

    由于您的完整db映射未知,如果特性独立于属性,我将提出另一个选项。也就是说,如果您计划使用特征来引用其他表的一些其他实体,那么最好还是使用第二个选项

  • 当需要时,选择第一个选项
  • 如果只是一个多关系(一个家庭,多个特征),那么您的第一个选项效果很好,因为它不仅可以在获取时降低成本,而且还可以在家庭记录更新/删除时更新/删除家庭的从属特征

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