我在为一个特定的城镇建造一个住宿租赁地。它将包括,房屋,度假村,酒店等。
我正在寻找关于如何最好地连接属性特征的建议(空气-Con,游泳池等)。个人财产。
我有一张包含大约50个属性特性的表,设置为feature_id、feature_category、feature_name。
存储哪些特性与哪个属性相关的最佳方式是什么?
属性表(prop_features)中包含feature_id数组的列是最好的方法吗?
我找到并能够剖析DB的唯一示例显示了添加为feature_1、feature_2等的特性,这些特性看起来非常低效,因为一些属性可能只有feature_1和feature_49。每个列都作为一列添加到property_table中。
我是从无到有创建数据库的新手,所以我非常感谢关于如何最好地从我的项目的这一部分开始的任何建议。(这也是为什么我在谷歌搜索时运气不佳的原因,因为我不知道如何用更笼统的术语来描述它,这可能会给我带来一个解决方案)。
发布于 2016-07-29 09:57:21
一种解决方案是有一个中间表,该表将属性连接到如下特性:
CREATE TABLE propertyfeatures (property_id INT, feature_id INT);如果我们有一个名为Acme Hotel (property 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 注意:我已经对您现有数据库中的表名和列名做了假设。你必须相应地调整上面的内容。
我找到并能够剖析DB的唯一示例显示了添加为feature_1、feature_2等的特性,这些特性看起来非常低效,因为一些属性可能只有feature_1和feature_49。每个列都作为一列添加到property_table中。
虽然这是可以做到的,但您是正确的,因为它效率低下,或者说,维护起来很尴尬。它被称为转轴,因为您要将唯一的行值更改为多列。例如,如果添加了一个新功能(例如,免费Wifi),怎么办?这不是像使用中间表那样简单地插入新的数据行的情况,您必须创建一个新的列来支持这一点。
不仅如此,您还必须手动或动态地定义功能列。作为参考,请看一看MySQL Pivot Table,它演示了手动方法和动态方法。
发布于 2016-07-29 09:57:30
一种简单的方法是将另一个表添加到具有列的数据库中。这种方法的关键词是“连接表”,它在数据库设计中是相当基础的。
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 | 23https://stackoverflow.com/questions/38655691
复制相似问题