Mysql
 sql >> база данни >  >> RDS >> Mysql

Съществуват ли практики/насоки за създаване на ненормализирани таблици по време на процеса на нормализиране?

TL;DR Трябва да следвате публикуван алгоритъм, за да разложите до дадена нормална форма.

PS Не сте получили Artist от оригиналния компактдиск чрез нормализиране, тъй като сте въвели нова колона. Но приемете, че таблицата Artist има очевидното значение. Защо мислиш, че "отново не е в трета нормална форма доколкото разбирам"? Ако изпълнител -> година в оригиналния компактдиск, това също е така в Artist. Но тогава {artist} е, с {artist_id}, CK (кандидат ключ) на Изпълнител, а Изпълнителят е в 3NF (и 5NF).

От оригиналната версия на въпроса ви плюс текущата, имате предложен компактдиск с основна таблица с колони cd_id, заглавие, група и година, съдържащ кортежи, където cd cd_id озаглавено заглавие е направено от група група които са формирани през година година . Колона cd_id е уникална, следователно е CK. FD {group} -> година също има.

Нормализирането не въвежда нови имена на колони. Той замества предложена базова таблица с други, всяка с по-малко подмножество от своите колони, които винаги се присъединяват към това, което би била нейната стойност. Нормализирането до BCNF се основава на FD (функционални зависимости), които също са това, което определя CKs на основна таблица. Така че вашият въпрос не съдържа разлагане. Възможна декомпозиция, напомняща на вашия въпрос, която може да има или да няма конкретни свойства, би била към таблици с набори от колони {cd_id, title, group} и {group, year}.

Други FD се съхраняват в оригинала. Някои държат заради това, което са колоните; някои държат заради CK; някои задържат, защото {group} -> година задържа; като цяло някои от тях са валидни, защото и трите са валидни. И може би други държат поради това какви кортежи трябва да влязат във връзката и какви ситуации могат да възникнат. Трябва да вземете решение за всеки възможен FD дали държи.

Разбира се, може да са ви казали че единствените, които държат, са тези, които трябва да държат при тези обстоятелства. Но вие няма беше казано, че единственият FD, който държи, е {group} -> година, защото има има тривиални FD и всяко супернабор от CK функционално определя всеки набор от колони .

Една дефиниция на 3NF е, че релацията е във 2NF и нито една неосновна колона не е транзитивно функционално зависима от който и да е CK. (Забележете, че всяко условие включва други дефиниции.) Ако искате да използвате това, за да разберете дали връзката ви е в 3NF, тогава трябва да разберете какво всички CKs са. Можете да направите това най-бързо чрез подходящ алгоритъм, но можете просто да видите кои набори от колони функционално определят всяка колона, но не съдържат по-малък такъв набор, тъй като това са CK. След това проверете двете условия в дефиницията.

Ако искате да нормализирате до 3NF, тогава трябва да следвате алгоритъм за разлагане до 3NF. Не обяснявате какъв процес смятате, че трябва да следвате. Но ако не следвате доказан алгоритъм, тогава каквито и компоненти да изберете, може или не винаги да се присъединят към оригинала и може или не може да бъде всеки в определена по-висока нормална форма. Имайте предвид, че примери за разлагане които видяхте, не са представяне на алгоритми за разлагане .

Дефинициите на NF (нормална форма) дават условия, на които една връзка трябва да отговаря, за да бъде в тази NF. Те не ви казват как да декомпозирате без загуба (запазване на FD, когато е възможно) до отношения в по-високи NF. Хората са разработили алгоритми за създаване на декомпозиции на определени NF. (И разлагането до даден NF по принцип не включва първо разлагане до по-ниски NF. Преминаването през по-ниски NF може всъщност да предотврати генерирането на добри разложения с по-висок NF на оригинала, когато стигнете до разлагане за по-висок NF.)

Може също да не осъзнавате, че когато някои FD са валидни, някои други трябва да запазят. Последното може да бъде определено чрез аксиомите на Армстронг от първите. Така че само защото сте се разложили, за да се отървете от определен FD, чието присъствие нарушава определен NF, не означава, че не е имало куп други, които са го нарушили, с които да не сте се справили. Те могат да присъстват в новите компоненти. Или те могат да не присъстват по проблемни начини, така че да не сте ги „запазили“, когато бихте могли да имате, което води до лош дизайн.

Научете за специфични алгоритми за NF и по този въпрос NF и самото нормализиране в учебник за колеж/университет/курс/презентация. Много са онлайн.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свържете се с mysql в докер контейнер от хоста

  2. Пакетен файл за mysqldump за архивиране на всяка база данни в отделен файл

  3. Доктрина 2 SUM() еквивалентен помощник?

  4. Как да извлечем категории и подкатегории в една заявка в sql? (mysql)

  5. Преобразувайте DateTime за MySQL с помощта на C#