2009-03-12 12 views
8

Mam witrynę taką jak SO, Wordpress itp., Gdzie tworzysz post i możesz mieć (opcjonalne) znaczniki przeciwko niemu.Schemat bazy danych dla tagów (np. Każdy post ma kilka opcjonalnych tagów)

Co to jest wspólny schemat bazy danych do obsługi tego? Zakładam, że jest to wiele różnych struktur z trzema tabelami.

Ktoś ma jakieś pomysły?

+0

dlaczego ma znaczenie, w jaki sposób SO realizuje to. lepiej otworzyć nowe pytanie, które nie jest specyficzne dla SO (jeśli zastanawiasz się, w jaki sposób SO realizuje rzeczy wysyłając Jeffowi e-mail), –

+0

prawda, poprawię tytuł mojego pytania, aby nie był specyficzny dla SO. było to głównie jako przykład, bardziej niż cokolwiek innego. –

Odpowiedz

9

Trzy tablice wiele do wielu konstrukcji powinny być w porządku.

Np. Posts, PostsToTags(post_id,tag_id), Tags

Klucz jest indeksowany. Upewnij się, że PostsToTags tabeli jest indeksowany w obie strony (post_id,tag_id i tag_id,post_id) również wtedy odczytać wydajność jest bardzo krytyczny można wprowadzać indeksowany widok (co może dać Ci POST_NAME, nazwa_znacznika)

Będziesz oczywiście trzeba indeksów na słupach i Etykiety także.

+0

Zastanawiałem się, czy jestem na dobrej drodze i wygląda na to, że jest :) –

0

Nie jestem do końca pewien, czy to, co używa SO. Ale jest dobra dyskusja here.

1

"Zakładam, że jest to wiele różnych struktur, z trzema tabelami. Ktoś ma jakieś pomysły?"

Co ważniejsze, nie ma poważnych alternatyw, prawda? Dwie relacyjne tabele w relacji wiele do wielu wymagają przynajmniej tabeli asocjacji do przenoszenia całej kombinacji kluczy obcych.

Czy to robi? Kto wie. Ich model danych zawiera liczniki odwołań i - dla wszystkich znanych - znaczniki czasu daty i oryginalnego twórcę oraz wiele innych śmieci na temat znacznika.

Minimalnie muszą być trzy tabele.

To, co robią na SO, jest trudne.

0

Byłoby dobrze wiedzieć, jak Wordpress obsługuje znaczniki postów, a to da ci pewien pomysł.

+0

wordpress zrobić wiele dla wielu z trzema tabelami wierzę. –

-1

Inną możliwością jest to, że są tylko dwie tabele.

Biorąc pod uwagę, że istnieje maksymalnie 5 znaczników, tabela pytań z pięcioma zerowanymi odwołaniami klucza obcego do tabeli znaczników jest możliwa.

Niezbyt znormalizowany, ale może być bardziej wydajny.

+0

mało prawdopodobne, że będzie to bardziej wydajne. wprowadza horrendously złożone zapytania, gdy szukasz wielu tagów. –

+0

co jeśli tagi były przechowywane w jednym ograniczonym polu varchar i możesz użyć zapytania "podobnego"% tag% "" w tym polu, prawdopodobnie nadal niezbyt indeksowalnego – benPearce

+0

@ sambo99 - prawda w tym przypadku i dobry punkt. Szukanie pytań do konkretnego tagu byłoby do dupy. – Damovisa