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

Моята таблица има ли нужда от повече нормализация?

Нормализацията изисква познаване на функционални зависимости (FD) и зависимости на присъединяване (FD). Не си ги дал ти.

Вашето приложение Можем да ви кажем само FD и JD, ако знаем точно каква е "връзката, която исках да изразя" (т.е. предикат) за всяка таблица (т.е. до точката, в която можем да разгледаме ситуация и да знаем за всеки възможен ред дали той прави вярно предложение от предиката и следователно принадлежи към таблицата) и точно какви възможни ситуации могат да възникнат (чрез „бизнес правила“ относно възможни ситуации на приложения, еквивалентни на ограничения върху възможните състояния на базата данни).

Вашите „ключове“ Не си давал ФД. Току-що дадохте един кандидат-ключ (CK) и „уникален ключ“. Но не можете да определите някои или всички CK без да знаете определени неща за FD. Така че, когато давате CK, това е същото като да кажете, че има и не са определени FD. Трябва да ни кажете какво сте ни дали, когато давате някои набори от колони, обозначени като PK или „уникален ключ“:Дали „уникален ключ“ е CK (не съдържа по-малко уникално подмножество) или просто суперключ (уникален)? Дадохте ли всички CK или може да има и други? Може ли да има други суперключове освен супермножествата на дадените? Най-полезно е, ако просто ни кажете точно кои FDs знаете, че притежават (чрез минимално покритие) и кои знаете, че не притежават.

Предположения
Нямам представа какво is_calculated е за.
Може би дадена date и meal двойка има точно едно content ?

TL;DR Наистина трябва да проверите всеки възможен набор от колони, за да видите дали той функционално определя всяка друга колона. Т.е. дали за всяко състояние на база данни подред от стойности за набора от колони се появява само с една стойност за колоната. Можем само да гадаем без ясно разбиране на вашите предикати и вашето приложение. Можете да намалите работата по следното:Ако набор от колони е уникален, тогава неговите надмножества определят всички останали колони. Ако набор от колони е минимално уникален (е CK), тогава никой от неговите по-малки подмножества не определя всички други колони. Можете да потърсите контрапримери за предполагаеми FD, където два реда могат да имат един и същ подред от стойности за предполагаем детерминант, но имат различни стойности за предполагаем определен атрибут. Аксиомите на Армстронг генерират всички FD, подразбиращи се от дадени.

JDs Нормализирането към 4NF и 5NF включва разделяне на таблицата на множество таблици, за да се елиминират JD, които не се подразбират от CK. Предикатът на една таблица може да бъде изразен като И на други точно когато JD отговаря на наборите от колони на предикатите. Връзката е в 5NF, когато всеки конюнкт във всеки JD се припокрива с някой друг на поне CK. (Алгоритъмът за членство на Фейгин.)

PS Ако ви интересуват ограниченията, загубихте ли едно, когато преминахте от една маса на две?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Завъртете таблица и покажете n подредени времеви серии

  2. MySQL и вложен набор:бавно JOIN (без използване на индекс)

  3. Как да промените размера на колоната в MySQL

  4. Мога ли да използвам слоя на базата данни на Laravel самостоятелно?

  5. LIMIT / OFFSET в Oracle 11G