【问题标题】:Foreign key and the n-to-n relation外键和 n 对 n 关系
【发布时间】:2010-11-09 23:29:36
【问题描述】:

假设我有这些 sql 表:
a)
b) 客户
c) borrow_history (book_id, customer_id ...)

我可以从 borrow_history 定义两个引用外键(在删除级联时),引用 bookcustomer,所以:

  • book相关的borrow_history记录将在书被删除时被删除。
  • customer相关的borrow_history记录将在客户被删除时被删除。

但是我如何定义外键,当他没有 borrow_history 连接时,customer 将被删除,因此删除 book 也可以递归删除客户

有可能吗,还是我必须使用触发器?

【问题讨论】:

  • 当一本书(及其借贷历史)存在时,客户可以预先存在,但当该书(及其借贷历史)不复存在时,客户也不再存在?这听起来很奇怪。
  • 目标是创建客户并同时创建第一个借用历史,换句话说,客户不能预先存在,预期不变是不能有客户任何与某些借阅历史无关的时间。

标签: sql foreign-keys


【解决方案1】:

你必须为此使用触发器。

无论如何,只有在他没有任何书籍的情况下才应该删除用户 - 上次活动日期等其他因素很重要。

我会编写一个脚本(并使用 CRON 运行它)来删除没有任何借用历史记录且距离他们上次操作超过 N 天的用户。

还有一个提示——借用历史指点书中的外键应该设置为 ON DELETE RESTRICT。如果书被借(或被借),则不应删除

【讨论】:

  • 谢谢,顺便说一句,我不是在经营书店 :),这只是简单的 n 对 n 关系示例,实际上,我真的需要递归删除所有不是的数据不再由关系连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2011-11-08
  • 2014-11-08
  • 2012-06-08
  • 1970-01-01
相关资源
最近更新 更多