Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL таблица с приятели

Ако приемем, че всичките ви приятели също са в таблицата с потребители, ще ви трябва таблица с приятели, която дефинира проста връзка един към много - свързваща таблицата с потребители обратно към себе си. Така че

User Table
UserID int identity not null
[other attribute fields]

Friends Table
UserIDLink1 int
UserIDLink2 int 
[other attribute field]

Където и UserIDLink1, и UserIDLink2 са външни ключове в таблицата Users.

Така например, ако имам трима потребители

1 Joe
2 Bill
3 Jane

и Джо и Джейн са приятели, тогава таблицата Friends ще съдържа един ред

1 3

Горното имплицитно предполага, че ако A е приятел на B, тогава B е приятел на A - ако това не е така, вероятно бихте искали да преименувате UserIDLink1 и UserIDLink2 на UserID и FriendID или подобно - в този случай бихте имат и до удвояване на записите.

Също така за двупосочната конфигурация (A е приятел на B, ако B е приятел на A) трябва да настроите индекси в таблицата Friends за (UserIDLink1,UserIDLink2) и (UserIDLink2,UserIDLink1), за да гарантирате, че достъпът винаги е ефективен, ако търсихме или приятели на Джо, или приятели на Джейн (ако не сте настроили втория индекс, тогава първата заявка ще бъде ефективно търсене на индекс, но втората ще изисква пълно сканиране на таблицата).

Ако връзките ви не бяха двупосочни, това нямаше да е необходимо, за да разберете кои са приятелите на А, но все пак вероятно най-много ще се нуждаете от това, тъй като вероятно ще трябва също да разберете на кого B е приятел.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвате DELETE ON CASCADE на релация много към едно

  2. Как да намерите всички идентификатори на деца рекурсивно?

  3. Изберете отделна колона заедно с някои други колони в MySQL

  4. как да рандомизирам извличането на въпрос от базата данни?

  5. Издигането на съхранената процедура е несъвместимо с sql_mode=only_full_group_by, въпреки че sql_mode е празен