Definicja jest jednoznaczna

…kiedy w oparciu wyłącznie o jej treść, można bezbędnie określić, czy dany obiekt spełnia jej wymagania. (Przyjąłem śmiałe założenie, że wymagania są sprawdzalne - tj. urządzenia pomiarowe są dostępne, sprawne itp.)

Weźmy przykład z geometrii euklidesowej.

Wielokąt, wielobok, mat. płaska figura geometryczna będąca jedną (ograniczoną) z 2 części płaszczyzny, na które dzieli tę płaszczyznę łamana zwyczajna zamknięta (wraz z tą łamaną). .

Istnieją szczególne przypadki wielokąta. Wypisałem je poniżej w porządku, gdzie każdy kolejny zawiera w sobie wymagania poprzedniego.

Znane matematyczne catchphrase głosi:

Każdy kwadrat jest prostokątem, ale nie każdy prostokąt jest kwadratem

Załóżmy, że wymienione figury są w tej samej kolejności umieszczone na osi (w prawo rośnie).
Przy spełnionym warunku X > Y, możemy ukłuć ogólne stwierdzenie:

Każdy X jest Y, ale nie każdy Y jest X.


Niestety, a może stety, nie zawsze operujemy na tak ścisłych definicjach.

Definicja jest niejednoznaczna

Edgar Frank Codd - brytyjski informatyk, twórca relacyjnego modelu baz danych opisuje następujący konstrukt (który po czasie nazwiemy pierwszą postacią normalną) z użyciem pojęcia “atomic”.

In the relational model there is only one type of compound data: the relation.
The values in the domains on which each relation is defined are required to be atomic with respect to the DBMS.
A relational database is a collection of relations of assorted degrees.
All of the query and manipulative operators are upon relations, and all of them generate relations as results.

normalizacja_060.png

Mini-słowniczek, co dany termin w praktyce oznacza:

Relation to tabela
Attribute to kolumna
Domain to Type (typ)

DYGRESJA: A czym jest typ?

Typ ma nazwę - np. BOOLEAN, INTEGER, VARCHAR2, CHAR, NATURALN.
Typ jest zbiorem wszystkich* możliwych wartości, jakie dana wartość(sic!) może przyjąć.
Na przykład BOOLEAN to typ, który zawiera dwie wartości - TRUE i FALSE.

* Dla ścisłości należałoby stwierdzić, że typ zawiera wszystkie wartości, jakie dany system jest w stanie reprezentować. Mając to na uwadze - zbiór liczb całkowitych co prawda jest nieskończony, ale typ INTEGER (NUMBER(*,0)) jest tylko kontenerem, który zawiera liczby podległe nadrzędnej zasadzie. Ogranicza go moc obliczeniowa skończonego komputera.

Więcej na ten temat w rozdziale 2 książki:
Type Inheritance and Relational Theory. Subtypes, Supertypes, and Substitutability - C. J. Date

W praktyce wystarczy wiedzieć, że Type/Domain to nazwany zbiór wartości.


Użyte przez Codda kryterium “atomowości” wartości, zrodziło wiele interpretacji o tym, czym 1NF tak naprawdę jest.

Dlaczego?

Weźmy fragment z polskiej Wikipedii

normalizacja_065.png

Wspomniana elementarność (atomowość, niepodzielność) wartości, rozumiana bezwzględnie, występuje dla komputera przecież dopiero na poziomie bitu (0 lub 1).

W rozumieniu bardziej abstrakcyjnym - “atomowość” zagnieżdżona jest w kontekście.

Odnosi się do najmniejszej użytecznej (np. dla danej aplikacji) jednostki informacji.

Definicje 1NF, takie jak ta z wikipedii, nie zawierają tego “to zależy”.

Przyjmując elementarność wartości atrybtów za relatywną, obie tabele poniżej mogą (ale nie muszą) być w 1NF.

Name Surname
Urszula Woźniak
Marek Woźniak
Zofia Woźniak
Piotr Woźniak

Name
Urszula Woźniak
Marek Woźniak
Zofia Woźniak
Piotr Woźniak

Dopiero w momencie, gdy zasadne będzie żądanie używanie np. tylko imienia, to 1NF zostaje naruszona.

Na zakończenie - cytat z bloga Fabiana Pascala, specjalisty w dziedzinie modelu relacyjnego

So what is really atomic depends on how you plan to use your data.

Takie ujęcie dodaje ambiwalencji, ale zwiększa zrozumienie. Przynajmniej u mnie;)