2011-02-13 162 views
0

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

比方说,我想存储房子的类型(公寓,别墅,工作室等)。我在想的是有一个房屋类型的property_type表和一个设施表,我将保存home_id和property_type_id。

我的想法是否正确?有没有更好的办法?

回答

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 
+0

是的我的错误属性类型不是一个设施,但实际上我的问题是如何为每个设施存储多个值。说一个厨房可以有这些价值(洗碗机,冰箱,冰柜,滚刀,烤箱,微波炉,洗衣机,搅拌机,咖啡机,烤面包机,铁,烧烤) – chchrist 2011-02-13 20:57:32

0

这是一个完全有效的设计,虽然可能更合适,如果一个位置可以有一个以上的类型。

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

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

0

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

0

如果通过“设施”,你的意思类似于属性的一个特征(通过你对另一个答案的评论,看起来你是这么做的),那么你所拥有的就是多对多(或者,更短,M:M)的关系。也就是说,你有两个“东西”:

  • 属性
  • 设施

而每个属性都可以有多个设施,任何给定的设施可能存在于多个属性(换句话说,一个给定的财产可以有一个游泳池或微波炉,你可以有一个游泳池和多个属性与微波多个属性)。

在关系数据库中,M:M关系使用关联表来表示。因此,在一般情况下,你的前两个表是这样的:

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

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

现在,你需要一个表,对于每一行,让你给定的属性给定的设备相关联。这将是这样的:

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

这基本上是一个教科书M:M关系的关系,应该给你你需要什么。