Domanda

Spero che qualcuno possa modificare il mio titolo per meglio descrivere quello che voglio dire, perché io non so esattamente ciò che questo sarebbe chiamato. Tuttavia, considerare questa configurazione: Voglio creare un sistema di notifica, in cui viene visualizzato un messaggio a un utente fino a che non scatta "respingere". Ho quindi bisogno di "ricordare" che questo utente ha respinto la notifica in modo non mi presento a lui di nuovo. Ecco la mia soluzione attuale

  • Tavolo users ha una chiave primaria uid e informazioni utente
  • Tavolo notifications ha una chiave primaria nid e testo di notifica
  • Tavolo notifications_seen con due colonne, uid e nid

Quando si fa clic qualcuno respingere su una notifica, devo conservare la loro uid e nid della notifica notifications_seen. Questo sembra funzionare bene, ma phpMyAdmin ha giganti rosse messaggi che mi dicono che notifications_seen non ha un indice. Tuttavia, né colonna è unico nel suo genere. Devo davvero avere una colonna aggiuntiva assolutamente inutile in notifications_seen e chiamata che una chiave primaria? C'è un modo migliore per fare questo?

È stato utile?

Soluzione

È possibile utilizzare più di una colonna per creare la chiave primaria. In questo caso, è necessario impostare nid E uid come chiave primaria nella tabella notifications_seen. L'idea qui è che, anche se nessuno dei due nid o uid saranno unici nel vostro tavolo notifications_seen; il COPPIA nid / uid è unico. Si dovrebbe aggiungere un vincolo di chiave primaria per queste due colonne. Questo è di solito ciò che si vorrebbe fare per questo tipo di situazione.

Ci sono momenti in cui si potrebbe effettivamente desidera creare una fila di incremento automatico per semplificare la chiave primaria. Ad esempio, quando la chiave di miglior candidato è costituito da un sacco di colonne (sto tirando questo fuori l'aria, ma diciamo 4 o più colonne) o si dispone di colonne che contengono stringhe; che sarebbe più lento per abbinare quando facendo ricerche. Ma per questa situazione, semplicemente aggiungendo il vincolo di chiave primaria alle due colonne dovrebbe essere più che bene.

Le chiavi primarie sono indicizzati per impostazione predefinita; che è il motivo per cui si dovrebbe solo aggiungere il vincolo di chiave primaria per le due colonne. Questo sarà anche preservare l'integrità dei dati, facendo attenzione a non fare accidentalmente inserire righe con la stessa coppia uid / nid.

Si dovrebbe anche aggiungere un vincolo di chiave esterna sul uid per l'id nella tabella degli utenti, e un vincolo di chiave esterna al nid sul id nella tabella delle notifiche. Aggiungendo i vincoli di chiave esterna vi assicurerà non inserire uid o nids che in realtà non esistono nella vostra tabella notifications_seen.

Altri suggerimenti

Si può essere in grado di creare una chiave primaria composto (composto da due uid e nid).

Si potrebbe fare un indice su notifications_seen che contiene sia colonne! O creare una colonna separata solo per una chiave primaria, o fare entrambe le cose - con indice su uid e nid potrebbe velocizzare le query (ma non preoccupatevi troppo di che fino a quando si inizia a notare principali prestazioni problemi - basta ricordare che per il futuro). Avere una chiave primaria per questi n. N rapporti non è una cosa terribile

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top