Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hat eine Join-Tabelle (Assoziationstabelle) einen Primärschlüssel? Viele-zu-Viele-Beziehung

In einer reinen 'Join'- oder Junction-Tabelle sind alle Felder Teil des Primärschlüssels. Betrachten wir zum Beispiel die folgenden Tabellen:

CREATE TABLE USERS
  (ID_USER NUMBER PRIMARY KEY,
   FIRST_NAME VARCHAR2(32),
   LAST_NAME VARCHAR2(32));

CREATE TABLE ATTRIBUTES
  (ID_ATTRIBUTE NUMBER PRIMARY KEY,
   ATTRIBUTE_NAME  VARCHAR2(64));

Eine Verbindungstabelle zwischen diesen, um vielen Benutzern zu ermöglichen, viele Attribute zu haben, wäre

CREATE TABLE USER_ATTRIBUTES
  (ID_USER NUMBER REFERENCES USERS(ID_USER),
   ID_ATTRIBUTE NUMBER REFERENCES ATTRIBUTES(ID_ATTRIBUTE),
   PRIMARY KEY(ID_USER, ID_ATTRIBUTE));

Manchmal müssen Sie einer Junction-Tabelle eine nicht-primäre Spalte hinzufügen, aber ich finde, das kommt relativ selten vor.

Teilen und genießen.