Navicat のモデリング ツールを使用して、単純な Sqlite データベースをセットアップしています。セットアップは次のとおりです。
Table 1: _employer_
col1: name (PK)
-----------
Mcdonalds |
NHS London |
Police |
-----------
Table 2: _jobs_
col1: job_title
col2: emp_name (FK - referencing _employer_.name)
col3: job_id (PK - automatically generated)
----------------------------
Mcdonalds | Cleaner | 345 |
McDonalds | Kitchens | 782 |
Police | Kitchens | 999 |
NHS London | Nurse | 123 |
NHS London | Doctor | 126 |
NHS London | Cleaner | 112 |
----------------------------
追加したい最後の制約は、テーブル内の (emp_name
とjob_title
)の組み合わせが一意であることです。たとえば、2 つのエントリ_jobs_
を持つことはできません。NHS London | cleaner
この制約を追加すると、Navicatは現在の制約ではカーディナリティを実現できないと文句を言います。この設定の問題点は何ですか? 参考までに、このモデルによって生成された SQL スキーマを次に示します。
CREATE TABLE "_employer_" (
"name" TEXT NOT NULL,
PRIMARY KEY ("name")
);
CREATE TABLE "_jobs_" (
"job_title" TEXT NOT NULL,
"emp_name" TEXT NOT NULL,
"job_id" INTEGER NOT NULL,
PRIMARY KEY ("job_id") ,
CONSTRAINT "fk__jobs___employer__1" FOREIGN KEY ("emp_name") REFERENCES "_employer_" ("name"),
CONSTRAINT "constrain_job" UNIQUE ("emp_name", "job_title")
);
おそらく、問題はforeign key
(それprimary key
自体のテーブルにある) を の一部として使用することに要約されcombination unique key
ます。私の例_employer_.name
では、テーブルprimary key
内の 、テーブル内_employer_
の a の参照( ) であり、最後に、このフィールドはテーブル内の組み合わせの一部です。理論的には、これを行うことに問題はありますか?Foreign Key
_jobs_
_jobs_.emp_name
emps_name
unique key
_jobs_