phpMyAdmin
 sql >> Database >  >> Database Tools >> phpMyAdmin

molti a molti dilemma tabella ponte di relazione

Lo strumento ti dice semplicemente che possono esserci diverse voci per una combinazione uId-groupId. Esempio:

uId  groupId  performacesScore 
1    1        10
1    2        20
2    1        30
2    1        30
2    1        40
2    2        20

Ora immagina che questi dati ti vengano mostrati e trasformi il primo 2/1/30 in 2/1/50. Quale dichiarazione di aggiornamento potrebbe inviare lo strumento al dbms?

update salesGroupLinked set performacesScore = 50
where uId = 2 and groupId = 1;

Questo aggiornerebbe tre record invece di uno.

update salesGroupLinked set performacesScore = 50
where uId = 2 and groupId = 1 and performacesScore = 30;

Ciò aggiornerebbe comunque due record anziché uno.

Quindi, per aggiornare ed eliminare correttamente, devi dire al dbms cosa rende unici i record. Ci sono quattro possibilità:

  • Se non desideri mai aggiornare o eliminare singoli record, lascialo così com'è.
  • Se vuoi essere in grado di aggiornare e può esserci solo una voce per una combinazione uId-groupId, allora dillo a dbms e rendi uId plus groupId la chiave primaria della tua tabella.
  • Se vuoi essere in grado di aggiornare e ci possono essere duplicati per una combinazione uId-groupId, ma una combinazione uId-groupId-performacesScore sarà sempre univoca, allora rendi queste tre chiavi primarie della tabella.
  • Se vuoi essere in grado di aggiornare e ci possono essere duplicati per qualsiasi combinazione, assegna alla tabella un'altra colonna per un ID tecnico e imposta questa come chiave primaria.