16-CoreData之多表关联(存储自定义数据模型)
生活随笔
收集整理的這篇文章主要介紹了
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(表示刪除學生不會對教室有影響)
總結
以上是生活随笔為你收集整理的16-CoreData之多表关联(存储自定义数据模型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 03-UITableView索引栏显示自
- 下一篇: 01-iOS获取系统iTunes音乐