标签: cascading-deletes

iPhone核心数据:跨多对一关系的级联删除

我有两个A和B类,从A到B有多对一的关系(多个A对象可以引用相同的B).问题是,如果A侧的删除规则是Cascade,则仅在删除最后一个引用A 时才删除B,或者在一次删除关联的A 时删除B. 如果重要的话,关系B侧的删除规则是Nullify.

另外,我在核心数据文档中读到,在某些情况下,Optional标志很重要.但目前尚不清楚他们所说的关系与我的案例有何关系.他们在讨论收容案(B由A拥有),而我的案例是订阅/关联(B与A有关).

我可以简单地在代码中管理删除programmaticaly,但是如果可能的话,我希望允许Core Data做正确的事情.但目前尚不清楚Core Data中是否支持我正在寻找的垃圾收集语义.

有什么建议?

iphone cocoa cocoa-touch core-data cascading-deletes

21
推荐指数
1
解决办法
7068
查看次数

MS SQL"ON DELETE CASCADE"多个外键指向同一个表?

你好,我有一个问题,我需要在指向同一个表的多个外键上级联..

[Insights]
| ID | Title        |
| 1  | Monty Python |
| 2  | Spamalot     | 

[BroaderInsights_Insights]
| broaderinsight_id | insight_id |
| 1                 | 2          |
Run Code Online (Sandbox Code Playgroud)

基本上,当洞察表中的一个或两个记录被删除时,我需要删除该关系.

我试过这个:

 CREATE TABLE broader_insights_insights(id INT NOT NULL IDENTITY(1,1),
   broader_insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE,
   insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE,
   PRIMARY KEY(id))
Go
Run Code Online (Sandbox Code Playgroud)

这导致警告级联"可能导致循环或多个级联路径"

所以我尝试添加一个级联到insight_id,这导致:

"DELETE语句与REFERENCE约束冲突"

有任何想法吗?

谢谢

丹尼尔

sql sql-server constraints foreign-keys cascading-deletes

21
推荐指数
1
解决办法
3万
查看次数

对于N:M关系,MongoDB中级联删除的推荐等价物是什么?

假设以下"模式/关系"设计,使用级联删除操作删除处理删除的推荐做法是什么?

关系模式:

  +---------+                                    +--------+
  | Student |-*--------1-[Enrollment]-1--------*-| Course |
  +---------+                                    +--------+

MongoDB的:

  +---------+                    +--------+
  | Student |-*----------------*-| Course |
  +---------+                    +--------+

考虑到学生的课程招生的这一经典设计,具有学生,反之亦然课程集合似乎使用MongoDB的(即没有为关系/报名表)时是合适的数据模型.但是来自关系世界我应该如何处理删除课程的语义?也就是说,当删除课程时,也应删除所有"注册"记录.也就是说,我应该从每个学生记录的集合中删除该课程.看起来我必须触发2个查询:一个用于删除课程,然后从每个学生的集合中删除它.有没有办法让单个查询执行这种"级联删除",如语义而无需额外的查询?数据模型是否需要更改?

注意:对于所有其他用例,上述数据模型工作正常:

  • 删除学生=>只会删除该学生以及随之删除的相关课程集.
  • 愿意放弃课程=>的学生只需将其从学生课程集中删除即可
  • 添加学生/课程=>只是将其添加到相应的"表格"中.

唯一棘手的事情是处理删除课程.我应该如何处理MongoDB中的这种情况,因为我来自关系背景,我无法弄清楚这一点.

database database-design non-relational-database mongodb cascading-deletes

21
推荐指数
2
解决办法
1万
查看次数

删除时为什么我的GenericForeignKey级联不会?

我正在创建一个自定义评论系统,可以使用contenttypes GenericForeignKey将评论附加到任何模型.

class Comment(models.Model):
    body = models.TextField(verbose_name='Comment')
    user = models.ForeignKey(User)
    parent = models.ForeignKey('self', null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
Run Code Online (Sandbox Code Playgroud)

我的理解是,当附加注释的模型被删除时,删除应该级联并删除注释.

不幸的是,这没有发生,我很难过.是否有任何常见原因可以更改默认删除行为?

django foreign-keys cascading-deletes django-contenttypes generic-foreign-key

20
推荐指数
2
解决办法
4698
查看次数

实体框架:使用CodeFirst设置删除规则

我正在使用EF4 CTP 5,CodeFirst.

请先看我的课程:

public class Guest
{
        [Key]
        public Guid GuestID { get; set; }

        public Language PreferredLanguage { get; set; }
        public Guid? LanguageID { get; set; }
}

public class Language
{
        [Key]
        public Guid LanguageID { get; set; }

        [Required(ErrorMessage = "Enter language name")]
        [StringLength(50, ErrorMessage = "Language name is too long")]
        public string LanguageName { get; set; } // in origine language
}
Run Code Online (Sandbox Code Playgroud)

我的目标是为访客语言关系设置一定的"删除规则".删除语言时,我不想删除相应的guest虚拟机(因此级联删除).相反,我希望客人的LanguageID为"Set NULL".

我希望流利的API在这里支持我.但我找不到任何有用的东西.WillCascadeOnDelete(bool),它不提供我需要的选项.我错过了什么吗?或者这只是在CTP 5中没有实现?

谢谢你的帮助!

cascading-deletes entity-framework-4 entity-framework-ctp5

19
推荐指数
1
解决办法
1万
查看次数

Django on_delete = models.CASCADE在SQL级别没有任何影响

我的models.py文件包含:

class User(models.Model):
    email = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=100)
    create_time = models.DateTimeField(auto_now_add=True)

