如果我正确理解您的问题,您的数据库中已经有两个表:
表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 仍然不支持。外键子句允许该列中的值与外部表中的现有值匹配或匹配NULL
。如果不需要此行为,则需要将该列声明为NOT NULL
.
您可以设置您的用户,以便管理员拥有一个CustomerID
,NULL
而普通用户拥有该CustomerID
集合。但是有一个问题:请确保您不要使用该ON DELETE SET NULL
子句,否则删除客户将使相应的用户成为管理员。改为使用ON DELETE CASCASE
。