我正在使用 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
)的组合_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")
);
也许问题归结为使用 a foreign key
(primary key
在它自己的表中是 a )作为 a 的一部分combination unique key
。在我的示例中_employer_.name
是表primary key
中的 ,_employer_
表中的 a 的引用Foreign Key
( _jobs_
) _jobs_.emp_name
,最后这个emps_name
字段是表中组合unique key
的一部分_jobs_
。从理论上讲,这样做有什么问题吗?