IOS CoreData 多表查詢(上) – iPhone手機開發技術文章 iPhone軟體開發教學課程

在網上搜索瞭下,發現隻有部分講解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

以上為五張表的關聯

 

 

在造表時不建議大傢建太多的外鍵。如果設及到多表之間的關系,我們應該是另外專門建立一張專門的關聯表來進行維護。

這裡為隻是作演示,我這裡就不再列關聯表瞭。

 

發佈留言