Wpis z mikrobloga

#bazydanych
Mam tabelę użytkowników, chcę zaimplementować tabelę znajomości, więc utworzyłem tabelę 'Friends' z dwiema kolumnami obcych kluczy z tabeli użytkowników. Mogę się jakoś zabezpieczyć na bazie przed duplikacją rekordów?
np. znajmość 2 z 3 to samo co 3 z 2 więc te rekordy są duplikatami.
Brzmi jak popularny problem, ale nie znalazłem dobrego rozwiązania :/
#programowanie #bazy #sqlite3
  • 22
ja widzę 2 podejścia, oba nienajlepsze
1. trigger, który przy wstawianiu znajomości X do Y sprawdza czy nie istnieje Y do X i nie dochodzi do wstawienia. Problem wtedy jest taki, że jeśli chcesz wybrać znajomych Z, to musisz sprawdzić Z w obu kolumnach - i ciągle o tym pamiętać.
@RapRose: 2. trigger, który przy wstawianiu X do Y wstawi też Y do X. Wtedy raz przeszukujesz tabelę i nie musisz pamiętać o przeszukiwaniu w obie strony przy każdym zapytaniu, ale masz 2 razy więcej rekordów

@joolekk edytowałem właśnie jak napisałeś :P
@aardwolf: a co jeżeli nie mam jeszcze relacji 2 z 3 i 3 będzie chciało nawiązać relację z 2? wtedy nie przyjmie mi nowej relacji. Ale mogę w zasadzie przed zapytaniem do bazy posortować i wtedy faktycznie sprawdzać, bo będę miał zawsze parę mniejsze z większym. To jest też jakiś pomysł :)