我遇到以下问题:客户可以拥有两种类型的资源:服务器和域。服务器可以服务多个域,域可以分配给多个服务器,但客户有一组固定的服务器和域分配给他。客户可以直接编辑域服务器映射表。如何防止客户分配不属于他的服务器,换句话说,如何确保域 - 服务器映射中插入的域和服务器具有相同的客户主键?
答案 0 :(得分:0)
根据我的拙见,根据您的架构,您应该为https://
和Customer/Servers
添加多列FK
Customer/Domains
答案 1 :(得分:0)
没有必要添加太多冗余(并且为此危险)外键来解决您的问题。使用标准化模式就足够了,例如:
create table Customers
(
customer_id int primary key
);
create table Domains
(
domain_id int primary key,
customer_id int references Customers
);
create table Servers
(
server_id int primary key,
customer_id int references Customers
);
create table Domain_Server_Mapping
(
domain_id int references Domains,
server_id int references Servers,
primary key(domain_id, server_id)
);
然后,您可以添加一个触发器,阻止使用属于不同客户的服务器和域插入或更新表Domain_Server_Mapping
,以及如果修改的服务器和域属于当前内容,则检查应用程序内部顾客。