sql >> Database teknologi >  >> RDS >> PostgreSQL

Er der nogle muligheder for et tilslutningsbord for mange-til-mange foreninger?

  • Hvis modellerne ikke deler farvegrupper, vil designet være én tabel:

    model [model] comes in color [color]
    
  • Hvis modeller deler farvegrupper, skal du have to tabeller:

    model [model] comes in the colors of group [group]
    group [group] has color [color]
    

    Disse tabeller forbindes med projektion til den første tabel:

    SELECT model, color FROM model_group NATURAL JOIN group_color
    
  • Hvis en model kan have ekstraordinære tilgængelige og/eller utilgængelige farver ud over eller i stedet for en gruppe, så hav undtagelsestabeller. En tabels gruppe er nu dens standard farver (hvis nogen):

    model [model] has default color group [group]
    group [group] has color [color]
    model [model] is exceptionally available in color [color]
    model [model] is exceptionally unavailable in color [color]
    

    Undtagelsestabellerne er derefter henholdsvis UNIONed med og MINUSED/EXCEPTed fra et JOIN-plus-PROJECT/SELECT for at give den første tabel:

    SELECT group, color FROM model_default NATURAL JOIN group_colour
    EXCEPT SELECT * FROM model_unavailable
    UNION SELECT * FROM model_available
    

"Redundans" handler ikke om værdier, der optræder flere steder. Det handler om, at flere rækker angiver det samme om applikationen.

Hver tabel (og forespørgselsudtryk) har en tilknyttet fill-in-the-(named-)blanks-erklæringsskabelon (alias prædikat). De rækker, der giver et sandt udsagn, går i tabellen. Hvis du har to uafhængige prædikater, skal du bruge to tabeller. De relevante værdier står i rækkerne af hver enkelt.

Re rækker med udtalelser om applikationen ser dette. (Og søg i mine andre svar på en tabels "sætning" eller "kriterium".) Normalisering hjælper, fordi den erstatter tabeller, hvis rækker angiver ting af formen "... OG ..." med andre tabeller, der angiver "... " separat. Se dette og dette.

Hvis du deler grupper og kun bruger en enkelt to-kolonne tabel til model og farve, er dens prædikat:

FOR SOME group
    model [model] comes in the colors of group [group]
AND group [group] has color [color]

Så den anden kugle fjerner et enkelt "AND" fra dette prædikat, dvs. kilden til en "multivalued dependency". Hvis du ellers ændrer en models gruppe eller en gruppes farver, skal du samtidigt ændre flere rækker. (Pointen er at reducere fejl og kompleksitet fra redundans, ikke at spare plads.)

Hvis du ikke vil gentage strengene af implementerings(afhængige) årsager (plads taget eller hastighed af operationer på bekostning af flere joinforbindelser), så tilføj en tabel med navne-id'er og -strenge og erstat dine gamle navnekolonner og -værdier med id-kolonner og -værdier. (Det er ikke normalisering, det komplicerer dit skema af hensyn til implementeringsafhængige dataoptimeringsafvejninger. Og du bør demonstrere dette er nødvendigt og virker.)



  1. ORA-01008:ikke alle variable er bundet. De er bundet

  2. mysql vælg top n max værdier

  3. PSQLEundtagelse:FEJL:Relationen TABLE_NAME eksisterer ikke

  4. SQL Server-fejl 109:Der er flere kolonner i INSERT-sætningen end værdier angivet i VALUES-sætningen