0

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_namejob_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_

4

1 に答える 1

0

SQLite 3.7.9 と 3.7.16.2 では、両方のスキーマ (編集前と編集後) がエラーなしでビルドされます。の後pragma foreign_keys=on;、外部キー制約は設計どおりに機能します。

私があなたの立場なら、Navicat の代わりに SQLite コマンド ラインを使用してテストします。ここには SQLite の問題は見られません。

于 2013-06-05T13:15:25.560 に答える