0

我有以下问题需要表达。

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

如何在 ERM 中表达这一点?

到目前为止我的想法:

主意

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

实施方案:

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

4

3 回答 3

2

在此处输入图像描述

注意传播到的唯一索引Ak1(备用键)。(SiteID, WorkplaceID)WorkplacePersonWorkplace

--
-- 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);
于 2011-07-29T17:06:14.317 回答
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 列的唯一索引可确保每个工作场所与不同的站点相关联。

于 2011-07-29T13:56:24.690 回答
0

您需要一个中间表 EMPLOYEES,它代表一个人在为雇主工作的工作场所的工作时间。一个人可以是多名雇员,即为多个雇主工作。日间工作/夜间工作,或连续工作。EMPLOYEE 不是 person 实体的同义词,而是 person-at-employer 的代表。

于 2011-07-29T12:29:47.793 回答