Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Projektowanie baz danych dla aplikacji korzystających z hashtagów

Radziłbym zastosować typową relację wiele-do-wielu między wiadomościami a tagami.

Oznaczałoby to, że potrzebujesz 3 stołów.

  • Messages (kolumny Id , UserId i Content )
  • Tags (kolumny Id i TagName )
  • TagMessageRelations (kolumny:MessageId i TagId - aby tworzyć połączenia między wiadomościami i tagami - poprzez obce klucze wskazujące na Messages.Id / Tags.Id )

W ten sposób nie przechowujesz znacznika wiele razy, a jedynie tworzysz nową relację do wiadomości (oczywiście, jeśli ten znacznik już istnieje w tabeli znaczników).

W ten sposób możesz

  • łatwo policzyć, ile tagów są (SELECT COUNT(*) FROM Tags )
  • zapisz każdy tag tylko raz a wyszukiwanie tagów może być łatwo indeksowane
  • lub policzyć, ile razy dany tag został użyty na użytkownika - na przykład:

SELECT COUNT(*) FROM Tags INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id GROUP BY Messages.UserId




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wstawiaj zapytanie z ajaxem bez przeładowywania całej strony

  2. Grupowanie tabel w bazie danych MySQL

  3. Wiele, ale wzajemnie wykluczających się kluczy obcych — czy to jest droga?

  4. Kolumna SQLAlchemy JSON - jak wykonać zapytanie zawiera

  5. Jak dodać więcej niż jeden wiersz za pomocą Zend_Db?