我在后端有一个关系数据库(MySQL),在前端有一个很酷的 BackboneJS。我有几个通过外键互连的表(BackboneJS 术语中的模型)。
问题
如何销毁特定模型,以便销毁级联到所有子模型?
例子
考虑这个快速模式:
PERSON
id
name
PHONE_NUMBER
id
person_id
number
EMAIL_ADDRESS
id
person_id
email
假设我们有一个人“Jack”存储在 DB 中,其中包含一些电话号码和电子邮件地址。此外,我们为所有 3 个表定义了 BackboneJS 模型/集合,并将数据加载到其中。前端的用户决定通过单击删除 Jack 的记录。
现在这里有一些方法可以删除 Jack 的所有记录:
方法#1
在所有与 Jack 相关的 PhoneNumbers 和 EmailAddresses 模型上调用“destroy”,然后在 Jack 本身上调用“destroy”。
问题)
- 一项操作需要太多 AJAX 调用。
- 用户将不得不等待很多时间。(更多的家属,更多的时间)
- 删除将是非交易性的。如果用户在此期间关闭浏览器,数据将被损坏。
方法#2
在数据库级别定义外键关系,确保在删除 PERSON 行时级联删除 PHONE_NUMBER 和 EMAIL_ADDRESS。然后在前端“销毁”Jack 的 BackboneJS 模型。
- 受抚养人的 BackboneJS 模型永远不会知道他们在后端的相应记录发生了什么。所以他们会保持原样。
方法#3
在服务器端应用程序“/thoroughly-delete-person”上创建一个 URL(确保删除一个人及其所有依赖项)并从前端调用它,而不是在 Jack 上调用 BackboneJS 的 Model#destroy。
- 与方法#2 相同的问题
所以对于这个简单的问题似乎没有完美的解决方案。你也面对了吗?你采取了什么方法,为什么它更好?