2009-08-11 14 views
31

Czy ktoś może mi pomóc, aby wiedzieć, co jest normalizacja w mysql i w tym przypadku i jak musimy go używać ..Normalizacja w MySQL

góry dzięki.

Odpowiedz

65

staram się próbować wyjaśnić normalizację W laika tutaj. Po pierwsze, jest to coś, co dotyczy relacyjnej bazy danych (Oracle, Access, MySQL), więc nie jest tylko dla MySQL.

Normalizacja polega na upewnieniu się, że każda tabela ma tylko minimalne pola i aby pozbyć się zależności. Wyobraź sobie, że masz zapis pracownika, a każdy pracownik należy do działu. Jeśli przechowujesz dział jako pole wraz z innymi danymi pracownika, masz problem - co się stanie, gdy dział zostanie usunięty? Musisz zaktualizować wszystkie pola działu i istnieje możliwość błędu. A co, jeśli niektórzy pracownicy nie mają działu (być może niedawno przydzielonego?). Teraz będą puste wartości.

Zatem, w skrócie, normalizacja polega na unikaniu pól, które będą puste i upewnieniu się, że wszystkie pola w tabeli należą tylko do jednej domeny opisywanych danych. Na przykład w tabeli pracowników mogą to być id, nazwa, numer ubezpieczenia społecznego, ale te trzy pola nie mają nic wspólnego z departamentem. Tylko pracownik określa, do którego działu należy pracownik. Oznacza to, że w którym dziale pracownik powinien znajdować się w innej tabeli.

Oto prosty proces normalizacji.

EMPLOYEE (<employee_id>, name, social_security, department_name) 

To nie jest znormalizowane, jak wyjaśniono. Znormalizowany formularz może wyglądać tak, jakby tablica pracowników była odpowiedzialna tylko za jeden zestaw danych. Więc gdzie przechowujemy, do którego działu należy pracownik? W innej tabeli To nie jest optymalne. Co się stanie, jeśli nazwa działu się zmieni? (zdarza się to w całym rządzie USA). W związku z tym lepiej jest wykonać tę operację. Są to pierwsza normalna forma, druga normalna forma i trzecia normalna forma. Ale jeśli nie uczysz się kursu DB, zazwyczaj wybieram najbardziej znormalizowaną formę, jaką rozumiem.

Mam nadzieję, że to pomoże.

+0

dziękuję, że pomogłeś człowiekowi ... – Fero

+0

"Co, jeśli nazwa działu się zmieni?" nie ma nic wspólnego z normalizacją. (Np. Jesteś przeciwny twojemu własnemu "upewnieniu się, że każda tabela ma tylko minimalne pola i aby pozbyć się zależności".) Ani nie zastępuje kolumn przez identyfikatory ogólnie. Oczywiście ma to coś wspólnego z zastąpieniem tabeli większą ilością tabel, ale to ogólne pojęcie nie jest normalizacją, a raczej normalizacja jest tego przykładem. Jesteś (czasami, a czasem nie), łącząc te dwa. – philipxy

13

Normalizacja nie dotyczy tylko MYSQL. Jest to ogólna koncepcja bazy danych.

Normalizacja jest procesem efektywnego organizowania danych w bazie danych . Istnieją dwa cele procesu normalizacji: eliminując nadmiarowych danych (na przykład, przechowywania tych samych danych w więcej niż jednej tabeli) i zapewniające zależności danych sprawiają sens (tylko przechowywania danych dotyczących w tabeli). Obie te wartości są godne celów , ponieważ zmniejszają ilość miejsca, z którego korzysta baza danych , i zapewniają logiczną przechowywanie danych .

Normalne formularze w języku SQL podano poniżej.

Pierwsza postać normalna (1NF): Relacja jest mówi się w 1nF jeśli ma tylko pojedynczych cennych atrybutów, ani powtarzając ani tablice są dozwolone.

Druga postać normalna (2NF): Relacja mówi się w 2NF jeśli jest w 1NF i każdy atrybut klucz nie jest w pełni funkcjonalny zależne od pierwotnego klucza.

Trzecia postać normalna (3NF): Mówimy, że relacja ma wartość 3NF, jeśli jest w 2NF, a nie ma zależności przechodnich.

Boyce-Codda (BCNF): a relacja mówi się w BCNF wtedy i tylko wtedy, gdy każdy wyznacznikiem w relacji jest kluczowym kandydatem.

Czwarta postać normalna (4NF): Relacja ma wartość 4NF, jeśli znajduje się w BCNF i nie zawiera zależności wielowartościowej.

Piąta postać normalna (5NF): Relacja jest mówi się w 5NF wtedy i tylko wtedy, gdy każdy dołączyć zależność w stosunku implikuje przez kluczy kandydujących relacji.

