2016-05-31 4 views
0

Ich habe zwei Tabellen, Benutzer und Programme. Jetzt habe ich nur, sagen wir, 5-10, Programme und Zehntausende von Benutzern, die in irgendeinem der Programme eingeschrieben werden können (können auch in mehreren Programmen angemeldet sein). So in einem Fall von vielen zu vielen Beziehung, dachte ich an eine separate Tabelle zu schaffen, sagen link_user_program, zu speichern, welche Programme ein Benutzer eingeschrieben ist.Datenbank-Design für viele (wenige) zu viele (eigentlich zu viele) Beziehung

Aber wenn ich haben Zehntausende Benutzer und nur 10 Programme, wird dies nicht zusätzlichen Speicherplatz verbrauchen und Abfragezeit als nur Speichern der in der Benutzertabelle registrierten Programme (vielleicht Komma getrennte Programm-IDs oder eine boolesche Spalte für jedes Programm) erhöhen?

Was sind die Vor- und Nachteile der beiden oben genannten Designs oder gibt es eine bessere Alternative? Was ist, wenn in Zukunft neue Programme hinzugefügt werden können (aber immer noch erheblich weniger als die Anzahl der Benutzer)?

+0

Lesen Sie eine Einführung in relationale DBMSs und Datenbankdesign. (Was ist effektiv, was Ihre Frage als Antwort verlangt.) Die dritte Tabelle ist das geeignete Design. Sie müssen deutlich mehr über die einfache Verwendung von RDBMS lernen, bevor Sie sich Gedanken über die Handoptimierung machen müssen. – philipxy

Antwort

0

Von OO-Domain-Design-Perspektive, empfehlen, eine viele zu viele Linktabelle zu verwenden; Vergessen Sie zusätzlichen Speicherplatz, für die Abfragezeit können Sie den Index einrichten, um die Leistung zu verbessern.

ohne Link-Tabelle, wenn Sie ein Problem in Zukunft schwer hinzufügen/löschen können.

+0

[_Details zur optimalen Gestaltung von Viele-zu-Viele-Tabelle_] (http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table). –