【问题标题】:BackboneJS: How to cascade Model#destroy?BackboneJS:如何级联模型#destroy?
【发布时间】:2023-03-27 17:01:01
【问题描述】:

我在后端有一个关系数据库(MySQL),在前端有一个很酷的 BackboneJS。我有几个通过外键互连的表(BackboneJS 术语中的模型)。

问题

如何销毁特定模型,以便销毁级联到所有子模型?

示例

考虑一下这个快速模式:

PERSON
id
name

PHONE_NUMBER
id
person_id
number

EMAIL_ADDRESS
id
person_id
email

假设我们有一个人“Jack”存储在 DB 中,其中包含一些电话号码和电子邮件地址。此外,我们为所有 3 个表定义了 BackboneJS 模型/集合,并将数据加载到其中。前端用户决定点击删除 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 中的问题相同

所以对于这个简单的问题似乎没有完美的解决方案。你也面对了吗?你采取了什么方法,为什么它更好?

【问题讨论】:

    标签: javascript mysql backbone.js


    【解决方案1】:

    我遇到了类似的问题,我采用了方法 #2,但有一点不同。

    如果可以,请将Jack 表示为包含phone_numberemail_address 的单个主干模型。您可以将Jack 模型传递给其他主干视图以共享Jack 的模型数据。然后,您可以在 Jack 模型上调用 destroy

    在后端我使用了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
    

    我不确定这是否适合您当前的问题背景,但这与我所做的类似,并且对我有用。

    【讨论】:

    • 感谢您的回复。对于contains 关系,这种方法很好。对于具有单独 BackboneJS 模型的相关实体,问题仍然是如何提醒 BackboneJS 子模型它们在数据库中的相应行已被删除。
    • @craftsman,如果这不是contains(一对多)关系,而是related(多对多)关系,则决定删除相关模型不再是给定的(您可能会从另一个人那里删除共享的电子邮件地址或电话号码)并且将是自定义逻辑,因此您可能会使用 #1 或 #3 与客户端缓存/集合失效。您可以拥有具有contains 关系的单独模型,请参阅github.com/jashkenas/backbone/wiki/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多