MySQL auto-increment zwischen Tabellen
In MySQL, ist es möglich, eine Spalte in zwei verschiedenen Tabellen, die auto-increment? Beispiel: Tabelle1 hat Spalte 'secondaryid' und Tabelle2 hat auch eine Spalte 'secondaryid'. Ist es möglich, Tabelle1.secondaryid und Tabelle2.secondaryid enthalten die gleichen Informationen? Wie Tabelle1.secondaryid halten konnte, Werte 1, 2, 4, 6, 7, 8, etc und Tabelle2.secondaryid halten konnte, die Werte 3, 5, 9, 10? Der Grund dafür ist zweifach: 1) die beiden Tabellen verwiesen werden soll, in eine separate Tabelle "likes" (ähnlich wie die Nutzer liken eine Seite auf facebook) und 2) die Daten in Tabelle2 ist eine Teilmenge der table1-Tabelle mit einem Primärschlüssel. Damit Sie die Informationen untergebracht, die in Tabelle2 abhängig ist "Tabelle1", wie Sie die Themen in verschiedenen Kategorien. (Kategorien als Tabelle1 und Themen, Tabelle2). Ist es möglich, etwas zu tun, was oben beschrieben oder gibt es eine andere strukturelle umgehen, dass ich nicht bewusst?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, Sie wollen zu differenzieren, Kategorien und Themen in zwei separaten Tabellen, aber die ids der beiden von Ihnen verwiesen werden, die in einer anderen Tabelle
likes
zu erleichtern, die Benutzer wünschen entweder eine Kategorie oder ein Thema.Was Sie tun können, ist, erstellen Sie eine super-Entität Tabelle mit Subtypen
categories
undtopics
. Die auto-increment Schlüssel generiert, in der super-Entität Tabelle eingefügt und in nur einer der beiden Subtyp-Tabellen (auf der Grundlage, ob es eine Kategorie oder ein Thema).Den Subtyp Tabellen-Referenz dieser super-Entität über die auto-increment-Feld in einer 1:1-Beziehung.
Diese Weise, können Sie einfach den link der super-entity-Tabelle der
likes
Tabelle nur auf eine Spalte (die repräsentieren kann entweder eine Kategorie oder ein Thema), und keineid
in der Subtyp-Tabellen werden in beiden vorhanden.Hier ist ein Vereinfachtes Beispiel, wie Sie dieses Modell aus:
Dieses Modell würde es erlauben, Sie zu pflegen, die die Beziehung zwischen Kategorien und Themen, aber, dass beide Entitäten verallgemeinert in der
superentity
Tabelle.Ein weiterer Vorteil dieses Modells ist, dass Sie Abstrakt die gemeinsamen Felder im Subtyp Tabellen in der superentity Tabelle. Zum Beispiel sagen, dass
categories
undtopics
beide enthalten die Feldertitle
undurl
: Sie können diese Felder in dersuperentity
Tisch, weil Sie gemeinsame Attribute an seine Subtypen. Nur Felder, die spezifisch für den Subtyp Tabellen IN der Subtyp-Tabellen.id
Feld, aber der Subtyp Tabellen-Referenz nur der Schlüssel in die superentity Tabelle, die sind für Ihren Typ. Zum Beispiel, in der superentity Tabelle haben Sieid
s1,2,3,4,5,6,7,8,9
. Wenn2,5,6,7
sind Kategorien und1,3,4,8,9
sind Themen,... Die Kategorien-Tabelle wird nur die Referenz2,5,6,7
, und die Themen, die Tabelle wird Bezug1,3,4,8,9
.id
s der superentity Tabelle. Die Werte fürid
imsuperentity
Tabelle darstellen kann entweder eine Kategorie oder ein Thema, aber die eigentlichen Informationen über Kategorien und Themen gespeichert sind, in Ihren jeweiligen Subtyp Tabellen.Können Sie nicht haben eine auto_increment-Wert geteilt zwischen Tabellen, aber man kann es scheinen, dass es ist:
Der Nachteil ist, dass Sie ändern, um eine Globale Einstellung, so ALLE auto_inc Felder werden nun wächst um 2 statt 1.
Wenn Sie wollen einfach nur die ID 's in den beiden Tabellen unterschiedlich sein, können Sie zunächst Tabelle2' s AUTO_INCREMENT, um einige große Anzahl.
INT
Primärschlüssel ist Y2K-in Verkleidung.Es klingt wie Sie wollen ein MySQL-äquivalent von Sequenzen, die gefunden werden können in DBMS ist wie PosgreSQL. Es gibt ein paar bekannte Rezepte für diese, von denen die meisten umfassen das erstellen der Tabelle(N), welche auf den Namen der Sequenz und ein integer-Feld, hält den aktuellen Wert. Dieser Ansatz ermöglicht die Abfrage die Tabelle mit der Reihenfolge, und verwenden, die auf eine oder mehrere Tabellen, wenn nötig.
Es gibt einen Beitrag hier , das einen interessanten Ansatz zu diesem problem. Ich habe auch gesehen, wie dieser Ansatz in der DB-PEAR-Modul das ist jetzt obsolet.
Müssen Sie die andere Tabelle Inkrement-Wert manuell entweder durch den Kunden oder innerhalb von mysql über ein sql-Funktion:
Also nach dem einfügen in Tabelle1 Sie den letzten auto-Inkrement ändern Sie dann die andere Tabelle den auto-Inkrement-Feld ist.
Ich bin verwirrt durch Ihre Frage. Wenn die Tabelle 2 ist eine Teilmenge von Tabelle 3, warum sollte Sie es haben, teilen Sie den Primärschlüssel-Werten. Meinst du, dass die Kategorien sind aufgeteilt zwischen Tabelle 2 und Tabelle 3?
Wenn dem so ist, würde ich die Frage der design-Wahl, setzen Sie Sie in separaten Tabellen. Es klingt wie Sie haben eine von zwei verschiedenen Situationen. Die erste ist, dass Sie eine "Kategorie" Entität, die kommt in zwei Geschmacksrichtungen. In diesem Fall sollten Sie eine einzelne Kategorie-Tabelle, vielleicht mit einem Typ-Spalte gibt den Typ der Kategorie.
Das zweite ist, dass Ihre Benutzer können "wie" Dinge, die anders sind. In diesem Fall, die "Benutzer mag" - Tabelle sollte eine separate Fremdschlüssel für jedes Objekt. Sie könnte ziehen Sie einen trick mit einem zusammengesetzten Fremdschlüssel, wo Sie den Typ des Objekts und eine regelmäßige numerische id danach. So, wie die Tabelle haben würde, "Typ" und "id". Die person-Tabelle eine Spalte gefüllt mit "PERSON" und ein weiteres mit der numerischen id. Und die join würde sagen "auf ein.Typ =. b.geben Sie und eine.id = b.id". (Oder den Teil, auf dem "Typ" sein könnte, indirekt, in die Auswahl der Tabelle).
Könnte man es machen, mit Trigger: