我有一个数据库,我存储房屋。每个房子可以有多个设施,每个设施可以有多个值。数据库设计问题
比方说,我想存储房子的类型(公寓,别墅,工作室等)。我在想的是有一个房屋类型的property_type表和一个设施表,我将保存home_id和property_type_id。
我的想法是否正确?有没有更好的办法?
我有一个数据库,我存储房屋。每个房子可以有多个设施,每个设施可以有多个值。数据库设计问题
比方说,我想存储房子的类型(公寓,别墅,工作室等)。我在想的是有一个房屋类型的property_type表和一个设施表,我将保存home_id和property_type_id。
我的想法是否正确?有没有更好的办法?
这是我的照片。不过,我对你的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
这是一个完全有效的设计,虽然可能更合适,如果一个位置可以有一个以上的类型。
在这种情况下,我通常在位置表直接添加property_type_id,前提是所有地点都有一个类型(这似乎可能在这种情况下)
编辑: O等待,这似乎是一个单一的房子可以有多个设施。在这种情况下,我将创建一个带有house_id的设施表,并在设施表上添加property_type_id和任何其他相关信息。
您的设计是有效的,这样做没有错。但为什么不为你的属性类型使用继承而不是使用property_type属性?表之间的继承通过使用PK-PK关系完成。如果不同类型的属性具有共同的属性(将放置在超类型/超级表中)以及将在子类型中存在的不同属性,那么执行此操作将证明其更有效。此外,也许这些属性中的一个与另一个表有关系,但并非所有其他属性实际上都有这种关系。但是,这又取决于您的业务需求。
如果通过“设施”,你的意思类似于属性的一个特征(通过你对另一个答案的评论,看起来你是这么做的),那么你所拥有的就是多对多(或者,更短,M:M)的关系。也就是说,你有两个“东西”:
而每个属性都可以有多个设施,任何给定的设施可能存在于多个属性(换句话说,一个给定的财产可以有一个游泳池或微波炉,你可以有一个游泳池和多个属性与微波多个属性)。
在关系数据库中,M:M关系使用关联表来表示。因此,在一般情况下,你的前两个表是这样的:
Property
------------
Property ID
Description
etc.
Facility
------------
Facility ID
Description
etc.
现在,你需要一个表,对于每一行,让你给定的属性给定的设备相关联。这将是这样的:
PropertyFacility
----------------
Property ID
Facility ID
这基本上是一个教科书M:M关系的关系,应该给你你需要什么。
是的我的错误属性类型不是一个设施,但实际上我的问题是如何为每个设施存储多个值。说一个厨房可以有这些价值(洗碗机,冰箱,冰柜,滚刀,烤箱,微波炉,洗衣机,搅拌机,咖啡机,烤面包机,铁,烧烤) – chchrist 2011-02-13 20:57:32