Mysql 数据库设计:我想存储房子的类型(公寓、别墅、工作室等)
我有一个储存房屋的数据库。每个房子可以有多个设施,每个设施可以有多个值 假设我想存储房子的类型(公寓、别墅、工作室等)。我的想法是为房屋类型设置一个属性类型表,并在其中保存房屋id和属性类型idMysql 数据库设计:我想存储房子的类型(公寓、别墅、工作室等),mysql,database-design,Mysql,Database Design,我有一个储存房屋的数据库。每个房子可以有多个设施,每个设施可以有多个值 假设我想存储房子的类型(公寓、别墅、工作室等)。我的想法是为房屋类型设置一个属性类型表,并在其中保存房屋id和属性类型id 我的想法正确吗?有更好的方法吗?这是一种完全有效的设计,但如果一个位置可以有多个类型,则可能更合适 在这种情况下,我通常直接在location表上添加一个property_type_id,前提是所有位置都有一个类型(在本例中可能是这样) 编辑: 哦,等等,似乎一栋房子可以有多个设施。在这种情况下,我将创
我的想法正确吗?有更好的方法吗?这是一种完全有效的设计,但如果一个位置可以有多个类型,则可能更合适 在这种情况下,我通常直接在location表上添加一个property_type_id,前提是所有位置都有一个类型(在本例中可能是这样) 编辑:
哦,等等,似乎一栋房子可以有多个设施。在这种情况下,我将创建一个带有房屋id的设施表,并在设施表上添加属性类型id和任何其他相关信息。这就是我所描述的。然而,我对你对
设施的定义有点困惑。我认为这个设施就像健身房、健身中心或有盖停车场等
Property table
| property_id | property_type_id
111 001
112 002
Property type table
| property_type_id | description
001 | house
002 | apartment
003 | villa
Facility
| facility_id | description | property_id
| 999 | community bathroom | 111
| 998 | community kitchen | 111
| 997 | fitness center | 112
| 996 | covered parking | 111
| 995 | covered parking | 112
Tenant/Owner table
| owner_id | property_id
| 888 | 111
| 887 | 112
你的设计是有效的,这样做没有错。但是为什么不对属性类型使用继承而不是使用属性类型属性呢?表之间的继承是通过使用PK-to-PK关系来完成的。如果不同类型的属性具有公共属性(将放在超级类型/超级表中)和不同属性(将放在子类型中),那么这一实现将进一步证明其有效性。此外,可能其中一个属性与另一个表有关系,但并非所有其他属性都具有这种关系。但话说回来,这取决于您的业务需求 如果你所说的“设施”是指类似于物业特征的东西(通过你对另一个答案的评论,似乎你是这样做的),那么你所拥有的就是所谓的多对多(或简称M:M)关系。也就是说,你有两个“东西”:
- 性质
- 设施
每个属性可能有多个设施,任何给定的设施都可以出现在多个属性上(换句话说,给定的属性可以有一个池或一个微波炉,您可以有一个池的多个属性和一个微波炉的多个属性)
在关系数据库中,M:M关系使用关联表表示。因此,一般来说,前两个表如下所示:
Property
------------
Property ID
Description
etc.
Facility
------------
Facility ID
Description
etc.
PropertyFacility
----------------
Property ID
Facility ID
现在,您需要一个表,对于每一行,该表允许您将给定的属性与给定的设施相关联。看起来是这样的:
Property
------------
Property ID
Description
etc.
Facility
------------
Facility ID
Description
etc.
PropertyFacility
----------------
Property ID
Facility ID
这基本上是一个教科书式的M:M关系,应该能满足您的需要。是的,我的错误属性类型不是设施,但实际上我的问题是如何为每个设施存储多个值。假设一个厨房可以让这些值(洗碗机、冰箱、冰箱、炉架、烤箱、微波炉、洗衣机、搅拌机、咖啡机、烤面包机、熨斗、烤架)为组件制作另一张桌子,并将它们链接回设施,就像设施如何链接回财产一样。您可以继续创建表以扩展一对多关系。