首頁  >  問答  >  主體

mysql - 一個表格和多個表格是多對多的關係,該怎麼設計

最近遇到了一個表格和多個表格關聯的問題,

例如: 現在有一個應用表app_table,有很多個素材表material_table1、material_table2... ,
對每個素材表來說,一個素材可能有多個應用使用,一個應用也可以使用多個素材。每個素材表和應用表都是這種關係,而且每個素材表之間沒有任何關聯。

顯然是多對多,但問題是如果按照多對多建立表的話,每個素材表都要建立一個中間表。

我現在有個想法,就是在應用表中添加字段,每個素材都添加一個字段,字段中保存著這個 app 所擁有的素材
的 id,按照逗號隔開。但是問題就是這樣的話要查詢兩次,先透過應用表的欄位進行篩選,然後再依照條件對查詢出來的資料進行篩選。

我不知道大家有沒有更好的方案和想法,謝謝大家啦


描述的有點不清楚,是每個類別的素材(一個素材表)都做一個接口,只不過素材返回的時候是要根據應用來篩選的,而且存在一個應用使用多個素材(一個素材表中的多個素材),一個素材可能有多個應用使用。現在的狀態是每個素材表都新增了一個應用程式欄位來區分,但是這樣要新增很多條目進去。所有我考慮要不要做一個應用程式表,然後每個素材都做一個關聯表。這樣請求的時候可以先根據請求參數的應用名稱來查到應用表的數據,再根據關聯去查到相關素材表中符合條件的數據。
不知道有沒有更好的方法。

PHP中文网PHP中文网2691 天前871

全部回覆(7)我來回復

  • 阿神

    阿神2017-06-06 09:54:18

    首先你這個表結構設計的有點問題。多個素材,為什麼要履歷多個素材表?可以使用素材類型來區分吧。
    我不知道你為什麼要給素材分錶,如果安我猜的是因為素材類型不同,我覺得建表應該是這樣的

    app 應用表
    material 素材表
    material_type 素材類型
    app_material 素材應用關係表

    回覆
    0
  • 漂亮男人

    漂亮男人2017-06-06 09:54:18

    感覺只需要一個關聯表:

    關聯表
    應用ID 素材表ID 素材ID
    01 07 08

    就可以確定某個應用程式使用了哪些素材

    回覆
    0
  • 世界只因有你

    世界只因有你2017-06-06 09:54:18

    吐槽一句:哪裡來的多對多啊.每個素材表的字段都不一樣.應用表對某類型的素材表(素材表的元素)是多對多關係,但是應用表跟所有的素材表直接不是多對多關係,是包含跟不包含的關係好不.

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-06 09:54:18

    首先,按照你的思路 你數據表將來很龐大難以維護,建議可以把素材的屬性轉成json或者序列化進行存儲.

    回覆
    0
  • 某草草

    某草草2017-06-06 09:54:18

    一對多的關聯關係我們一般會使用中間表,一對一的才會增加一列來表示關係

    回覆
    0
  • 天蓬老师

    天蓬老师2017-06-06 09:54:18

    A A_ID A_OTHER
    B B_ID B_OTHER
    C C_ID C_OTHER
    REF REF_ID(序列) A B C D E …

    雷雷

    回覆
    0
  • 巴扎黑

    巴扎黑2017-06-06 09:54:18

    app_id | material_table_name | material_table_id

    關鍵字,多型關聯

    回覆
    0
  • 取消回覆