我正在为特定城镇建造住宿租赁网站。 它将包括,房屋,度假村,酒店等。
我正在寻找有关如何最好地将房产特征(空调,游泳池等)与个别房产联系起来的建议。
我有一个大约50个属性功能的表,设置为feature_id,feature_category,feature_name。
存储哪些功能与哪个属性相关的最佳方法是什么?
包含feature_id数组的属性表(prop_features)中的列是最好的方法吗?
我设法找到并能够剖析数据库的唯一示例显示添加的功能为feature_1,feature_2等,这似乎非常低效,因为某些属性可能只有feature_1和feature_49。 每个都作为列添加到property_table。
我是从头开始创建数据库的新手,所以我非常感谢有关如何最好地从项目的这一部分开始的任何建议。 (这也是为什么我没有太多运气用谷歌搜索它,因为我不确定如何用更一般的术语来解释它)。
答案 0 :(得分:1)
一个解决方案是将连接属性的中间表添加到如下功能中:
CREATE TABLE propertyfeatures (property_id INT, feature_id INT);
如果我们有一个名为Acme Hotel(物业ID 1)的房产,有空调(功能ID 2)和游泳池(功能ID 4),数据看起来像:
property_id | feature_id
1 2
1 4
要检索每个属性的功能(不包括没有功能的属性),一个简单的查询将是:
SELECT
p.property_name,
f.feature_name,
f.feature_category
FROM property AS p
INNER JOIN propertyfeatures AS pf
ON p.property_id = pf.property_id
INNER JOIN features AS f
ON pf.feature_id = f.feature_id
GROUP BY p.property_id
注意:我已对现有数据库中的表名和列名做出假设。您必须相应地调整上述内容。
我设法找到并能够剖析数据库的唯一示例显示添加的功能为feature_1,feature_2等,这似乎非常低效,因为某些属性可能只有feature_1和feature_49。每个都作为列添加到property_table。
虽然可以做到这一点,但你的纠正是因为它效率低下,或者说维护起来很尴尬。它被称为 pivoting ,因为您将唯一的行值更改为多个列。例如,如果添加了新功能(例如免费Wifi)怎么办?它不是简单地插入新的数据行,就像使用中间表一样,您必须创建一个新列来支持它。
不仅如此,您还需要手动或动态定义要素列。作为参考,请查看MySQL Pivot Table,其中演示了手动和动态方法。
答案 1 :(得分:1)
一种简单的方法是将另一个表添加到具有列的数据库中。这种方法的关键词是"联结表",它在数据库设计中非常基础。
property_identifier | feature_identifier (feature_id in your case)
在此表中,您可以显示属性和特定功能之间的连接。
所以你可以说property_id 1的属性有一个池(feature_id:2)和一个漂亮的厨房(feature_id:23)
所以表格看起来像这样:
propery_id | feature_id
1 | 2
1 | 23