0

表現する必要がある次の問題があります。

人、職場、現場があります。1 人を複数の職場に割り当てることができます。各職場には複数の人がいる可能性があります。各職場には、サイトが 1 つだけあります。ここまでは順調ですね。しかし、私の問題は、各人が特定の場所に 1 つの職場しか持っていないことです。

これを ERM でどのように表現できますか?

これまでの私の考え:

考え

このアプローチでは、「1 人の職場は特定の場所に 1 つしかない」という問題を表現することはできません。

実装ソリューション:

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 列に一意のインデックスがあるため、1 つの職場を 2 人の異なる人に割り当てることはできません。最初に戻る...

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

ヒントは質問にあると思います。

あなたは、各職場には 1 つのサイトがあると言います。したがって、関係は次のようになります。

多くの人は多くの職場を持っています

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 列の一意のインデックスにより、各ワークプレースが異なるサイトに関連付けられます。

于 2011-07-29T13:56:24.690 に答える
0

雇用主のために働く現場での PERSON のスティントを表す中間テーブル EMPLOYEES が必要です。1 人が複数の従業員になることができます。つまり、複数の雇用主の下で働くことができます。日勤・夜勤、または連続勤務。EMPLOYEE は person エンティティのシノニムではありませんが、person-at-employer の表現です。

于 2011-07-29T12:29:47.793 に答える