数据库设计 - 实体关系模型

时间:2011-07-29 12:22:14

标签: database-design entity-relationship-model

我有以下需要表达的问题。

有人,工作场所和场所。每个人都可以分配到多个工作场所。每个工作场所可以有多个人。每个工作场所只有一个站点。到现在为止还挺好。但我的问题是,每个人在特定网站只有一个工作场所。

我如何在企业风险管理中表达这一点?

到目前为止我的想法:

idea

我无法用这种方法表达“一个人在特定地点只有一个工作场所”的问题。

实施解决方案:

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列上有一个唯一的索引。回到起点......

3 个答案:

答案 0 :(得分:2)

enter image description here

注意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在为雇主工作的工地上的工作。一个人可以是许多雇员,即为一个以上的雇主工作。日间工作/夜间工作,或连续工作。员工不是个人实体的同义词,而是代表雇主的人。