Heim  >  Fragen und Antworten  >  Hauptteil

mysql - Wie gestaltet man eine Viele-zu-Viele-Beziehung zwischen einer Tabelle und mehreren Tabellen?

Kürzlich ist ein Problem im Zusammenhang mit einer Tabelle und mehreren Tabellen aufgetreten,

Zum Beispiel: Jetzt gibt es eine Anwendungstabelle app_table und es gibt viele Materialtabellen material_table1, material_table2 ...
Für jede Materialtabelle kann ein Material von mehreren Anwendungen verwendet werden, und eine Anwendung kann auch mehrere Materialien verwenden. Jede Materialtabelle und Anwendungstabelle weist diese Beziehung auf, und es besteht keine Verbindung zwischen den einzelnen Materialtabellen.

Natürlich ist es viele-zu-viele, aber das Problem besteht darin, dass, wenn die Tabelle nach der Viele-zu-viele-Methode erstellt wird, für jede Materialtabelle eine Zwischentabelle erstellt werden muss.

Ich habe jetzt eine Idee, die darin besteht, ein Feld zur Anwendungstabelle hinzuzufügen und für jedes Material ein Feld hinzuzufügen. Das Feld speichert die IDs der Materialien
, die dieser App gehören, durch Kommas getrennt. Das Problem besteht jedoch darin, dass in diesem Fall die Abfrage zweimal durchgeführt werden muss, indem zuerst die Felder der Anwendungstabelle gefiltert werden und dann die abgefragten Daten gemäß den Bedingungen gefiltert werden.

Ich weiß nicht, ob Sie bessere Pläne oder Ideen haben, vielen Dank an alle


Die Beschreibung ist etwas unklar. Jede Materialkategorie (eine Materialtabelle) verfügt über eine Schnittstelle. Wenn die Materialien jedoch zurückgegeben werden, müssen sie nach der Anwendung gefiltert werden, und es gibt eine Anwendung, die mehrere Materialien verwendet (a (Materialtabelle). Mehrere Materialien), ein Material kann von mehreren Anwendungen verwendet werden. Der aktuelle Stand ist, dass jeder Materialtabelle ein Anwendungsfeld zur Unterscheidung hinzugefügt wurde, aber dafür müssen viele Einträge hinzugefügt werden. Deshalb überlegte ich, ob ich eine Anwendungstabelle und dann eine Zuordnungstabelle für jedes Material erstellen sollte. Auf diese Weise können Sie bei einer Anfrage zunächst die Daten in der Anwendungstabelle anhand des Anwendungsnamens des Anforderungsparameters nachschlagen und dann anhand der Zuordnung die qualifizierten Daten in der entsprechenden Materialtabelle nachschlagen.
Ich weiß nicht, ob es einen besseren Weg gibt.

PHP中文网PHP中文网2691 Tage vor872

Antworte allen(7)Ich werde antworten

  • 阿神

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

    首先你这个表结构设计的有点问题。多个素材,为什么要简历多个素材表?可以使用素材类型来区分吧。
    我不知道你为什么要给素材分表,如果安我猜的是因为素材类型不同,我觉得建表应该是这样的

    app 应用表
    material 素材表
    material_type 素材类型
    app_material 素材应用关系表

    Antwort
    0
  • 漂亮男人

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

    感觉只需要一个关联表:

    关联表
    应用ID 素材表ID 素材ID
    01 07 08

    就可以确定某个应用使用了哪些素材

    Antwort
    0
  • 世界只因有你

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

    吐槽一句:哪里来的多对多啊.每个素材表的字段都不一样.应用表对某类型的素材表(素材表的元素)是多对多关系,但是应用表跟所有的素材表直接不是多对多关系,是包含跟不包含的关系好不.

    Antwort
    0
  • 伊谢尔伦

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

    首先,按照你的思路 你数据表将来很庞大难以维护,建议可以把素材的属性转成json或者序列化进行存储.

    Antwort
    0
  • 某草草

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

    一对多的关联关系我们一般会使用中间表,一对一的才会增加一列来表示关系

    Antwort
    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 …

    1                        
    2                        
    3                        
    4                        
    5                        
    

    Antwort
    0
  • 巴扎黑

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

    app_id | material_table_name | material_table_id

    关键字,多态关联

    Antwort
    0
  • StornierenAntwort