0

我正在使用 CakePHP 2 和 MySQL 创建一个相对简单的应用程序。

对于Users此应用程序,主要Admin是有权访问管理面板的用户。

然后有CustomersCustomers可以填写注册表。只有在用户Customer批准后Admin,才会为用户创建用户记录,Customer以便客户可以登录。

显然我需要存储UserIDCustomerID,所以我可以将用户记录与Customer记录相关联。

这是否意味着我需要第三张表,其中仅包含UserID并且仅在获得批准CustomerID后才填充?Customer

编辑:只是补充一下,目前,每个“客户”只有 1 个“用户”,所以是 1:1 的关系。

4

1 回答 1

0

如果我正确理解您的问题,您的数据库中已经有两个表:

UsersUserID, Name, AccessRights

CustomersCustomerID, Name, OtherSTuff

现在您要在这些表之间创建关系。这里要问的问题是:单个客户可能存在多少用户,以及有多少客户可能与任何给定用户相关。

我个人猜测一个客户可能有多个员工访问您的数据库,但每个(非管理员)用户只会与一个客户相关联。这将是一个 1:N 的关系:1 个客户有 N 个用户。要相应地更改数据库模型,您只需要CustomerID在表中添加一列Users

如果我的猜测是错误的,并且 1 个用户有 N 个客户:一个用户要访问多个客户,那么UserID您的表中需要一列Customers

您需要第三张表的唯一时间点是当 N 个客户有 M 个用户时,这意味着:当单个用户可以访问多个客户并且单个客户可以被多个用户访问时。

编辑:我完全省略了和强制数据库完整性部分。

MySQL 支持一个FOREIGN KEY子句——至少在与某些存储引擎(例如 InnoDB)一起使用时,我认为 MyISAM 仍然不支持。外键子句允许该列中的值与外部表中的现有值匹配或匹配NULL。如果不需要此行为,则需要将该列声明为NOT NULL.

您可以设置您的用户,以便管理员拥有一个CustomerIDNULL而普通用户拥有该CustomerID集合。但是有一个问题:请确保您不要使用该ON DELETE SET NULL子句,否则删除客户将使相应的用户成为管理员。改为使用ON DELETE CASCASE

于 2013-03-09T17:52:43.490 回答