数据库设计了多种用户类型CakePHP

时间:2011-07-18 11:47:55

标签: cakephp-1.3

由于CakePHP限制仅使用User作为进入Auth的道路,我必须更改我的用户类型设置。我已经尝试了一些花哨的代码来覆盖Auth组件中的identify()方法,但这并没有解决问题。我使用Role字段来区分高级用户和标准用户。

我有需要登录并分别执行操作的用户和公司。为什么不使用带有usertype字段的1个用户表?因为他们在表格中有75%的不同字段。

在我的新设置中,我有一个用户表和一个与公司或成员(以前的用户表)的HasOne关系。在User表中,常用字段包括用于登录的电子邮件地址和密码(用于解决Auth强制使用用户)。

看起来像这样:

表用户:

  • ID
  • 名称
  • 电子邮件
  • 密码
  • member_id,NULL(FK)
  • company_id,NUll(FK)
  • role_id(FK)

表成员

  • ID
  • 特定字段x
  • 特定领域y
  • ...

表公司

  • ID
  • 特定字段a
  • 特定领域b
  • ...

丑陋的是,User表总是有Null,因为用户是会员或公司

另一个解决方案可能是将FK指向另一方。因此,user_id将是Member和Companies表中的外键。

表用户:

  • id
  • 名称
  • 电子邮件
  • 密码
  • role_id(FK)

表成员

  • user_id(FK / PK)
  • 特定字段x
  • 特定领域y
  • ...

表公司

  • user_id(FK / PK)
  • 特定字段a
  • 特定领域b
  • ...

我被困住了,没有正常化&数据库设计经验可供选择。或许这两种解决方案都很糟糕,另一种解决方案应该是它。 谢谢!

1 个答案:

答案 0 :(得分:0)

你应该使用groups表来处理用户类型,即一个用户表,其中包含用户名和密码等公共字段以及属于groups表的外键,而一个用于组group表的表可以有不同类型的组normal_user或公司。这样您就可以根据需要处理多种不同的用户类型。即使你为每种类型的用户提供了许多不同的字段,你也可以为它们制作单独的表(如果你只有2-3种用户类型绝对不同),例如company_details user_details,并在其中添加特定于该类型用户的字段,并在组表中包含一个外键和一个类型字段。现在,groups表将从详细信息表中获取details_id。您可以根据组中的类型字段选择特定数据,例如,如果类型是normal_user,则使用user_detail表,如果是公司加入公司表,则为else。但是你必须做一些手工工作,因为蛋糕将无法正确加入群组表。

表:群组         id,details_id(非唯一),类型,名称,other_fields ......

表:用户         id,group_id,username,password,other_fields ...

表company_detail         id,特定领域...... 其他群组表格