2009-08-01 9 views
1

Kann mir jemand erklären, wie das (HABTM oder viele zu viele) "hat und zu vielen gehört" Prinzip funktioniert? Angenommen, ich habe eine Tabelle für Benutzer und Bücher und dann habe ich eine Tabelle users_books wo die IDs sind. Wann müsste ich dieses Prinzip tatsächlich anwenden und wie würde es funktionieren?Kann mir jemand erklären, wie das HABTM-Prinzip funktioniert?

+1

bitte erklären Sie das Akronym –

+0

Hat und gehört zu vielen –

Antwort

3

Fragen Sie, warum Sie viele-zu-viele-Beziehungen benötigen (was ist HABTM)?

In dem oben erwähnten Fall kann ein Benutzer viele Bücher besitzen - wie Sie das in einer Datenbank darstellen Nehmen wir an, Sie haben zwei Tabellen, Bücher und Benutzer, in der Benutzertabelle können Sie keine Spalte pro Buch hinzufügen jedes Buch, das der Benutzer besitzen darf, da Sie nicht wissen, wie hoch die Obergrenze für die Anzahl der Bücher ist, die es besitzt. Sie könnten eine Spalte namens "books" hinzufügen und eine "Sammlung" von Büchern in dieser Spalte speichern (vielleicht als XML oder kommagetrennt), aber dies macht viele Datenbankabfragen schwierig (z. B. das Identifizieren einzelner Bücher, die der Benutzer besitzt).

Das gleiche gilt für die Buch-Tabelle, wie viele Benutzer ein bestimmtes Buch besitzen? wieder können Sie nicht im Voraus wissen, so dass Sie nicht mehrere "Benutzer" -Spalten zur Buch-Tabelle hinzufügen können und das Hinzufügen einer einzelnen "Benutzer" -Spalte mit einer Sammlung von Benutzern hilft nicht.

Die Lösung für dieses Problem besteht darin, eine "Join" -Tabelle hinzuzufügen, sagen Benutzerbücher, die zwei Spalten enthält, eine Benutzer-ID und eine Buch-ID. Diese Tabelle verknüpft die Benutzer mit den Büchern. Also, wenn ich zwei Benutzer mit IDs 1 und 2 und drei Bücher mit der ID 101, 102 und 103 die Join-Tabelle kann wie folgt aussehen:

 
userid bookid 
1  101 
2  101 
2  103 

Hier werden die users_books in in HABTM kommt - es ist die Join-Tabelle zwischen Benutzer und Bücher.

+0

So kann ein Benutzer mehrere Bücher haben? Wie würde das aussehen oder funktionieren? – openfractal

+0

Durch die Join-Tabelle. Ich habe versucht, in meiner Antwort zu veranschaulichen, aber die Formatierung wurde geschraubt. Nehmen wir an, Benutzer 1 hat zwei Bücher% 2C in der Join-Tabelle gibt es zwei Zeilen, die erste Zeile hätte userid = 1 und bookid = 101 und die zweite Zeile userid = 1 bookid = 102. Für Benutzer 2 hätten Sie Zeilen mit Benutzer-ID = 2 Buch-ID = 101 und Benutzer-ID = 2 Buch-ID = 103. So hätte Benutzer 1 2 Bücher mit den IDs 101 und 102 und Benutzer 2 hätte 2 Bücher mit den IDs 101 und 103 –

+0

Ich ging voran und fixierte Ihre Formatierung. –

2

H als A nd B elongs T o M jede zwischen Tabellen in einer Datenbank, die viele zu viele Beziehung abwickelt. In Ihrem Fall würde es die Beziehung zwischen Benutzern und Büchern handhaben, da ein Benutzer viele Bücher haben kann und ein Buch viele Benutzer haben kann.

alt text

Dieser Blog-Eintrag sieht aus wie eine ziemlich gute Erklärung und Darstellung des Konzepts:

has_and_belongs_to_many: HABTM in Rails
http://sumanthtechsavvy.blogspot.com/2008/03/hasandbelongstomany-habtm-in-rails.html

+0

Richtig. Ich verstehe das. Ich verstehe den Punkt nicht. Warum nicht in eine Tabelle integrieren und wie funktioniert es im Sinne einer Anwendung? – openfractal

+5

Dies ist ein relativ häufiges Muster bei relationalen Datenbanken. Die Ruby-Crowd gab ihm nur einen speziellen Namen, aber das ist immer so, wie Sie mit einer Viele-zu-Viele-Beziehung umgehen. Sie benötigen immer eine "Verknüpfungstabelle", um die beiden Tabellen zu verknüpfen. –

+0

Wie es im Sinne einer Anwendung funktioniert: Denken Sie an die Registrierung der Schule. Sie benötigen einen Datensatz in der Verknüpfungstabelle für jede Kombination aus Student und Klasse. –

0

This section der Schienen Verbände Führung einige hat gute Informationen über die Funktionsweise von Rails. Sie sollten auch die Möglichkeit einer through association für den Fall berücksichtigen, dass Sie mehr Informationen über die Assoziation selbst speichern müssen. Wikipedia hat eine brief article zum Grundkonzept von vielen-zu-vielen Datenmodellen, die sich auch lehrreich erweisen können.

Verwandte Themen