class Session(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    token = models.CharField(max_length=100, unique=True)
Run Code Online (Sandbox Code Playgroud)

当我命令python manage.py makemigrations然后命令python manage.py sqlmigrate <app_name> <migration_name>我没有看到任何说"ON DELETE = CASCADE"

但是,当我键入时,迁移工作没有失败python manage.py migrate.

现在,如果我转到mysql表(使用SequelPro)并尝试为当前有会话条目的用户删除一行,我会收到以下错误:" 未删除一行.重新加载表格以确保在此期间内容没有改变.检查控制台是否有可能在此表的主键内发生错误! ".

现在,当我转到会话表并删除该用户的会话,然后尝试从用户表中删除用户的行时,它会正确删除.这表明ON DELETE = CASCADE实际上并没有在MySQL级别工作.

我怎么能纠正它?

python mysql django cascade cascading-deletes

19
推荐指数
1
解决办法
5403
查看次数

Django - ManyToManyRelation中的级联删除

使用以下相关模型(一个博​​客条目可以有多个修订版):

class BlogEntryRevision(models.Model):
    revisionNumber = models.IntegerField()
    title = models.CharField(max_length = 120)
    text = models.TextField()
    [...]

class BlogEntry(models.Model):
    revisions = models.ManyToManyField(BlogEntryRevision)
    [...]
Run Code Online (Sandbox Code Playgroud)

如何在删除BlogEntryRevision相应的内容时告诉Django删除所有相关的s BlogEntry?如果删除了"其他"端的对象,则默认似乎是将对象保持为多对多关系.有什么方法可以做到这一点 - 最好不要超越BlogEntry.delete

django many-to-many cascading-deletes

18
推荐指数
2
解决办法
2万
查看次数

弄清楚表格是否在CASCADE上有DELETE

我可以知道数据库是否DELETE ON CASCADE包含查询吗?

mysql database cascading-deletes

17
推荐指数
2
解决办法
7449
查看次数

EF4.1代码优先:如何在依赖实体中禁用没有导航属性的关系的删除级联

假设我有这两个非常基本的实体:

public class ParentEntity
{
   public int Id;
   public virtual ICollection<ChildEntity> Childrens;
}

public class ChildEntity
{
   public int Id;
   public int ParentEntityId; // Foreign Key
   public virtual ParentEntity parent; // [NOTWANTED]
}
Run Code Online (Sandbox Code Playgroud)

出于某些原因,我不希望ChildEntity将引用保留回其父级.我只是希望它保留ParentEntity id,但仅此而已.到目前为止,没问题,我只是删除[NOTWANTED]行,一切都按预期工作.

我的问题是:如何在特定情况下禁用级联删除?

如果我仍然拥有父导航属性,那将很容易:

modelBuilder.Entity<ChildEntity>()
    .HasRequired(c => c.parent)
    .WithMany(p => p.Childrens)
    .WillCascadeOndelete(false)
Run Code Online (Sandbox Code Playgroud)

但是如果没有导航属性,我不知道如何在删除时禁用级联(当然不是全局禁用它,也不是每个表都禁用它,而只是为了关系).

我现在所做的是将外键设置为可以为空的int,以便在删除时禁用级联,但这并不漂亮:

public int? ParentEntityId; // Foreign Key - nullable just to disable cascade on delete
Run Code Online (Sandbox Code Playgroud)

如何才能使用流畅的API?认为它应该是可能的.

c# entity-framework foreign-keys cascading-deletes ef-code-first

16
推荐指数
1
解决办法
1万
查看次数

如何在MySQL工作台中设置级联删除?

在MySQL Workbench中,如何在关系上设置级联删除?

我点击了关系线并点击了属性,但我没有看到任何提及级联删除选项.

mysql sql cascading-deletes

15
推荐指数
1
解决办法
2万
查看次数