2014-10-26 65 views
0

尋找最好的方法去解決這個問題。MySQL多對多的關係結構(一個可以有多個b的但是b也可以有多個的)

基本上它爲員工設置了一天的工作。
許多工人可以有同樣的工作,每個工人可以有多個工作,每個工作可以有多個工人,但不一定是相同的「一堆」工作。

例子:
工作者一個可以有工作1和2以及
工人B可以有作業1和3

什麼是最好的或連接到數據庫這種關係的典型例子?

我的用戶表有我可以引用的ID和用戶名,但我試圖擺脫數據庫中存儲的某種列表,這是我唯一的想法,工作者a有工作(1,2,9)。

回答

0

常見的方式實現這一目標是通過持有工和就業之間的關係額外的表。假設這個表名爲workers_jobs將會有(至少)列worker_id和job_id。如果id爲15工人與IDS 1,3,5的工作,那麼你將創建三排

worker_id | job_id 
     15 | 1 
     15 | 3 
     15 | 5 

對於反向關係,如果與ID爲2的作業屬於工人IDS 2,5,6,8您workers_jobs表將

worker_id | job_id 
      2 | 2 
      5 | 2 
      6 | 2 
      8 | 2 

存儲逗號分隔值不是一個好主意,一個很好的解釋提供here

+0

謝謝,看到因爲它使我的問題是避免了串數據的重複作業信息我現在看到一張單獨的桌子是如何切割出來的y存儲小整數。 – rezand 2014-10-26 17:35:27

+0

不客氣。 – geoandri 2014-10-26 17:37:27

0

處理多對多關係的標準方法是有一個額外的表。

workers_jobs:

| id | worker_id | job_id | 
----------------------------- 
| 1 | 1   | 1  | 
| 2 | 1   | 2  | 
| 3 | 2   | 1  | 
| 4 | 2   | 3  | 

這樣你就可以選擇一個特定的工人所有的工作,所有工作人員爲特定作業從這個worker_jobs表。

例如:

SELECT * FROM workers 
    INNER JOIN workers_jobs ON workers.id = workers_jobs.worker_id 
    INNER JOIN jobs ON on workers_jobs.job_id = jobs.id 
相關問題