让我们说我正在制作电话簿。
班级朋友
根据我的理解,最好的做法是在我的数据库中有两个表,但是对于类似这样的东西,其中FirstName,LastName,Phone in one,而Address info在一个单独的表中,然后使用ForeignKey连接它们。这样,如果两个朋友住在同一个地址,我就不会重复任何信息。
我应该使用INNER JOIN查询设置课程吗?
此时我还没有确定框架,所以如果你也可以告诉我:
在CakePHP中,我能够使用INNER JOIN来创建一个类,还是会违反惯例?如果没有,我会更好地使用Laravel,Zend,Yii,Symfony或CodeIgniter等不同的框架吗?
一个人可能有多个地点说一家公司,例如有两个不同的办公室,或者一个朋友,有一个夏季和冬季的家。
答案 0 :(得分:1)
这对我来说是一个可疑的规范化案例。是的,从理论上讲,你可以通过对地址进行规范化来节省一些冗余条目,但我会考虑在做出这个决定之前如何处理系统中的地址。地址是否始终是用户的属性(一对一关系),或者您是否打算实际拥有某种用户可以拥有多个地址的地址管理?在前一种情况下,我可能不会正常化,而在后一种情况下,我肯定会这样做。
这真的可以归结为地址作为一个独立的对象,在您的系统中是否有任何意义,或者地址是否只是用户的一对一属性。
答案 1 :(得分:0)
如果您计划让一个人一次与多个地址相关联,您只需要将地址存储在单独的表中。如果每个人只有一个地址就把它放在主表中。电话簿我记得他们只会将一个人与一个地址联系起来......
话虽这么说,如果你去多个表,你很可能会坚持使用一个类,并执行连接。
答案 2 :(得分:0)
这样,如果两个朋友住在同一个地址,我就不会重复任何信息。
对于可能没问题的“精确”数据,但地址为tend to be "fuzzy"。人们会用不同的方式表达它们,有时会拼错它们 - 如果发生这种情况,你应该使用哪个地址:数据库中已有的地址还是新数据库?你怎么会知道它们实际上是相同的,哪一个拼写错误?最好“隔离”地址,以便任何错误或变化对他们来自的人保持“本地”。
更哲学的说明:如果你这样做,为什么不“规范化”街道,邮政编码,城市,国家甚至(固定电话)电话号码?您可以使用“精确”数据来做到这一点,但对于地址,尝试将此概念推向极端只会使整个系统变得脆弱。
话虽如此,允许一个人拥有多个地址是完全合理的,方法是将地址放入通过FK(地址引用人,而不是相反的方式)连接的单独表中,否则只需将地址保留在同桌。