我有一个存储房屋的数据库。每个房子可以有多个设施,每个设施可以有多个值。
假设我想存储房屋的类型(公寓,别墅,工作室等)。我在想的是有一个house_type表用于房屋类型和一个设施表,我将保存home_id和property_type_id。
我的想法是否正确?还有更好的方法吗?
答案 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的关系,应该给你你需要的东西。