我应该何时将属性放在单独的表中?我的意思是我有一个属性,但我是否应该把它与表人的其余属性放在一起,或者我是否应该将它放在一个单独的表中,其中person_ID为FK?
其次,何时形成关联类?它可以在一个类和它的多变量属性之间形成吗? Ex class book有属性作者。作者可以写很多书,很多作者可以写一本书
答案 0 :(得分:0)
只要您期望一个person
可以拥有该属性的多个属性,就应该将属性放在单独的表中。否则,没有太多理由将它分开,并且这样做可能会有一些概念上的开销。 (如果必须编写一个检索person
的五个不同属性的查询,如果每个属性都不必要地位于自己的表中,那么这可能会非常烦人。)
只要两个表之间的关系是多对多,就应该在两个表之间创建一个关联表。您的作者书籍示例很好。
答案 1 :(得分:0)
这取决于该属性的依赖性。如果它是你正在创建的那个实体的属性(人),那么它应该放在同一个表中,但正如你所说的一本书,其中一本书可以有很多作者,一个作者可以写很多书,你有考虑实体和属性之间的关系。它是一对一的关系,1对多或多对1等。
这就是说,如果你的人只能拥有该属性的1个值,并且只有1个人可以拥有该属性,那么它应该放在同一个表中。
在以下情况下,您应该有一个关联表:
1个人一次可以居住在1个以上的房子里(家庭和度假屋),但更多人也可以住在这些房子里。
显然,在上面的例子中,我们忽略了一个人一次不能超过1个地方的事实。
作为一般规则,属性应该依赖于“密钥,整个密钥而不是密钥”
更新@ruakh说的话:
如果您分离属性,它可能会产生开销,但是您可以用来容纳此开销的工具是创建表的视图。我不确定你使用的数据库系统,但MySQL有这个功能。 View是一个“虚拟”表,您可以使用当前数据库上的SQL查询创建该表。您可以组合多个表,您将像查看普通表一样查询该视图。