Kluczowa forma domeny (DKNF): Mówimy , że relacja jest w DKNF, jeśli jest wolna od wszelkich anomalii modyfikacji. Wstawianie, usuwanie i aktualizowanie anomalie podlegać modyfikacji anomalie

SEEL również

Database Normalization Basics

+4

Myślę, że masz błąd 4NF. Czy nie powinno to być "bez wielowymiarowych ZALEŻNOŚCI"? Atrybuty wielowartościowe są już zabronione przez 1NF! –

+2

Edytowane. @ Thomas Padron-McCarthy, dzięki za wskazanie – rahul

3

Jest to technika dla zapewnienia, że ​​dane pozostają spójne, poprzez eliminację powielania.Zatem baza danych, w której ta sama informacja jest przechowywana w więcej niż jednej tabeli, nie jest znormalizowana znormalizowana.

Zobacz artykuł z Wikipedii na Database normalization.

(Jest to ogólna technika dla relacyjnych baz danych, a nie specyficzne dla MySQL.)

0

W dziedzinie relacyjnych baz danych projektowania, normalizacja jest systematyczne sposobem zapewnienia, że ​​baza struktura nadaje się do kwerendy ogólnego przeznaczenia i wolne od niektórych niepożądanych nieprawidłowości w usuwaniu charakterystyk, aktualizacji i - które mogą doprowadzić do utraty integralności danych przez . [1] E.F. Codd, wynalazca modelu relacyjnego , wprowadził pojęcie normalizacji i to, co znamy teraz jako , pierwszą normalną formę z 1970 roku. [2] W 1971 r. Codd zdefiniował drugą i trzecią normalną formę , [3] i Codd oraz Raymond F. Boyce zdefiniował normalną formę Boyce-Codda w 1974 r. [4] Wyższa zwykłe formy zostały określone innych teorii W następnych latach ostatnia jest szósta postać normalnej wprowadzony przez Chris Data Hugh Darwen Nikos Lorentzos w 2002. [5]

nieformalnie relacyjnej bazie stół (skomputeryzowana przedstawienie od relacji) jest często opisywany jako „znormalizowanej”, jeżeli jest on w normalnej postaci trzeciego (3NF) [6]. Większość tabel 3NF jest wolna od wad wstawiania, aktualizacji i usunięcia, czyli w większości przypadków Tabele 3NF są zgodne z BCNF, 4NF i 5NF (ale zazwyczaj nie 6NF).

Podstawowy projekt bazy danych jest taki, że projektant powinien stworzyć w pełni znormalizowany projekt; Selektywna denormalizacja może następnie zostać wykonana dla powodów związanych z wydajnością. [7] Jednak niektóre dyscyplin modelowania, takie jak podejścia modelowania wymiarową danych konstrukcja magazynu wyraźnie zaleca nieznormalizowaną wzorów, tj wzorów że w dużej mierze nie przylegają do 3NF [8].

Edit: Źródło: http://en.wikipedia.org/wiki/Database_normalization

+0

@Ali: Jeśli zamierzasz wycinać i wklejać z Wikipedii, podaj również link do źródła. – RichieHindle

+0

@RichieHindle; Zgoda. Właśnie edytowałem post. – Jonik

2

check this wpis nie zawiera pomocne wskazówki

Barry'ego Tutorial na zrozumienie schematu bazy danych

http://www.youtube.com/watch?v=KqvIGYjcLQ4 
2

Podczas tworzenia schematu bazy danych dla aplikacji, należy upewnić się, że można uniknąć wszelkich informacji jest przechowywane w więcej niż jednej kolumnie w różnych tabelach.

Ponieważ każda tabela w DB identyfikuje znaczącą całość w aplikacji, unikalny identyfikator jest dla nich niezbędny.

Teraz, decydując o schemacie przechowywania, różne rodzaje relacji są identyfikowane pomiędzy tymi elementami (tabele), viz-a-viz, jeden-do-jednego, jeden-do-wielu, wiele-do-wielu.

  1. dla relacji jeden-do-jednego (np. Student ma unikalną pozycję w klasie ), ta sama tabela może być stosowany do kolumn ZAPIS (z obu tabelach).
  2. Dla relacji jeden-do-wielu (np. Semestr może mieć wiele kursów ), klucz obcy jest utworzony w tabeli nadrzędnej.
  3. Przez wiele-do-wielu relacji (np. Prof. uczęszcza wielu uczniów i odwrotnie), trzeci stół musi być tworzone (z klucza podstawowego z obu tabelach jako klucz kompozytowego) i powiązane dane obu tabel będą przechowywane .

Gdy zajmiesz się wszystkimi tymi scenariuszami, twój schemat bazy danych zostanie znormalizowany do 4NF.