2011-08-07 88 views
0

最好的办法我要实现与不同类型的用户的系统,我想实现它以这样的方式什么是实现这个数据库

  • 只有ID,电子邮件地址和密码的用户表。
  • 两个不同的表与用户表以1对1的关系关联。每个表格定义每种用户的特定属性。

这是实现它的最好方法吗?我应该使用InnoDB存储引擎?

如果我这样认识它,我该如何处理Zend Framework中的表格?

回答

1

我不能回答你的问题的第二部分,但你描述的模式在数据模型中被称为超级和子类型。如果这是正确的选择,在不了解更多关于这些用户类型之间的差异以及它们将如何在应用程序中使用的情况下是无法回答的。将逻辑超级/子类型转换为物理表格有不同的方法。

下面是一些相关链接:
http://www.sqlmag.com/article/data-modeling/implementing-supertypes-and-subtypes
和下一个有关缺陷和(MIS)使用亚型
http://www.ocgworld.com/doc/OCG_Subtyping_Techniques.pdf

的一般的我,从实际的观点来看,非常不情愿按照您的选择,最常选择创建一个包含所有列的表格。在大多数情况下,应用程序需要在某些列表中显示具有特定类型的特定列的所有用户的许多位置(如果不适用于该类型,则为空)。它很快导致了非直接的查询和各种额外的代码来处理不同的表,它们不值得在“概念上正确”。

我仍然将子类型拆分为不同表格的两个原因是,如果子类型如此真实的不同,以至于在一张表格中放置这些子类型并不合逻辑,并且行数太大以至于'不需要'的列,当把它放在一张桌子上实际上开始重要

+0

谢谢你的回答。如果我对性能不感兴趣,但只有在将来可以轻松扩大项目的可能性?这是最好的解决方案,还是选择超级和子类型的数据模型是一样的? –

+0

我的建议:如果你不能提出一个很好的理由,你不能让一个表中所有列的所有用户都不会分成多个表 – Eddy

+0

嗯,我不喜欢这个选项,但是您的体验在未来可以轻松扩展吗?我如何定义不同类型的用户?用ENUM列?我真的很感谢你的答案。 PS:你看起来很专业。我可以有你的Skype ID吗? –

0

在php方面,你可以使用Doctrine 2 ORM。很容易与zf集成,并且您可以在您的原则映射中轻松地将此表结构实现为继承。

相关问题