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?
9
A
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)
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.
Jak ta zmiana związać przywieszki do użytkowników? Czy OBJECT_ID stanie się USER_ID? –
@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. –
Ma dużo więcej sensu! Dziękuję Ci! –