Sto progettando un database per un sistema scolastico. Devo creare molte tabelle e molte tabelle di collegamenti per mantenere una struttura nel sistema.
Sto cercando di mantenere l'integrità esterna e provare a creare l'immissione di dati univoci il più possibile. Ma questo creerà problemi con le query quando comincio a costruire il sistema. Dovrò fare molti join e temo che ciò influisca sull'ottimizzazione e le prestazioni.
In questa istanza,
Ho uno studente che sta seguendo un corso per un argomento. Mentre segue il corso, può prendere in prestito un libro relativo a quell'argomento dalla biblioteca.
Le mie tabelle sarebbero
a. Soggetti con: id, nome
b. corso con: id, nome, oggetto id
c. tabella di collegamento per sapere che lo studente sta frequentando il corso: id, id utente, ID corso
d. nome dell'ID della tabella dell'elemento della libreria
e. una tabella di collegamento per sapere quale elemento della biblioteca lo studente sta prendendo in prestito: id della libreria, id da c
Sto provando a utilizzare la chiave primaria utente da c perché questo assicurerà che se l'utente non seguirà più il corso non gli sarà consentito prendere in prestito un libro. La tabella di collegamento si sovrapporrà se la relazione non esiste tra il corso e l'utente.
Il problema con questo è quello. Se ho bisogno di sapere il nome del soggetto per il quale lo studente ha preso in prestito un libro. Devo unirmi a quattro tavoli. Posso semplicemente aggiungere l'ID oggetto e per ottenere il nome del soggetto. Ma questo è ciò che odio. Se questo è davvero un problema con le prestazioni, l'uso delle viste rende le query più rapide ed è davvero fattibile per implementare le viste in un progetto.
Quindi credo che le mie domande in questo sono,
-
È davvero un grosso problema di prestazioni creare più tabelle con colonne univoche. Ho sentito che le colonne di indicizzazione aiutano parecchio?
-
Le viste sono utili per mantenere il database relazionale e rendere le query più veloci?
-
E nella tabella c non ho usato l'id della chiave primaria separata perché voglio assicurarmi che uno studente possa prendere in prestito un oggetto alla volta. È una buona pratica?