日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

16-CoreData之多表关联(存储自定义数据模型)

發(fā)布時(shí)間:2024/9/30 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16-CoreData之多表关联(存储自定义数据模型) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

多表關(guān)聯(lián)

1.1-簡介

  • 什么是多表關(guān)聯(lián)

    • 在處理數(shù)據(jù)庫的關(guān)系中,無非只有三種關(guān)系

    • 一對一:一個(gè)老師只能在一個(gè)教室上課,不可能同時(shí)在兩個(gè)教室上課

    • 一對多:一個(gè)教室可以有多個(gè)學(xué)生,但一個(gè)學(xué)生只能在一個(gè)教室

    • 多對多:一門學(xué)科可以有多個(gè)學(xué)生,一個(gè)學(xué)生也可以學(xué)習(xí)多門學(xué)科

    • 本小節(jié)我們主要學(xué)習(xí)一對多的關(guān)聯(lián),通過學(xué)習(xí)一對多來舉一反三其他兩種關(guān)系

    1.2-如果在模型文件中對兩個(gè)實(shí)體之間進(jìn)行關(guān)聯(lián)?

    • 給教室關(guān)聯(lián)學(xué)生

  • 給學(xué)生關(guān)聯(lián)教室

  • Type:

    • toOne:只指向一個(gè)對象(可用于某一個(gè)屬性是自定義數(shù)據(jù)模型)
    • toMany:可以包含多個(gè)對象(一般是集合類型,可用于某一個(gè)屬性是數(shù)組,數(shù)組中是自定義模型)
  • 添加數(shù)據(jù)

    ClassRoom *room = [kManagedObjectContext getManagedObjectModel:@"ClassRoom"];room.roomNumber = @"1302";Student *student = [kManagedObjectContext getManagedObjectModel:@"Student"]; student.name = @"李四";[room addStudentObject:student]; // student.classRoom = room;[kManagedObjectContext save];
  • 注意上面注釋的那行代碼,如果不寫的話只是把學(xué)生加到了這間教室,但是并沒有指定這個(gè)學(xué)生屬于哪間教室,所以學(xué)生的classRoom屬性在數(shù)據(jù)庫中為null

    • 很顯然這是不符合常規(guī)邏輯了,既然學(xué)生與教室已經(jīng)進(jìn)行了一對多的關(guān)聯(lián),那么把學(xué)生加到教室自然就應(yīng)該知道這個(gè)學(xué)生屬于哪間教室

    • 那么如何不寫student.classRoom = room也能讓學(xué)生的數(shù)據(jù)庫表格中的classRoom有對應(yīng)的值呢?

    • 我們需要在模型文件的關(guān)聯(lián)中設(shè)置反轉(zhuǎn)屬性

1.3-刪除關(guān)聯(lián)

1.3.1-簡介

  • 什么是刪除關(guān)聯(lián)

    • 當(dāng)兩個(gè)表進(jìn)行關(guān)聯(lián)之后,刪除其中一個(gè)表的數(shù)據(jù)對另一個(gè)表產(chǎn)生的影響

1.3.2-如何設(shè)置刪除關(guān)聯(lián)

  • 點(diǎn)擊實(shí)體對應(yīng)的關(guān)系實(shí)體,右方有一個(gè)Delete Rule選項(xiàng)

  • 這里以上圖中設(shè)置學(xué)生的關(guān)聯(lián)實(shí)體教室為例

1.3.3-Nullify(為空)

  • 如果設(shè)置教室相對于學(xué)生的刪除關(guān)聯(lián)為Nullify,則表示:如果刪除教室,學(xué)生并不會(huì)刪除,只是學(xué)生的教室為null

1.3.4-Cascade(級聯(lián))

  • 如果設(shè)置教室相對于學(xué)生的刪除關(guān)聯(lián)為Cascade,則表示:如果刪除學(xué)生,則學(xué)生對應(yīng)的教室也會(huì)被刪除

1.3.5-Deny(拒絕)

  • 如果設(shè)置教室相對于學(xué)生的刪除關(guān)聯(lián)為Deny,則表示:只要教室存在,就無法刪除學(xué)生,要想刪除學(xué)生,就要先刪除教室

1.4-刪除關(guān)聯(lián)總結(jié)

  • 模擬真實(shí)需求:

    • 刪除學(xué)生,對應(yīng)的教室不會(huì)被刪除
    • 只要?jiǎng)h除教室,教室里的學(xué)生就刪除
    • 我該如何設(shè)置
  • 設(shè)置教室實(shí)體中的刪除關(guān)聯(lián)為Cascade(級聯(lián)),設(shè)置學(xué)生實(shí)體中刪除關(guān)系為no Action(表示刪除學(xué)生不會(huì)對教室有影響)

與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的16-CoreData之多表关联(存储自定义数据模型)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。