sql - 约束自引用外键以限制嵌套(SQL、Sequelize)
问题描述
例如,我正在尝试制作一个包含以下结构的表:
<Comments>
id(PK, int) comment_id(FK, int) body(text)
1 null "This is a comment"
2 1 "This is a nested comment"
3 2 "This is a nested nested comment"
上面的例子代表了使用自引用表的优点——我想在一定程度上消除它。
注释的id: 3
引用comment_id=2
注释,而id=2
引用comment_id=1
。
我想将此嵌套引用限制为单个级别,并能够添加一个特定的约束,该约束检查并建立一个等于第一级嵌套的值。
为了更清楚,id=3
此时的而不是引用comment_id=2
应该引用comment_id=1
and 看起来像这样:
<Comments>
id(PK, int) comment_id(FK, int) body(text)
1 null "This is a comment"
2 1 "This is a nested comment"
3 1 "This is a nested nested comment"
我想让后端在处理这种情况时尽可能不忙,并且只需comment_id=2
在我的创建查询中提供一个引用,我希望它自动指向它id=2
的引用comment_id=1
而不是comment_id=2
除了我在 NodeJS 中使用 Sequelize 并能够在后端路由中限制数据之外,我想了解如何使用 sql(或 sequelize)来实现这一点,以保持数据完整性流线性。
解决方案
您可以通过拥有另一张桌子来做到这一点。如果您的评论引用了某些东西,那么您可以使用该表。否则:
create table comments (
commentId int primary key,
. . .
);
create table commentLines (
commentLineId int primary key,
commentId int references comments(commentId),
comment varchar(255)
);
推荐阅读
- docker - 如何在 Docker 容器中自动重启 golang 应用程序?
- django - 还有另一种方法可以在 django 中生成 api 密钥吗?
- iis - IIS 将数据保存在跨其他服务器共享的应用程序池变量中
- javascript - TypeError : NetworkError 尝试获取资源时
- android - 如何克服Android Webview中的会话超时问题
- python - 在不使用外部库的情况下获取以太网适配器 IPv4 地址
- python - Python:如果 URL 作为第二、第三等列表项传递,则无法从网站获取数据,但适用于第一个列表项和直接 URL 如何解决此问题?
- discord.js - 在 discord.js 中的 message.content.send 中使用 let 变量
- angular - 如何使用管道过滤具有不同参数的数组
- php - 在 Zend 的任意文件夹中创建类和派生类