Grunden til en ekstra tabel, er at du så kun skal angive hvert tag én gang. Hvis du gemmer hver tag, tilknyttet til ét specifikt dokument, skal du oprette en ny række i din doc_tags tabel, hver gang du tilknytter et eksisterende tag til et nyt/andet dokument.
Eksempel:
doc_files
ID | Path | Filename
---------------------
1 | C:\ | test.doc
2 | C:\ | test2.doc
3 | C:\ | test3.doc
doc_tags
TAGID | DOCID | Tag
---------------------
1 | 1 | Hest
2 | 2 | Hest
3 | 3 | Hest
4 | 1 | Kat
5 | 2 | Hund
6 | 3 | Kat
Du får med andre ord mange gengangere af data.
Du bør stræbe efter at overholde de
3 normalformerHvis du gør det, får du følgende:
doc_files
ID | Path | Filename
---------------------
1 | C:\ | test.doc
2 | C:\ | test2.doc
3 | C:\ | test3.doc
doc_tags
TAGID | Tag
---------------------
1 | Hest
2 | Kat
3 | Hund
doc_file_tags
TAGID | DOCID
--------------
1 | 1
1 | 2
1 | 3
2 | 1
3 | 2
2 | 3
Du har dermed gjort dine data i begge tabeller unikke, og samlet dem i en tredje tabel. Det virker måske som overkill, men det er standard databasedesign. Ikke alene er det nemmere for databasen at holde styr på dine data, da der er mindre data og flere nøgler at indeksere, det fylder også meget mindre på disken.
Genbrugelige data bør, som hovedregel, holdes i en tabel for sig selv. Tags er genbrugelige, da ét tag kan bruges på flere dokumenter.