【问题标题】:Constraints and keys in sqlite database modelsqlite 数据库模型中的约束和键
【发布时间】:2013-06-04 22:12:09
【问题描述】:

我正在使用 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")
);

也许问题归结为使用foreign key(在它自己的表中是primary key)作为combination unique key 的一部分。在我的示例中,_employer_.name 是_employer_ 表中的primary key,是_jobs_ 表(_jobs_.emp_name)中Foreign Key 的引用,最后这个emps_name 字段是@ 组合的一部分_jobs_ 表中的 987654337@。理论上,这样做有什么问题吗?

【问题讨论】:

  • 错误:外键定义中的未知列“组织”
  • 在删除损坏的外键引用后,在 3.7.9 版中对我来说可以正常工作。
  • 抱歉,原始架构中的错误。已更正。仍然遇到同样的问题

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


【解决方案1】:

您的架构(编辑前和编辑后)在 SQLite 3.7.9 和 3.7.16.2 上对我来说都没有错误地构建。在pragma foreign_keys=on; 之后,外键约束按设计工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2012-10-04
    • 2014-01-17
    • 2017-03-09
    相关资源
    最近更新 更多