在網上搜索了下,發現只有部分講解CoreData關系的,但對多表之間的查詢並沒有相應的介紹。
因此操作自己寫了個。
先創建幾個表。
1、部門表:department
dp_id Integer primary key
dp_deptname varchar(20) //使用coredata實體創建時用string就行
圖:
2、員工表:employee
em_id Integer primary key
em_name varchar(30)
em_sex integer // 0:保密,1男,2女,默認為0
em_age integer
em_bankCardid varchar(20) //卡號
dp_id_emfk integer //外鍵用於關聯部門表(1VN)
pt_id_emfk integer //外鍵用於關聯職位表(1VN)
bk_id_emfk integer// 外鍵用於關聯開戶行(1VN)
3、職位表:post
pt_id Integer primary key
pt_name varchar(20) //職位名稱
dp_id_ptfk integer //外鍵用戶關聯部門表(1VN)
sy_id_ptfk integer //外鍵關聯工資等級表(1V1)
4、工資等級表:salary
sy_id integer primary key
sy_scale double //比例 (用於後屬算獎金)
sy_level varchar(2) //A,B,C,D..等等級
5、開戶銀行:bank
bk_id integer primary key
bk_name varchar(50) //銀行名稱
bk_address varchar(200) //開戶地址
表建好了我們來看一表之間的關系。
部門和員工:一個部門有多個員工,而一個員工只能呆在一個部門(如果同時在兩個部分哪是兼職或者能人不在討論范圍),因此部門和員工的關系為1對多關系。
部門與職位:一個部門有多個職位,而一個職位只能在一個部門。因此為:1對多關系。
部門與工資,開戶銀行,沒有直接關系。(當然部門可能與獎金有掛勾,這個也不在當前討論范圍)
員工與職位:一個員工只能身處一職(能人,兼職除外),而一個職位可以由有多名員工。(如程序員職位,哪可以多名),因此為多對一關系。
員工與工資等級:一個員工只能對應一個工程等級和比例,而一個等級比例可以由多名員工擁有。因此為多對一關系。
員工與開戶行:當公司替員工開卡的時候,哪麼一個開戶銀行就有多個員工。所以這裡會有多對1關系。
職位與工資等級:一個職位只配備一個工資級別,同時一個工次級別也只屬於一個職位。因為為1對1關系。
職位與開戶行沒有直接關系。
開戶行和工資等級也沒有直接關系。
下面來構造測試數據
部門數據:
1 HR //人力資源
2 DEV //開發
3 POD //運維
員工數據:
1 張三 男 20 46326587439043 2 3 2 //張三是開發部的開發工程師
2 李四 女 18 32565443246567 1 2 3 //李四是HR的人事經理
3 歐陽 女 26 14354654656767 3 9 3 //歐陽是運維的大客戶經理
4 歐陽 女 22 98734298437433 2 6 3 //同名歐陽是開發部測試工程師
職位數據:
1 行政專員 1 NULL
2 人事經理 1 3
3 開發工程師 2 2
4 架構師 2 NULL
5 項目經理 2 NULL
6 測試工程師 2 1
7 銷售代表 3 NULL
8 銷售經理 3 NULL
9 大客戶經理 3 4
工資等級數據:
1 0.1 D
2 0.15 C
3 0.4 B
4 0.8 A
開戶行數據:
1 招行 廣州
2 浦發 上海
3 工行 深圳
注:以上是為了作多表關聯查詢做的故意設計的,並沒有使用關系數據庫的范式來設計表,因此可能有存在不合理的地方。
紅色部分字符,如果是使用CoreData的實體來建,就創建為relationship字段。
大家可以按以上結構在SQLITE中創建好表結構。
數據造好了,下面將進行相關查詢演示:
1、查詢開發部門中名為張三的工資等級。
select c.sy_level as dj from deparment a,employee b,salary c ,post d where b.em_name = "張三" and a.dp_deptname = "dev" and a.dp_id = b.dp_id_emfk and d.sy_id_ptfk = c.sy_id and d.pt_id = b.pt_id_emfk
上面一共用到四張表關聯。
2、查詢運維部名為歐陽的工資等級及開戶銀行。
select c.sy_level as dj, e.bk_name kfh from deparment a,employee b,salary c ,post d ,bank e where b.em_name = "歐陽" and a.dp_deptname = "dev" and a.dp_id = b.dp_id_emfk and d.sy_id_ptfk = c.sy_id and d.pt_id = b.pt_id_emfk and e.bk_id = b.bk_id_emfk
以上為五張表的關聯
在造表時不建議大家建太多的外鍵。如果設及到多表之間的關系,我們應該是另外專門建立一張專門的關聯表來進行維護。
這裡為只是作演示,我這裡就不再列關聯表了。