微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解决与PostgreSQL的循环外键关系

如何解决解决与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

这是我概念化的架构:

enter image description here

这里的想法是用户拥有文档和文件夹,并且这些文档可以可选分类文件夹中。我需要一个约束来确保文档只被分类到拥有该文档的同一用户所拥有的文件夹中(即 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 举报,一经查实,本站将立刻删除。