2009-08-25 14 views
9

Mam istniejącą aplikację internetową i chcę dodać funkcję tagu, aby użytkownicy mogli oznaczać istniejące obiekty. Pytanie brzmi, czy powinienem dodać kolumnę znaczników do każdego obiektu? czy powinienem go znormalizować i użyć tabeli znaczników, w której każdy obiekt będzie miał kolekcję znaczników? Pochylam się do tego drugiego, ponieważ czuje się czystszy, łatwiejszy do raportowania i łatwiejszy do stworzenia chmury tagów. Ale ponieważ wiem, że zostało to rozwiązane 1000 razy, chciałem zapytać i zobaczyć, czy czegoś brakuje.Jak modelować znaczniki w bazie danych?

Odpowiedz

6

Czy przewidziano użytkowników, którzy muszą powiązać więcej niż jeden znacznik z obiektem?

Jeśli nie, dodaj TAG_ID fk do tabeli OBJECT. W przeciwnym razie, to potrzebne są trzy tabele w sumie poprawnie modelować wiele-do-wielu relacji:

PRZEDMIOT

  • OBJECT_ID (pk)

OBJECT_TAG_XREF

  • OBJECT_ID (pk, fk do OBJECT)
  • TAG_ID (pk, fk do TAG)

TAG

  • TAG_ID (pk)
+0

Jak ta zmiana związać przywieszki do użytkowników? Czy OBJECT_ID stanie się USER_ID? –

+1

@JuniperAsh: Będziesz musiał dodać kolumnę 'user_id' do' OBJECT_TAG_XREF' - tak samo jak pozostałe dwie kolumny, klucz podstawowy i klucz obcy do tabeli użytkowników. –

+0

Ma dużo więcej sensu! Dziękuję Ci! –

4

Tak, należy go normalizować. "Kolumna tagu" będzie obsługiwać tylko jeden tag na rekord lub będzie miała ohydną wydajność wyszukiwania.

2

Zdecydowanie znormalizować. Tabela dla znaczników, tabela dla istniejących obiektów i tabela powiązań między nimi.