如何解决解决与PostgreSQL的循环外键关系
用户表:
Id Name
1 Alice
2 Bob
3 Charlie
文件夹表:
Id Name User
1 Invoices 2
2 Contracts 3
3 Receipts 3
文档表:
Id Name User Folder
1 Birth Certificate 1 null
2 Fax Machine Receipt 3 3
3 Work NDA 3 2
4 Laptop Invoice 2 1
5 Job Application 2 null
这是我概念化的架构:
这里的想法是用户拥有文档和文件夹,并且这些文档可以可选被分类到文件夹中。我需要一个约束来确保文档只被分类到拥有该文档的同一用户所拥有的文件夹中(即 DOCUMENT(user) = FOLDER(user)),或者一种规范化架构以防止出现以下情况的巧妙方法哪个文档的用户与文件夹的用户不匹配。
解决方法
您可以将 ("user","folder")
设为 "folder"
中的键并在 "document"
中引用它。
CREATE TABLE "user"
("id" serial,PRIMARY KEY ("id"));
CREATE TABLE "folder"
("id" serial,"user" integer
NOT NULL,PRIMARY KEY ("id"),UNIQUE ("id","user"),FOREIGN KEY ("user")
REFERENCES "user"
("id"));
CREATE TABLE "document"
("id" serial,"folder" integer,FOREIGN KEY ("user")
REFERENCES "user"
("id"),FOREIGN KEY ("folder","user")
REFERENCES "folder"
("id","user"));
另一种选择是始终为每个用户设置一个默认文件夹,然后只需引用 "folder"
即可处理所有文件夹。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。