sql >> Databáze >  >> RDS >> PostgreSQL

Existují nějaké možnosti pro tabulku spojení pro mnoho přidružení?

  • Pokud modely nesdílejí skupiny barev, pak by návrh tvořil jednu tabulku:

    model [model] comes in color [color]
    
  • Pokud modely sdílejí skupiny barev, pak mají dvě tabulky:

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

    Tyto tabulky se připojí projekcí k první tabulce:

    SELECT model, color FROM model_group NATURAL JOIN group_color
    
  • Pokud model může mít kromě nebo místo skupiny výjimečné dostupné a/nebo nedostupné barvy, pak mají tabulky výjimek. Skupina tabulky je nyní její výchozí barvy (pokud existují):

    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]
    

    Tabulky výjimek jsou následně sjednoceny a MINUSOVÁNY/VYJMUTY z JOIN-plus-PROJECT/SELECT, čímž se získá první tabulka:

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

„Redundance“ není o tom, že se hodnoty objevují na více místech. Jde o více řádků, které uvádějí totéž o aplikaci.

Každá tabulka (a výraz dotazu) má přidruženou šablonu příkazu fill-in-the-(named-)blanks (aka predikát). Řádky, které tvoří pravdivé tvrzení, jsou v tabulce. Pokud máte dva nezávislé predikáty, potřebujete dvě tabulky. Příslušné hodnoty jsou uvedeny v řádcích každého z nich.

Re řádky s prohlášeními o aplikaci viz toto. (A hledejte mé další odpovědi týkající se „příkazu“ nebo „kritéria“ tabulky.) Normalizace pomáhá, protože nahrazuje tabulky, jejichž řádky uvádějí věci ve tvaru „... AND ...“, jinými tabulkami, které uvádějí „... "samostatně. Podívejte se na toto a toto.

Pokud sdílíte skupiny a používáte pouze jednu dvousloupcovou tabulku pro model a barvu, její predikát je:

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

Takže druhá odrážka odstraňuje z tohoto predikátu jediné "AND", tj. zdroj "vícehodnotové závislosti". V opačném případě, pokud změníte skupinu modelu nebo barvy skupiny, musíte současně konzistentně měnit více řádků. (Smyslem je snížit chyby a složitost z důvodu redundance, nikoli šetřit místo.)

Pokud nechcete opakovat řetězce z důvodů implementace (závislých) (zabraný prostor nebo rychlost operací na úkor více spojení) pak přidejte tabulku ID názvů a řetězců a nahraďte sloupce a hodnoty starých názvů sloupci a hodnotami ID. (To není normalizace, to komplikuje vaše schéma kvůli kompromisům při optimalizaci dat závislých na implementaci. A měli byste prokázat to je potřeba a funguje.)



  1. Vrácení informací o sloupci pro uloženou proceduru na serveru SQL Server:sp_sproc_columns

  2. Pochopení typů a formátů MapReduce

  3. Jaké jsou rozdíly mezi seskupeným a neshlukovaným indexem?

  4. Vyhoďte chybu bránící aktualizaci tabulky ve spouštěči MySQL