Ho commenti sul tuo attuale modello di dati.
1 - Dovresti avere un m-m separato per ogni relazione e non 1 tabella come ti mostri attualmente nel modello. Una ragione è che un'eventualità della tabella m-m potrebbe essere per uno o più valori FK. Un'eliminazione a cascata può eliminare diverse righe nella tabella m-m che contengono valori FK che non si desidera eliminare.
2 - La tua relazione dalla tabella da un lato a quella di giunzione è probabilmente facoltativa da un lato non obbligatoria mentre la modelli. La relazione facoltativa causa la creazione di un FK Null e ciò impedisce che si verifichi una sovrapposizione rimuovendo il valore non null e sostituendolo con null (se questo è ciò che si desidera).
3- La tua relazione dalla m-m alla tabella Location probabilmente non dovrebbe essere obbligatoria in quanto eliminerebbe le posizioni sull'eliminazione di una Carta, ad esempio. Potresti desiderare che questo sia facoltativo (vedi 2 sopra).
4 - Hai davvero bisogno di m-m? Sei sicuro? La tua attività non è chiara dalla domanda, ma forse hai solo bisogno di un 1-m. Dimostralo a te stesso con un esempio prima di modellarlo.
5 - È possibile evitare di avere 4 tabelle che probabilmente avrebbero le stesse colonne creando 1 tabella delle risorse con una colonna di tipo. Il tipo potrebbe essere: Carta, Illustrazione, ecc. In questo modo si salvano 3 tabelle e 3 tabelle di giunzione.
6 - Non è bene usare nomi di tabelle plurali. Microsoft lo faceva, ma non va bene! Preferisci nomi di tabelle singolari. I nomi plurali sono utili per denominare le raccolte.
Ora come da domanda relativa al GUID, puoi usare GUID ma renderà il test molto difficile. Renderebbe anche trovare una riga utilizzando GUID un incubo per l'utente se questa è una funzione prevista nel sistema. Le prestazioni possono risentire di enormi database. Prendi in considerazione l'utilizzo del tipo int quando possibile. Coding Horor - GUID come pro e contro del PK .