我在后端有一个关系数据库(MySQL),在前端有一个很酷的BackboneJS。我有几个通过外键互连的表(BackboneJS行话中的模型)。
问题
如何销毁特定模型,以使销毁级联到所有子模型?
例
考虑以下快速模式:
PERSON
id
name
PHONE_NUMBER
id
person_id
number
EMAIL_ADDRESS
id
person_id
email
考虑我们在数据库中存储了一个“杰克”人,其中包含一些电话号码和电子邮件地址。另外,我们为所有3个表定义了BackboneJS模型/集合,并将数据加载到其中。前端的用户决定通过单击删除Jack的记录。
现在,有一些删除杰克所有记录的方法:
方法#1
在与Jack相关的所有电话号码和电子邮件地址模型上调用“ destroy”,然后在Jack本身上调用“ destroy”。
问题)
太多的AJAX要求执行一项操作。
用户将不得不等待很多时间。 (更多的家属,更多的时间)
删除将是非事务性的。如果用户在此期间关闭浏览器,则数据将被破坏。
方法#2
在数据库级别定义外键关系,以确保在删除PERSON行时,级联删除PHONE_NUMBER和EMAIL_ADDRESSes。然后在前端对Jack进行“销毁” BackboneJS模型。
用于依赖项的BackboneJS模型永远不会知道后端中其对应记录发生了什么。因此它们将保持原样。
方法#3
在服务器端应用程序“ / thoroughly-delete-person”上创建一个URL(以确保删除一个具有其所有依赖关系的人),然后从前端调用它,而不是在Jack上调用BackboneJS的Model#destroy。
与方法2相同的问题
因此,似乎没有完美的解决方案来解决这个简单的问题。你也面对吗?您采取了什么方法,为什么更好?
最佳答案
我有一个类似的问题,我采用了方法2,但有一个区别。
如果可以,请将Jack
表示为包含phone_number
和email_address
的单个主干模型。您可以将Jack
模型传递到其他Backbone视图以共享Jack
的模型数据。然后可以在destroy
模型上调用Jack
。
在后端,我使用了on delete cascade
,因此我可以进行查询:delete from PERSON where id = JACK_ID;
我不知道mysql的语法,但类似:
PERSON
id
name
PHONE_NUMBER
id references PERSON (id) on delete cascade
person_id
number
EMAIL_ADDRESS
id references PERSON (id) on delete cascade
person_id
email
我不确定这将如何适合您当前的问题背景,但这与我所做的类似,并且对我有用。