数据库设计问题

时间:2011-02-13 20:36:45

标签: mysql database-design

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

假设我想存储房屋的类型(公寓,别墅,工作室等)。我在想的是有一个house_type表用于房屋类型和一个设施表,我将保存home_id和property_type_id。

我的想法是否正确?还有更好的方法吗?

4 个答案:

答案 0 :(得分:2)

这就是我所描绘的。我对你对facility的定义感到有点困惑。我认为设施就像健身房,健身中心或带顶棚的停车场等。

 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

答案 1 :(得分:0)

这是一个非常有效的设计,但如果某个地点可以有多种类型,则可能更合适。

在这种情况下,我通常直接在位置表上添加一个property_type_id,前提是所有位置都有一个类型(在这种情况下似乎很可能)

编辑: 等等,似乎单个房子可以有多个设施。在这种情况下,我将在其上创建一个带有house_id的设施表,并在设施表上添加property_type_id和任何其他相关信息。

答案 2 :(得分:0)

您的设计是有效的,这样做没有错。但是为什么不使用继承作为属性类型而不是使用property_type属性?表之间的继承是通过使用PK-to-PK关系完成的。如果不同类型的属性具有共同属性(将存在于超类型/超级表中)以及将存在于子类型中的不同属性,则实现这将证明其有效性甚至更多。此外,这些属性中的一个可能与另一个表有关系,但并非所有其他属性实际上都有这种关系。但话又说回来,这取决于您的业务需求。

答案 3 :(得分:0)

如果通过“设施”你的意思是类似于财产的一个特征(通过你对另一个答案的评论,似乎你这样做),那么你所拥有的被称为多对多(或更短) ,M:M)关系。也就是说,你有两个“事物”:

  • 属性
  • 设施

并且每个属性可能具有多个设施,并且任何给定的设施可以存在于多个属性上(换句话说,给定的属性可以具有池或微波,并且您可以具有带池的多个属性和多个属性微波炉)。

在关系数据库中,M:M关系使用关联表表示。所以,一般来说,你的前两个表看起来像这样:

Property
------------
Property ID
Description
etc.

Facility
------------
Facility ID
Description
etc.

现在,您需要一个表,对于每一行,您可以将给定属性与给定设施相关联。这将是这样的:

PropertyFacility
----------------
Property ID
Facility ID

这基本上是教科书M:M的关系,应该给你你需要的东西。