我正在使用CakePHP 2和MySQL创建一个相对简单的应用程序。
此应用程序有Users
,主要是Admin
有权访问管理面板的用户。
然后有Customers
。 Customers
可以填写注册表。只有在Customer
用户批准Admin
后,才会为Customer
创建用户记录,以便客户可以登录。
显然,我需要将UserID
存储在CustomerID
,因此我可以将用户记录与Customer
记录相关联。
这是否意味着我需要第三个表格,其中仅包含UserID
和CustomerID
,只有在Customer
获得批准后才会填充该表格。
编辑:只是补充一下,目前,每个“客户”只获得1个“用户”,因此是1:1的关系。
答案 0 :(得分:0)
如果我理解你的问题,你的数据库中已经有两个表了:
表Users
与UserID, Name, AccessRights
表Customers
与CustomerID, Name, OtherSTuff
现在您要在这些表之间创建关系。这里要问的问题是:单个客户可能存在多少用户,以及有多少客户可能与任何给定用户有关。
我个人猜测,单个客户可能有多个员工访问您的数据库,但每个(非管理员)用户只能与一个客户关联。这将是1:N的关系:1个客户有N个用户。要相应地更改数据库模型,只需在CustomerID
表中添加Users
列。
如果我的猜测是错误的,并且有1个用户拥有N个客户:一个用户要访问多个客户,那么您需要UserID
表中的Customers
列。
当您需要第三个表时,唯一的时间点是N个客户拥有M个用户,这意味着:当一个用户可以访问多个客户时和多个用户可以访问单个客户。
编辑:我完全省略了并强制执行数据库完整性部分。
MySQL支持FOREIGN KEY
子句 - 至少在与某些存储引擎(如InnoDB)一起使用时,我认为MyISAM仍然没有。 foreign key子句允许该列中的值匹配外表中的现有值或NULL
。如果不需要此行为,则需要将列声明为NOT NULL
。
您可以设置用户,以便管理员拥有CustomerID
NULL
而普通用户设置CustomerID
。但有一个问题:确保您不使用ON DELETE SET NULL
子句,否则删除客户将使相应的用户成为管理员。请改用ON DELETE CASCASE
。