16-CoreData之多表关联(存储自定义数据模型)
多表關(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ì)對教室有影響)
總結(jié)
以上是生活随笔為你收集整理的16-CoreData之多表关联(存储自定义数据模型)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 03-UITableView索引栏显示自
- 下一篇: AppleWatch开发-AlertCo