Skip to main content

Relacions d'un a molts en una base de dades

Anonim

Una relació d'un a molts en una base de dades es produeix quan cada registre de la Taula A pot tenir molts registres vinculats a la Taula B, però cada registre a la Taula B pot tenir només un registre corresponent a la Taula A. Una relació d'un a molts una base de dades és el disseny de base de dades relacional més comú i és el cor del bon disseny.

Considereu la relació entre un professor i els cursos que imparteixen. Un professor pot ensenyar diversos cursos, però el curs no tindria la mateixa relació amb el professor.

Per tant, per a cada registre de la taula de professors, hi ha molts registres a la taula de cursos. Aquesta és una relació d'un a molts: un professor a diversos cursos.

Per què és important establir una relació entre persones

Per representar una relació d'un a molts, necessiteu almenys dues taules. Vegem per què?

Potser hem creat una taula on volíem registrar el nom i els cursos impartits. Podríem dissenyar-ho així:

Professors i Cursos
Teacher_IDTeacher_NameCurs
Professor_001CarmenBiologia
Professor_002VeronicaMatemàtiques
Professor_003JorgeAnglès

Què passa si Carmen ensenya dos o més cursos? Tenim dues opcions amb aquest disseny. Podríem afegir-lo al registre actual de Carmen, així:

Professors i Cursos
Teacher_IDProfessor_NomCurs
Professor_001CarmenBiologia, matemàtiques
Professor_002VeronicaMatemàtiques
Professor_003JorgeAnglès

El disseny anterior, però, és inflexible i pot provocar problemes més endavant quan intenteu inserir, editar o eliminar dades.

Fa que sigui difícil buscar dades. Aquest disseny infringeix el primer principi de normalització de la base de dades, First Normal Form (1NF), que indica que cada cel · la de la taula ha de contenir una única i discreta informació.

Una altra alternativa de disseny podria ser simplement afegir un segon disc de Carmen:

Professors i Cursos
Professor_IDProfessor_NomCurs
Professor_001CarmenBiologia
Professor_001CarmenMatemàtiques
Professor_002VeronicaMatemàtiques
Professor_003JorgeAnglès

Això s'adhereix a 1NF, però encara és un disseny de base de dades deficient perquè introdueix redundància i pot innecessàriament fer innecessàriament una base de dades molt gran. Més important encara, les dades podrien ser incompatibles. Per exemple, què passa si el nom de Carmen ha canviat? Algú que treballi amb les dades podria actualitzar el seu nom en un registre i no actualitzar-lo en el segon registre. Aquest disseny infringeix el segon formulari normal (2NF), que s'adhereix a 1NF i també ha d'evitar el redundància de diversos registres, separant subconjunts de dades en múltiples taules i creant una relació entre ells.

Com dissenyar una base de dades amb relacions d'un a molts

Per implementar una relació d'un a molts en la taula de Professors i Cursos, trencem les taules en dos i enllaçem-les utilitzant una clau externa.

Aquí, hem eliminat la columna Curs a la taula de professors:

Professors
Professor_IDProfessor_Nom
Professor_001Carmen
Professor_002Veronica
Professor_003Jorge

I aquí teniu la taula de cursos. Tingueu en compte que la seva clau externa, Teacher_ID, vincula un curs a un professor a la taula Teachers:

Cursos
Curs_IDNom del cursTeacher_ID
Curs_001BiologiaProfessor_001
Curs_002MatemàtiquesProfessor_001
Curs_003AnglèsProfessor_003

Hem desenvolupat una relació entre la taula de professors i els cursos amb una clau externa.

Això ens diu que tant la biologia com la matemàtica són impartides per Carmen i que Jorge ensenya anglès.

Podem veure com aquest disseny evita possibles redundàncies, permet que els professors individuals imparteixin múltiples cursos i implementi una relació d'un a molts.

Les bases de dades també poden implementar una relació d'un a un i una relació de molts a molts.