0

假设我正在制作电话簿。

班级朋友

  • ->名字
  • ->姓氏
  • ->城市
  • ->状态
  • ->邮编
  • - >电话

据我了解,对我来说,最好的做法是在我的数据库中有两个表,尽管对于这样的事情,FirstName、LastName、Phone 在一个单独的表中,地址信息在一个单独的表中,然后使用 ForeignKey 连接它们。这样,如果两个朋友住在同一个地址,我就不会重复任何信息。

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

我目前还没有确定一个框架,所以如果你也可以告诉我:

在 CakePHP 中,我可以使用 INNER JOIN 来创建一个类还是违反约定?如果不是,我会更好地使用 Laravel、Zend、Yii、Symfony 或 CodeIgniter 等不同的框架吗?

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

4

3 回答 3

1

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

这实际上归结为地址作为一个支持对象是否在您的系统中具有任何意义,或者地址是否只是用户的一对一属性。

于 2013-02-19T19:09:47.007 回答
0

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

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

于 2013-02-19T19:07:54.837 回答
0

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

对于“精确”的数据可能很好,但地址往往是“模糊的”。人们会以不同的方式表达它们,有时拼写错误——如果发生这种情况,你应该使用哪个地址:数据库中已经存在的地址还是新地址?你怎么知道它们实际上是一样的,哪一个拼错了?最好“隔离”地址,这样任何错误或变化对于它们的来源人来说都是“本地的”。

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

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

于 2013-02-19T20:45:53.337 回答