1 つの主キーと 1 つの外部キーを持つ従来の Employee - Employer テーブルを作成しました。外部キーはプライマリを参照するため、自己参照テーブルです。
CREATE TABLE Worker
(
OIB NUMERIC(2,0),
Name NVARCHAR(10),
Surname NVARCHAR(20),
DateOfEmployment DATETIME2 NOT NULL,
Adress NVARCHAR(20),
City NVARCHAR(10),
SUPERIOR NUMERIC(2,0) UNIQUE,
Constraint PK_Worker PRIMARY KEY(OIB),
CONSTRAINT FK_Worker FOREIGN KEY (Superior) REFERENCES Worker(OIB)
);
すべての従業員のポイントを保持する必要がある 2 番目のテーブルは、次のように作成されます。
CREATE TABLE Point
(
OIB_Worker NUMERIC(2,0) NOT NULL,
OIB_Superior NUMERIC(2,0) NOT NULL,
Pt_To_Worker tinyint,
Pt_To_Superior tinyint,
Month_ INT NOT NULL,
Year_ INT NOT NULL,
CONSTRAINT FK_Point_Worker FOREIGN KEY (OIB_Worker) References Worker(OIB),
CONSTRAINT FK_Point_Worker_2 FOREIGN KEY (OIB_Superior) References Worker(Superior),
CONSTRAINT PK_Point PRIMARY KEY(OIB_Worker,OIB_Superior,Month_,Year_)
);
すべての従業員の月ごとの成績を保存できるようにする必要があります。つまり、Worker.OIB 用と Worker.Superior 用の 2 つの外部キーがあります。また、列 Point.OIB_Worker、Point.OIB_superior、Point.Month_、および Point.Year_ で構成される複合主キーがあります。キーは、月に 1 回以上の成績の入力を無効にする必要があるため、複合型です。
私の質問は:
ポイントからワーカーへの外部キーを作成して、上司が複数の従業員を割り当てられるようにする方法は?
よく見ると、私の実装は機能しますが、マネージャーごとに従業員を 1 人しか持てません。これは、外部キーが他のテーブルの主列または一意の列を参照する必要があるためです。そして、私の Worker.Superior は UNIQUE であるため、一意の値のみを持つことができます (繰り返しはありません)。
この例は、新しいデータベースを作成する際の一般的な問題であるため、多くの人が興味深いと思うと思います。