类和表是否应该相同或者是否应该从查询派生类?

时间:2013-02-19 18:57:15

标签: php class cakephp database-design

让我们说我正在制作电话簿。

班级朋友

  • - >姓
  • - >名字
  • - >城
  • - >状态
  • - > ZIP
  • - >电话

根据我的理解,最好的做法是在我的数据库中有两个表,但是对于类似这样的东西,其中FirstName,LastName,Phone in one,而Address info在一个单独的表中,然后使用ForeignKey连接它们。这样,如果两个朋友住在同一个地址,我就不会重复任何信息。

我应该使用INNER JOIN查询设置课程吗?

此时我还没有确定框架,所以如果你也可以告诉我:

在CakePHP中,我能够使用INNER JOIN来创建一个类,还是会违反惯例?如果没有,我会更好地使用Laravel,Zend,Yii,Symfony或CodeIgniter等不同的框架吗?

一个人可能有多个地点说一家公司,例如有两个不同的办公室,或者一个朋友,有一个夏季和冬季的家。

3 个答案:

答案 0 :(得分:1)

这对我来说是一个可疑的规范化案例。是的,从理论上讲,你可以通过对地址进行规范化来节省一些冗余条目,但我会考虑在做出这个决定之前如何处理系统中的地址。地址是否始终是用户的属性(一对一关系),或者您是否打算实际拥有某种用户可以拥有多个地址的地址管理?在前一种情况下,我可能不会正常化,而在后一种情况下,我肯定会这样做。

这真的可以归结为地址作为一个独立的对象,在您的系统中是否有任何意义,或者地址是否只是用户的一对一属性。

答案 1 :(得分:0)

如果您计划让一个人一次与多个地址相关联,您只需要将地址存储在单独的表中。如果每个人只有一个地址就把它放在主表中。电话簿我记得他们只会将一个人与一个地址联系起来......

话虽这么说,如果你去多个表,你很可能会坚持使用一个类,并执行连接。

答案 2 :(得分:0)

  

这样,如果两个朋友住在同一个地址,我就不会重复任何信息。

对于可能没问题的“精确”数据,但地址为tend to be "fuzzy"。人们会用不同的方式表达它们,有时会拼错它们 - 如果发生这种情况,你应该使用哪个地址:数据库中已有的地址还是新数据库?你怎么会知道它们实际上是相同的,哪一个拼写错误?最好“隔离”地址,以便任何错误或变化对他们来自的人保持“本地”。

更哲学的说明:如果你这样做,为什么不“规范化”街道,邮政编码,城市,国家甚至(固定电话)电话号码?您可以使用“精确”数据来做到这一点,但对于地址,尝试将此概念推向极端只会使整个系统变得脆弱。

话虽如此,允许一个人拥有多个地址是完全合理的,方法是将地址放入通过FK(地址引用人,而不是相反的方式)连接的单独表中,否则只需将地址保留在同桌。

相关问题