mysql - 一個表和多個表是多對多的關(guān)系,該怎么設(shè)計
問題描述
最近遇到了一個表和多個表關(guān)聯(lián)的問題,
例如 : 現(xiàn)在有一個應(yīng)用表 app_table,有很多個素材表 material_table1、material_table2... ,對每個素材表來說,一個素材可能有多個應(yīng)用使用,一個應(yīng)用也可以使用多個素材。每個素材表和應(yīng)用表都是這種關(guān)系,而且每個素材表之間沒有任何關(guān)聯(lián)。
顯然是多對多,但問題就是如果按照多對多建立表的話,每個素材表都要建立一個中間表。
我現(xiàn)在有個想法,就是在應(yīng)用表中添加字段,每個素材都添加一個字段,字段中保存著這個 app 所擁有的素材的 id,按照逗號隔開。但是問題就是這樣的話要查詢兩次,先通過應(yīng)用表的字段進行篩選,然后再按照條件對查詢出來的數(shù)據(jù)進行篩選。
不知道大家有沒有更好的方案和想法,謝謝大家啦
描述的有點不清楚,是每個類別的素材(一個素材表)都做一個接口,只不過素材返回的時候是要根據(jù)應(yīng)用來篩選的,而且存在一個應(yīng)用使用多個素材(一個素材表中的多個素材),一個素材可能有多個應(yīng)用使用。現(xiàn)在的狀態(tài)是每個素材表都添加了一個應(yīng)用字段來區(qū)分,但是這樣要添加很多條目進去。所有我考慮要不要做一個應(yīng)用表,然后每個素材做一個關(guān)聯(lián)表。這樣請求的時候可以先根據(jù)請求參數(shù)的應(yīng)用名來查到應(yīng)用表的數(shù)據(jù),再根據(jù)關(guān)聯(lián)去查到相關(guān)素材表中符合條件的數(shù)據(jù)。不知道有沒有更好的方法。
問題解答
回答1:首先你這個表結(jié)構(gòu)設(shè)計的有點問題。多個素材,為什么要簡歷多個素材表?可以使用素材類型來區(qū)分吧。我不知道你為什么要給素材分表,如果安我猜的是因為素材類型不同,我覺得建表應(yīng)該是這樣的
app 應(yīng)用表material 素材表material_type 素材類型app_material 素材應(yīng)用關(guān)系表
回答2:感覺只需要一個關(guān)聯(lián)表:
關(guān)聯(lián)表應(yīng)用ID 素材表ID 素材ID01 07 08
就可以確定某個應(yīng)用使用了哪些素材
回答3:吐槽一句:哪里來的多對多啊.每個素材表的字段都不一樣.應(yīng)用表對某類型的素材表(素材表的元素)是多對多關(guān)系,但是應(yīng)用表跟所有的素材表直接不是多對多關(guān)系,是包含跟不包含的關(guān)系好不.
回答4:首先,按照你的思路 你數(shù)據(jù)表將來很龐大難以維護,建議可以把素材的屬性轉(zhuǎn)成json或者序列化進行存儲.
回答5:一對多的關(guān)聯(lián)關(guān)系我們一般會使用中間表,一對一的才會增加一列來表示關(guān)系
回答6:A A_ID A_OTHER B B_ID B_OTHER C C_ID C_OTHER REF REF_ID(序列) A B C D E …
12345
app_id | material_table_name | material_table_id
關(guān)鍵字,多態(tài)關(guān)聯(lián)
相關(guān)文章:
