sqlite数据库模型中的约束和键

时间:2013-06-04 22:12:09

标签: sqlite foreign-keys constraints primary-key composite-primary-key

我正在使用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的组合 )_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_.nameprimary key表中的_employer_Foreign Key表(_jobs_)中_jobs_.emp_name的引用,以及最后,此emps_name字段是unique key表中_jobs_组合的一部分。从理论上讲,这样做有什么问题吗?

1 个答案:

答案 0 :(得分:0)

在SQLite 3.7.9和3.7.16.2上,我的两个模式(在编辑之前和编辑之后)构建都没有错误。在pragma foreign_keys=on;之后,外键约束按设计工作。

如果我在你的鞋子里,我会使用SQLite命令行而不是Navicat进行测试。我在这里没有看到SQLite问题。