兩個表是多對多的關係,一定需要關聯表嗎?

來源:互聯網
上載者:User
有兩張表規則表和組表: tb_rulestb_group

這是auth許可權中的兩張表,明顯他們是多對多的關係,一個規則可以屬於多個組,一個組可以擁有多個規則;

按道理說應該有一張關聯表tb_group_rules(group_id,rule_id)

但是thinkPHPauth類裡面不用關聯表,是這樣的tb_group裡面有一個rules欄位,儲存'1,2,3,4,5,6,7,8,9'這樣的規則id

我猜想他不用關聯表可能有這幾個考慮:
1:一般每個組的規則並不多,用一個欄位比較管理方便,不必要建一個關聯表造成資源的浪費
2:一般都是取得組的規則id,授權時直接更改組的規則欄位

但是我覺得這樣時候總不好:
1:什麼叫一般組的規則不多,什麼叫一般,這個誰說的准呢,反正我就是不放心
2:將規則用,分割好嗎,如果要是想取消某一個規則,這樣極為不方便(程式只能查出規則欄位用,分割再取出,在拼接,在儲存),給維護帶來麻煩
3:通過組來更改規則是方便,但如果我想根據規則看它屬於那些組時,或者根據規則為它授權某些組時就比較麻煩了

如果使用關聯表,上面都不是問題,也利於程式的維護

上面就是我的理解和利弊的分析,如有不對請大神指正

我探討的問題,如題,到底什麼時候使用關聯表,以及利弊的權衡,比如此案列中的情況。

回複內容:

有兩張表規則表和組表:tb_rulestb_group

這是auth許可權中的兩張表,明顯他們是多對多的關係,一個規則可以屬於多個組,一個組可以擁有多個規則;

按道理說應該有一張關聯表tb_group_rules(group_id,rule_id)

但是thinkPHPauth類裡面不用關聯表,是這樣的tb_group裡面有一個rules欄位,儲存'1,2,3,4,5,6,7,8,9'這樣的規則id

我猜想他不用關聯表可能有這幾個考慮:
1:一般每個組的規則並不多,用一個欄位比較管理方便,不必要建一個關聯表造成資源的浪費
2:一般都是取得組的規則id,授權時直接更改組的規則欄位

但是我覺得這樣時候總不好:
1:什麼叫一般組的規則不多,什麼叫一般,這個誰說的准呢,反正我就是不放心
2:將規則用,分割好嗎,如果要是想取消某一個規則,這樣極為不方便(程式只能查出規則欄位用,分割再取出,在拼接,在儲存),給維護帶來麻煩
3:通過組來更改規則是方便,但如果我想根據規則看它屬於那些組時,或者根據規則為它授權某些組時就比較麻煩了

如果使用關聯表,上面都不是問題,也利於程式的維護

上面就是我的理解和利弊的分析,如有不對請大神指正

我探討的問題,如題,到底什麼時候使用關聯表,以及利弊的權衡,比如此案列中的情況。

對應你覺得這樣時候總不好的三點說明,我進行回複個人觀點,(因為您的問題,公說公有理婆說婆有理)。
1、一般,你自己猜想了一般情況,而又是你自己否定這個一般情況,那麼這是你自己的問題了。
2、分割,如果rules欄位現在儲存的是‘1,2,3,4,5,6,7,8,9’,那麼在管理介面進行刪除2號角色的時候,不是對現有儲存的rules欄位值進行分割,剔除2,在組合。而是在管理介面刪除後點擊儲存,表單重新提交組所擁有的角色資訊進行組合拼接,然後update儲存rules欄位資訊。而並不是你所描述的情況:“分割再取出,在拼接,在儲存”,這的確給維護帶來麻煩,但是實際做法不該是描述的這樣子。
3、“但如果我想根據規則看它屬於那些組時”,這應該是你業務需要,thinkPHP在設計的時候並未直接考慮這點。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.