我正在创建一个网站,用户可以在其中发布他们家的列表。我有复选框,用户可以检查他们家中包含的特征,如游泳池,壁炉,附属/独立车库等。
我不得不考虑设计,但我想知道哪个更正确:
在主列表中为每个特征创建一个列,并为其指定enum('0','1')
类型,其中0表示未选中,1表示已选中
创建一个包含属性可以具有的所有特征的表:车库,游泳池,壁炉等..然后创建第二个表格,用于提取特征ID并将其与主页列表ID配对
例如:home_1有一个池,所以会创建一行:
| home_1 | 1 |
其中home_1是列表ID,1是特征表中的pool
的id
我应该选择哪个选项?
答案 0 :(得分:1)
选项1似乎很好,因为如果你使用第二个选项,那么在查询数据库时会有联接。加入是昂贵的,并且花费时间在MySQL中。
可在此处找到更多内容https://www.percona.com/blog/2013/07/19/what-kind-of-queries-are-bad-for-mysql/
答案 1 :(得分:0)
如果您想查询“统计所有独立式住宅”等数据 具有单独列的枚举将更快,更容易地处理数据库操作。
如果您愿意仅查询房屋的地址,价格等不是那些功能。第二种方法更容易开发和维护。
简而言之,如果您不打算查询这些房屋特征,请使用第二种方法 单独
答案 2 :(得分:0)
这一切都取决于保存后使用数据的方法。但基本思路应该是以这些方式考虑映射:
如果两个实体是多个(许多家庭,许多特征),你应该选择第二个选项(即使将来增加使用连接的成本很少)。
由于您的完整数据库映射未知,如果特性与属性无关,我建议再提一个选项。这意味着,如果您计划使用特征来引用其他表的其他实体,那么最好再次使用您的第二个选项。
如果它只是一对多的关系(一个家庭,许多特征),你的第一个选项很有效,因为它不仅可以在获取时降低成本,还可以在你的主记录更新时更新/删除home的相关特性/删除。
最后,由您决定数据模型的映射类型和依赖关系。