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_nameemps_nameunique key_jobs_