实现此数据库的最佳方法是什么?

时间:2011-08-07 08:06:32

标签: database zend-framework

我必须实现一个具有不同类型用户的系统,我想以这种方式实现它:

  • 仅包含ID,电子邮件和密码的用户表。
  • 两个不同的表以1:1的关系与用户表相关联。每个表都定义了每种用户的特定属性。

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

如果我以这种方式意识到,我如何处理Zend Framework中的表?

2 个答案:

答案 0 :(得分:1)

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

以下是一些相关链接:
http://www.sqlmag.com/article/data-modeling/implementing-supertypes-and-subtypes
下一个关于陷阱和(错误)使用子类型的问题 http://www.ocgworld.com/doc/OCG_Subtyping_Techniques.pdf

总的来说,从务实的角度来看,我非常不愿意遵循您的选择,并且通常选择创建一个包含所有列的表。在大多数情况下,应用程序需要在许多地方显示某些列表中的所有用户以及特定类型的特定列(如果不适用于该类型,则为空)。它很快导致非直接的查询和各种额外的代码来处理不同的表,它们不值得“在概念上正确”。

我仍然将子类型拆分为不同表的两个原因是,如果子类型如此真实地不同,将它们放在一个表中并且如果行数如此巨大以至于“将所有列放在一个表中时,不需要的'列实际上开始重要

答案 1 :(得分:0)

在php端,您可以使用Doctrine 2 ORM。它很容易与zf集成,您可以轻松地将这个表结构实现为您的学说映射中的继承。