Salta el contingut

DAM - DAW - MP 0484 Bases de Dades

Exemple de Pas de Model ER a Model Relacional

La casa per la teulada

Donat el diagrama ER següent, fes-ne la traducció al model relacional, aplicant els passos un a un:

laCasaPerLaTeulada

Per cada Entitat creem una nova Taula amb la seva clau primària i tots els atributs.

Solució

  • TIPUS ( codiTipus, descripcioTipus

  • CARACTERISTICA ( codiCarac, descripcioCarac

  • CONCEPTE ( codiConc, descripcioConc

  • PERSONA ( nif, nom, cognoms, adreca, telefon

  • HABITATGE ( codiHab, tipusVia, nomVia, altres, vendaLloguer, preuVendalloguer

  • DIA_HORA ( dia, hora

  • COMPRA_VENDA ( codiCV, descripcioCV

Les superclasses les tractarem com una entitat forta, com en el PAS 1, si no ho hem fet encara.

Per cadascuna de les subclasses crearem una nova taula que heretarà la clau primària de la superclasse, que alhora farà de clau forana.

Solució

  • TIPUS ( codiTipus, descripcioTipus

  • CARACTERISTICA ( codiCarac, descripcioCarac

  • CONCEPTE ( codiConc, descripcioConc

  • PERSONA ( nif, nom, cognoms, adreca, telefon

  • HABITATGE ( codiHab, tipusVia, nomVia, altres, vendaLloguer, preuVendalloguer

  • DIA_HORA ( dia, hora

  • COMPRA_VENDA ( codiCV, descripcioCV

  • PROPIETARI (nif
          on nif REFERENCIA PERSONA ( nif )

  • CONTACTE (nif
          on nif REFERENCIA PERSONA (nif )

  • CLIENT (nif
          on nif REFERENCIA PERSONA ( nif )

  • COMERCIAL (nif, telefonEmpresa, compteCorrent
          on nif REFERENCIA PERSONA ( nif )

Per cada entitat feble del model ER, crearem una taula que contingui tots els atributs simples més l'atribut o atributs clau primària de la taula fruit de l'entitat forta. Aquesta serà una clau forana.

La clau primària d'aquesta nova taula es forma amb la clau primària de l'entitat forta més l'atribut discriminant de la feble. Hem afegit com a clau forana la clau primària de l'entitat forta de qui depèn.

Solució

  • TIPUS ( codiTipus, descripcioTipus

  • CARACTERISTICA ( codiCarac, descripcioCarac

  • CONCEPTE ( codiConc, descripcioConc

  • PERSONA ( nif, nom, cognoms, adreca, telefon

  • HABITATGE ( codiHab, tipusVia, nomVia, altres, vendaLloguer, preuVendalloguer

  • DIA_HORA ( dia, hora

  • COMPRA_VENDA ( codiCV, descripcioCV

  • PROPIETARI (nif
          on nif REFERENCIA PERSONA ( nif )

  • CONTACTE (nif
          on nif REFERENCIA PERSONA (nif )

  • CLIENT (nif
          on nif REFERENCIA PERSONA ( nif )

  • COMERCIAL (nif, telefonEmpresa, compteCorrent
          on nif REFERENCIA PERSONA ( nif )

  • NOMINA ( nif, dataPagament, comptePagament, import
          on nif REFERENCIA COMERCIAL ( nif )

Tractarem cadascuna de les relacions binàries segons la seva cardinalitat:

  • 1:1

    escollim una de les taules, i, hi afegirem com a clau forana, la clau primària de l'altra taula. També hi afegirem els atributs de la interrelació. Si una de les entitats té participació parcial, escollirem aquesta per afegir-hi l'atribut clau forana.

  • 1:N

    afegim al costat N, una clau forana que referencïi la clau primària de la taula del costat 1. També afegirem els atributs de la interrelació, si en té, com atributs de la taula del costat N.

  • M:N

    Crearem una nova taula on la clau primària és la combinació de les claus primàries de les entitats relacionades. Cadascuna d'aquestes claus primàries serà alhora clau forana de les taules corresponents.

    També afegirem els atributs de la interrelació, si en té, com atributs de la nova taula creada.

Solució

  • TIPUS ( codiTipus, descripcioTipus

  • CARACTERISTICA ( codiCarac, descripcioCarac

  • TIPUS_CARACTERISTICA(potTenir) ( codiTipus, codiCarac )
          on codiTipus REFERENCIA TIPUS ( codiTipus )
          on codiCarac REFERENCIA CARACTERISTICA ( codiCarac )

  • CONCEPTE ( codiConc, descripcioConc

  • PERSONA ( nif, nom, cognoms, adreca, telefon

  • HABITATGE ( codiHab, tipusVia, nomVia, altres, vendaLloguer, preuVendalloguer, codiTipus(és), nifContacte(gestiona)
          on codiTipus REFERENCIA TIPUS ( codiTipus )(és)
          on nifContacte REFERENCIA CONTACTE ( nif )(gestiona)

  • HABITATGE_CARACTERISTICA(té) ( codiHab, codiCarac, valor )
          on codiHab REFERENCIA HABITATGE ( codiHab )
          on codiCarac REFERENCIA CARACTERISTICA ( codiCarac )

  • DIA_HORA ( dia, hora

  • COMPRA_VENDA ( codiCV, descripcioCV, codiCV (s'ha venut), nifClient (l'ha comprat), nifComercial (l'ha venut), dia, hora (el dia)
          on codiCV REFERENCIA COMPRA_VENDA ( codiCV )(s'ha venut)
          on nifClient REFERENCIA CLIENT ( nif )(l'ha comprat)
          on nifComercial REFERENCIA COMERCIAL ( nif )(l'ha venut)
          on (dia, hora) REFERENCIA DIA_HORA ( dia, hora )(el dia)

    La relació s'ha venut de cardinalitat 1:1 l'hem resolt mirant la participació

  • PROPIETARI (nif
          on nif REFERENCIA PERSONA ( nif )

  • HABITATGE_PROPIETARI(ésDe) ( codiHab, nif )
          on codiHab REFERENCIA HABITATGE ( codiHab )
          on nif REFERENCIA PROPIETARI ( nif )

  • CONTACTE (nif
          on nif REFERENCIA PERSONA (nif )

  • CLIENT (nif
          on nif REFERENCIA PERSONA ( nif )

  • COMERCIAL (nif, telefonEmpresa, compteCorrent
          on nif REFERENCIA PERSONA ( nif )

  • NOMINA ( nif, dataPagament, comptePagament, import
          on nif REFERENCIA COMERCIAL ( nif )

  • NOMINA_CONCEPTE(inclou) ( nif, dataPagament, codiConc, import )
          on (nif, dataPagament) REFERENCIA NOMINA ( nif, dataPagament )
          on codiConc REFERENCIA CONCEPTE ( codiConc )

    Fixa't bé com hem creat la PK de la relació NOMINA_CONCEPTE

    Inclou la PK de la taula NOMINA, que éstà composada per 2 camps: nif i dataPagament

    Inclou la PK de la taula CONCEPTE.

rep no es tracta ja que és la relació del l'Entitat Forta COMERCIAL amb l'Entitat Feble NOMINA i ja l'hem tractada al Pas 3

Aquesta relació no es tracta com a relació binària. Hem heretat la PK de l'Entitat Forta que ha passat a formar part de la PK de l'Entitat Feble

Sempre crearem una nova taula amb tots els atributs PK de cada entitat i els atributs de la relació.

Ens cal mirar la cardinalitat per determinar quins atributs formaran la PK de la nova taula:

  • Tots els costats Molts 👉 M:N:P:S:R:T

    la PK de la nova taula estarà formada per TOTS els atributs PK de totes les entitats de la Relació que estem tractant.

  • Algun costat Un

    la PK de la nova taula estarà formada per TOTS menys un dels atributs PK de les entitats de la Relació que estem tractant. L'atribut que no formi part de la PK ha de ser una entitat amb cardinalitat 1.

Solució

  • TIPUS ( codiTipus, descripcioTipus

  • CARACTERISTICA ( codiCarac, descripcioCarac

  • TIPUS_CARACTERISTICA ( codiTipus, codiCarac )
          on codiTipus REFERENCIA TIPUS ( codiTipus )
          on codiCarac REFERENCIA CARACTERISTICA ( codiCarac )

  • CONCEPTE ( codiConc, descripcioConc

  • PERSONA ( nif, nom, cognoms, adreca, telefon

  • HABITATGE ( codiHab, tipusVia, nomVia, altres, vendaLloguer, preuVendalloguer, codiTipus, nifContacte
          on codiTipus REFERENCIA TIPUS ( codiTipus )
          on nifContacte REFERENCIA CONTACTE ( nif )

  • HABITATGE_CARACTERISTICA ( codiHab, codiCarac, valor )
          on codiHab REFERENCIA HABITATGE ( codiHab )
          on codiCarac REFERENCIA CARACTERISTICA ( codiCarac )

  • DIA_HORA ( dia, hora

  • COMPRA_VENDA ( codiCV, descripcioCV, codiCV , nifClient , nifComercial , dia, hora
          on codiCV REFERENCIA COMPRA_VENDA ( codiCV )
          on nifClient REFERENCIA CLIENT ( nif )
          on nifComercial REFERENCIA COMERCIAL ( nif )
          on (dia, hora) REFERENCIA DIA_HORA ( dia, hora )

  • PROPIETARI (nif
          on nif REFERENCIA PERSONA ( nif )

  • HABITATGE_PROPIETARI ( codiHab, nif )
          on codiHab REFERENCIA HABITATGE ( codiHab )
          on nif REFERENCIA PROPIETARI ( nif )

  • CONTACTE (nif
          on nif REFERENCIA PERSONA (nif )

  • CLIENT (nif
          on nif REFERENCIA PERSONA ( nif )

  • COMERCIAL (nif, telefonEmpresa, compteCorrent
          on nif REFERENCIA PERSONA ( nif )

  • NOMINA ( nif, dataPagament, comptePagament, import
          on nif REFERENCIA COMERCIAL ( nif )

  • NOMINA_CONCEPTE ( nif, dataPagament, codiConc, import )
          on (nif, dataPagament) REFERENCIA NOMINA ( nif, dataPagament )
          on codiConc REFERENCIA CONCEPTE ( codiConc )

  • En aquest cas, com que la cardinalitat de dos costats és 1: COMERCIAL i HABITATGE, tenim dues possibles solucions:
          VISITA(visitar) (codiHab, nifClient, dia, hora, nifComercial)
          o bé
          VISITA(visitar) (nifComercial, nifClient, dia, hora, codiHab)
          on codiHab REFERENCIA HABITATGE ( codiHab )
          on nifClient REFERENCIA CLIENT ( nif )
          on nifComercial REFERENCIA COMERCIAL ( nif )
          on (dia, hora) REFERENCIA DIA_HORA ( dia, hora )