Mysql 数据库设计:我想存储房子的类型(公寓、别墅、工作室等)

Mysql 数据库设计:我想存储房子的类型(公寓、别墅、工作室等),mysql,database-design,Mysql,Database Design,我有一个储存房屋的数据库。每个房子可以有多个设施,每个设施可以有多个值 假设我想存储房子的类型(公寓、别墅、工作室等)。我的想法是为房屋类型设置一个属性类型表,并在其中保存房屋id和属性类型id 我的想法正确吗?有更好的方法吗?这是一种完全有效的设计,但如果一个位置可以有多个类型,则可能更合适 在这种情况下,我通常直接在location表上添加一个property_type_id,前提是所有位置都有一个类型(在本例中可能是这样) 编辑: 哦,等等,似乎一栋房子可以有多个设施。在这种情况下,我将创

我有一个储存房屋的数据库。每个房子可以有多个设施,每个设施可以有多个值

假设我想存储房子的类型(公寓、别墅、工作室等)。我的想法是为房屋类型设置一个属性类型表,并在其中保存房屋id和属性类型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关系,应该能满足您的需要。

是的,我的错误属性类型不是设施,但实际上我的问题是如何为每个设施存储多个值。假设一个厨房可以让这些值(洗碗机、冰箱、冰箱、炉架、烤箱、微波炉、洗衣机、搅拌机、咖啡机、烤面包机、熨斗、烤架)为组件制作另一张桌子,并将它们链接回设施,就像设施如何链接回财产一样。您可以继续创建表以扩展一对多关系。