Skip to main content

Relazioni uno-a-molti in un database

Access: Relazione molti a molti - Tutorial 52 (Potrebbe 2024)

Access: Relazione molti a molti - Tutorial 52 (Potrebbe 2024)
Anonim

Una relazione uno-a-molti in un database si verifica quando ogni record nella tabella A può avere molti record collegati nella tabella B, ma ogni record nella tabella B può avere solo un record corrispondente nella tabella A. Una relazione uno-a-molti in un database è il design di database relazionale più comune ed è al centro del buon design.

Considera la relazione tra un insegnante e i corsi che insegna. Un insegnante può insegnare più corsi, ma il corso non avrebbe lo stesso rapporto con l'insegnante.

Pertanto, per ogni record in una tabella Insegnanti, potrebbero esserci molti record nella tabella Corsi. Questa è una relazione uno-a-molti: un insegnante a più corsi.

Perché è importante stabilire una relazione uno-a-molti

Per rappresentare una relazione uno-a-molti, sono necessarie almeno due tabelle. Vediamo perché.

Forse abbiamo creato una tabella in cui volevamo registrare il nome e i corsi insegnati. Potremmo progettarlo in questo modo:

Insegnanti e corsi
Teacher_IDNome dell'insegnanteCorso
Teacher_001CarmenBiologia
Teacher_002VeronicaMatematica
Teacher_003JorgeInglese

E se Carmen insegnasse due o più corsi? Abbiamo due opzioni con questo design. Potremmo semplicemente aggiungerlo al record esistente di Carmen, in questo modo:

Insegnanti e corsi
Teacher_IDInsegnante_NomeCorso
Teacher_001CarmenBiologia, matematica
Teacher_002VeronicaMatematica
Teacher_003JorgeInglese

Il design sopra, tuttavia, non è flessibile e potrebbe causare problemi in seguito quando si tenta di inserire, modificare o eliminare dati.

Rende difficile la ricerca di dati. Questo disegno viola il primo principio di normalizzazione del database, First Normal Form (1NF), che stabilisce che ogni cella di tabella dovrebbe contenere una singola porzione di dati discreti.

Un'altra alternativa di design potrebbe essere quella di aggiungere semplicemente un secondo disco per Carmen:

Insegnanti e corsi
Insegnante_IDInsegnante_NomeCorso
Teacher_001CarmenBiologia
Teacher_001CarmenMatematica
Teacher_002VeronicaMatematica
Teacher_003JorgeInglese

Ciò aderisce a 1NF ma è ancora un progetto di database scadente perché introduce ridondanza e potrebbe gonfiare inutilmente un database molto grande. Ancora più importante, i dati potrebbero diventare incoerenti. Ad esempio, cosa succede se il nome di Carmen è cambiato? Qualcuno che lavora con i dati potrebbe aggiornare il suo nome in un record e non aggiornarlo nel secondo record. Questo design viola la Second Normal Form (2NF), che aderisce a 1NF e deve anche evitare le ridondanze di più record separando sottoinsiemi di dati in più tabelle e creando una relazione tra loro.

Come progettare un database con relazioni uno-a-molti

Per implementare una relazione uno-a-molti nella tabella Insegnanti e Corsi, suddividiamo le tabelle in due e le collegheremo utilizzando una chiave esterna.

Qui, abbiamo rimosso la colonna Corso nella tabella Insegnanti:

Insegnanti
Insegnante_IDInsegnante_Nome
Teacher_001Carmen
Teacher_002Veronica
Teacher_003Jorge

Ed ecco la tabella dei corsi. Nota che la sua chiave esterna, Teacher_ID, collega un corso a un insegnante nella tabella Insegnanti:

corsi
Course_IDNome del corsoTeacher_ID
Course_001BiologiaTeacher_001
Course_002MatematicaTeacher_001
Course_003IngleseTeacher_003

Abbiamo sviluppato una relazione tra la tabella Insegnanti e quella dei corsi utilizzando una chiave esterna.

Questo ci dice che sia Biologia che Matematica sono insegnate da Carmen e che Jorge insegna inglese.

Possiamo vedere come questo design evita eventuali ridondanze, consente ai singoli insegnanti di insegnare più corsi e implementa una relazione uno-a-molti.

I database possono anche implementare una relazione uno-a-uno e una relazione molti-a-molti.