Domanda: Puoi spiegare che cosa sarebbe un indice in questo scenario e in che modo si differenzia da una chiave esterna e come questo influisce sulla progettazione del mio database?
Le chiavi esterne in questo caso sono le due colonne nella tabella Posts_Tags. Con una chiave esterna, ogni colonna di chiave esterna deve contenere un valore dalla tabella principale a cui fa riferimento.In questo caso, le tabelle Post e Tag.
Posts_Tags-> PostID deve essere un valore contenuto in Posts-> postID
Posts_Tags-> TagID deve essere un valore contenuto nel tag-> TagID
pensi ad un indice come una colonna che è stata dato maggiore velocità ed efficienza per l'interrogazione/ricerca dei valori da esso, al costo di una maggiore dimensione del database. In generale, le chiavi primarie sono indici e altre colonne che richiedono query/ricerche sul tuo sito web, nel tuo caso, probabilmente il nome di un post (Post-> PostName)
Nel tuo caso, gli indici avranno un impatto minimo sul tuo design (sono belli da avere per velocità ed efficienza), ma le tue chiavi esterne sono molto importanti per evitare la corruzione dei dati (con valori che non corrispondono a un post e/o tag).
Le chiavi esterne non applicano una regola NOT NULL. Una chiave esterna applica un vincolo ai valori di una colonna. – jabbie
Non sta parlando di applicare un valore NOT NULL, sta parlando di assicurarsi che non abbia un ID nella tabella figlio che non esiste nella tabella padre. –
Esattamente. Grazie, Gabriele, per averlo spiegato. – Dmitry