日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

多表關聯

1.1-簡介

  • 什么是多表關聯

    • 在處理數據庫的關系中,無非只有三種關系

    • 一對一:一個老師只能在一個教室上課,不可能同時在兩個教室上課

    • 一對多:一個教室可以有多個學生,但一個學生只能在一個教室

    • 多對多:一門學科可以有多個學生,一個學生也可以學習多門學科

    • 本小節我們主要學習一對多的關聯,通過學習一對多來舉一反三其他兩種關系

    1.2-如果在模型文件中對兩個實體之間進行關聯?

    • 給教室關聯學生

  • 給學生關聯教室

  • Type:

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

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

    • 很顯然這是不符合常規邏輯了,既然學生與教室已經進行了一對多的關聯,那么把學生加到教室自然就應該知道這個學生屬于哪間教室

    • 那么如何不寫student.classRoom = room也能讓學生的數據庫表格中的classRoom有對應的值呢?

    • 我們需要在模型文件的關聯中設置反轉屬性

1.3-刪除關聯

1.3.1-簡介

  • 什么是刪除關聯

    • 當兩個表進行關聯之后,刪除其中一個表的數據對另一個表產生的影響

1.3.2-如何設置刪除關聯

  • 點擊實體對應的關系實體,右方有一個Delete Rule選項

  • 這里以上圖中設置學生的關聯實體教室為例

1.3.3-Nullify(為空)

  • 如果設置教室相對于學生的刪除關聯為Nullify,則表示:如果刪除教室,學生并不會刪除,只是學生的教室為null

1.3.4-Cascade(級聯)

  • 如果設置教室相對于學生的刪除關聯為Cascade,則表示:如果刪除學生,則學生對應的教室也會被刪除

1.3.5-Deny(拒絕)

  • 如果設置教室相對于學生的刪除關聯為Deny,則表示:只要教室存在,就無法刪除學生,要想刪除學生,就要先刪除教室

1.4-刪除關聯總結

  • 模擬真實需求:

    • 刪除學生,對應的教室不會被刪除
    • 只要刪除教室,教室里的學生就刪除
    • 我該如何設置
  • 設置教室實體中的刪除關聯為Cascade(級聯),設置學生實體中刪除關系為no Action(表示刪除學生不會對教室有影響)

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。