我有以下需要表达的问题。
有人,工作场所和场所。每个人都可以分配到多个工作场所。每个工作场所可以有多个人。每个工作场所只有一个站点。到现在为止还挺好。但我的问题是,每个人在特定网站只有一个工作场所。
我如何在企业风险管理中表达这一点?
到目前为止我的想法:
我无法用这种方法表达“一个人在特定地点只有一个工作场所”的问题。
实施解决方案:
Table Person with Prs_ID (PK)
Table Site with Site_ID (PK)
Table Workplace with Plc_ID (PK)
Table Person_Site with Prs_Site_PrsID (PK, FK), Prs_Site_SiteID (PK, FK), Prs_Site_PlcID (FK)
Unique Index on Prs_Site_PlcID
我认为这应该可以解决问题。 现在我如何在ERM中表达这一点?
修改
我认为它可以解决问题,但事实并非如此。有了这个,我不能将一个工作区分配给两个不同的人,因为Prs_Site_PlcID列上有一个唯一的索引。回到起点......
答案 0 :(得分:2)
注意Ak1
上传播到(SiteID, WorkplaceID)
的唯一索引Workplace
(备用密钥)PersonWorkplace
。
--
-- PostgreSQL
--
create table Site (SiteId integer not null);
create table Person (PersonId integer not null);
create table Workplace (WorkplaceID integer not null, SiteID integer not null);
create table PersonWorkplace
(PersonID integer not null, SiteID integer not null, WorkplaceID integer not null);
alter table Site add constraint pk_Sit primary key (SiteID);
alter table Person add constraint pk_Prs primary key (PersonID);
alter table Workplace
add constraint pk_Wpl primary key (WorkplaceID)
, add constraint fk1_Wpl foreign key (SiteId) references Site (SiteId)
, add constraint ak1_Wpl unique (SiteID, WorkplaceID);
alter table PersonWorkplace
add constraint pk_PrsWpl primary key (PersonId, SiteID)
, add constraint fk1_PrsWpl foreign key (PersonId) references Person (PersonID)
, add constraint fk2_PrsWpl foreign key (SiteID, WorkplaceID) references Workplace (SiteID, WorkplaceID);
答案 1 :(得分:1)
我认为线索就在问题中。
你说每个工作场所都有一个网站 - 因此关系是:
许多人有很多工作场所
一个工作场所有一个网站;
实施建议:
Person table
-----------
person_id primary key
.....
Workplace table
--------------
workplace_id primary_key
site_id (unique index)
person_workplace table
-------------------
person_id
workplace_id
site table
--------------
site_id primary key
工作区表中site_id列的唯一索引可确保每个工作区与不同的站点相关联。
答案 2 :(得分:0)
你需要一个中间表EMPLOYEES,代表PERSON在为雇主工作的工地上的工作。一个人可以是许多雇员,即为一个以上的雇主工作。日间工作/夜间工作,或连续工作。员工不是个人实体的同义词,而是代表雇主的人。