CoreData 多表 關聯

2021-09-07 04:32:59 字數 2958 閱讀 9086

1.概念簡介

coredata中存在複雜的資料關係時,一張表難以滿足需求,此時就需要了解使用coredata多表的關聯使用.

如 課程表 和 章節表 的關係:乙個課程跟章節的對應關係是 一對多,單乙個章節只能對應乙個課程; 而課程表 與 講師表 之間的關係:乙個課程可以有多個講師,乙個講師也可以講多個課程,他們之間是多對多的關係 .

表之間就是靠這種相互約束的關係建立關聯.

假設要刪除乙個課程,與此課程相關聯的章節是否刪除;或者說刪除乙個章節,這個章節對應的課程是否刪除.這個就涉及到多表操作,設定表之間的級聯關係.接下來以coredata設定一一講解

2.coredata 相關設定簡介

1)刪除關係

刪除關係設定

a.ab->b :a物件指向b的刪除關係ab被設定為:

no action:當a被刪除時,b物件不變,但會指向乙個不存在的物件,一般不建議使用;

nullify(作廢):當a物件被刪除時,b物件指向的a物件會置為空,如果a與b的關係式一對多,則是a物件從b容器中移除

cascade(級聯):當a物件被刪除時,a物件指向的b物件也會被刪除;

deny(拒絕):當刪除指向物件b存在的a物件時,操作將會被拒絕;

如:course_section: cascade , 刪除course時,與course相關聯的section都會被刪除;

section_course: nullify , 刪除section時,與section相關的course不會被刪除;

2)物件對應關係

物件對應關係

a.ab->b :a物件指向b的對應關係ab被設定為:

to many: 表示乙個a物件可以包含多個b物件;

to one: 表示乙個a物件只能對應乙個b物件;

如:course_section: to many , 一門course可以包含多個section;

section_course: to one ,乙個section只能指向一門course;

所以course與section的關係是 1:n (1對多)

如:course_teacher: to many , 一門course可以包含多位teacher;

teacher_course: to many ,一位teacher可以指向多門course;

所以course與section的關係是 m:n (多對多)

3.多表建立流程 

1)先建立需要的實體表(方法見"coredata單錶建立使用")

course, section, teacher 表

2)建立關聯 設定刪除關係,對應關係如下(設定的具體含義已在文章第二部分介紹)

課程_教師 (一課程可包含多個教師,刪除關係:作廢)

課程_章節(一節課可包含多個章節,刪除關係:級聯)

章節_課程(乙個章節只屬於乙個課程,刪除關係:作廢)

教師_課程(乙個教師可以講多門課,刪除關係:作廢)

建立之後檢視style關係:

表關係

3)使用建立的物件生成相應地檔案:.h和.m(方法見"coredata單錶建立使用")

根據3個物件建立的檔案

根據設定的物件之間的對應關係 會生成相應地屬性和方法

section對應乙個課程時 新增課程物件的屬性

課程對應的章節以及教師都是多個,生成nsset 儲存 並生成相應方法

nsset 是乙個無序的集合 ,可以使用nsset 與nsarray根據需要轉換使用,其他使用方法 同單錶使用的增刪查改,只是訪問時多層訪問.

如:nspredicate*predict = [nspredicate predicatewithformat:@"section_course.courseid = %d",courseid];

如:self.courseentity.course_teacher.count

coredata多表關聯的基本操作已做乙個簡單的介紹,具體的功能還待使用者發掘,並且蘋果提供了nsfetchcontroller 與coredata結合使用,具體情節,還待下次分享......(歡迎批評指正~~)

多表關聯更新

用優惠表裡面的70006569的優惠的開始時間 來更新lik.temp yangmm 1115 discnt 的開始時間。這就出現問題了第乙個問題 同乙個使用者的70006569 優惠的開始時間可能有好幾個 取哪乙個?這就需要rank 函式來解決。第二個問題更新的時候會出現無法將null值插入.這個...

oracle update多表關聯

update a.a3 a.a3 b.b3 的問題 表a 結構 a1 a2 a3 表b 結構 b1,b2,b3 其中 a1 b1 為pk 切值相同 就是可以使用a1 b1 了.請問用sql 語句或過程該如何實現如下的功能?更新a 表的 a3 用a.a3 與b.b3之和更新.3 update a se...

sql 多表關聯

專案中遇到多表關聯查詢,device info與device oper是一對多關係,project info,branch info與device info是一對多關係。多表的查詢 select o.d.devicename,p.projectname,b.branchname r.releasei...