关系数据库外键约束在实践中的使用

发布于 2024-09-28 21:37:33 字数 388 浏览 5 评论 0原文

因此,您有一个关系数据库,并定义了一些外键以保证引用完整性。但现在,利用它们的更好方法是什么?假设我们要删除一个表中具有其他表外键的行。

  1. 将它们用作垃圾收集器 - 将所有约束设置为级联。因此,在您的应用程序中,您首先检查目标行是否有任何“子行”,如果不希望同时删除相关行,则向用户提供中止删除操作的选项。 p>

  2. 将它们用作实际的约束 - 在您的应用程序中,只需尝试删除目标行。如果操作失败,然后检查它是否有子项并将选项呈现给用户;如果用户想要继续操作,请先手动删除相关行。

第二个选项使得删除循环引用变得相当困难 - 您必须将外键设置为空,然后才能删除任何内容。

So you have a relational database and you define some foreign keys for reference integrity. But now, what's the better way to leverage them? Assume we are going to delete a row in a table with foreign keys to other tables.

  1. Use them as a garbage collector - Set all constraints to cascade. So in your application, you first check if the target row has any "children" and present the user the option to abort the delete operation if it is undesirable to have the dependent rows deleted as well.

  2. Use them as actual constraints - In your application, just attempt to delete the target row. If the operation failed, then check if it has children and present the options to the user; If the user wants to proceed with the operation, manually delete the depending rows first.

The second option makes deleting circular references rather arduous - You have to set the foreign keys to null before you can even delete anything.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱桃奶球 2024-10-05 21:37:33

有 2 种典型的外键场景:

  • 关联:链接 2 个可以独立存在的实体
  • 组合:将子实体链接到其父实体(子实体是否在没有父实体的情况下存在,例如:订单和订单项)

I' d 仅在组合的情况下进行级联,并单独处理每个关联情况。

There are 2 typical foreign key scenarios:

  • Association: link 2 entities that can exist on their own
  • Composition: link a child entity to its parent entity (the child entity does it exist without a parent, for instance: order and order item)

I'd cascade only in the case of composition and treat each association case individually.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文