• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

struktura tabeli

VPS Starter Arubacloud
0 głosów
654 wizyt
pytanie zadane 10 sierpnia 2018 w SQL, bazy danych przez mi-20 Stary wyjadacz (13,190 p.)
Witam, jak powinna wyglądać tabela w bazie danych kiedy chcemy zrealizować dodawanie znajomych, coś takiego jak jest na fb. Do znajomych których nie ma na naszej liście znajomych możemy wysłać zaproszenie, następnie czekamy na akceptację i po akceptacji ta osoba pojawia się na naszej liście.

2 odpowiedzi

+2 głosów
odpowiedź 10 sierpnia 2018 przez Storkeus Obywatel (1,120 p.)
Ja bym tu chyba zrobił dwie tabele, jedną z danymi użytkowników a drugą z połączeniami między nimi. W tabeli z połączeniami możesz jeszcze przechowywać typ połączenia (np. oczekuje na akceptację, znajomy, zablokowany...)
komentarz 10 sierpnia 2018 przez Jackob Obywatel (1,430 p.)
Chyba lepszym rozwiązaniem było by 1 tabela do całości i jedna dla każdego użytkownika i w niej rekordy z info o stanie znajomy/zablokowany/akceptacja połączone relacyjnie z główna tabelą. Wprawdzie więcej miejsca zajmie ale optymailzacja/prostota. Każda tabelę nazywaj najlepiej con+idużytkownika i twórz po potwierdzeniu e-mail/innej rzeczy a jeżeli tego nie wymagasz to po rejestracji(wyszukaj id w bazie po loginie).
komentarz 10 sierpnia 2018 przez Comandeer Guru (599,730 p.)
@Jackob to nie ma sensu. Taki model się może sprawdzić w dokumentowej bazie danych, ale nie w relacyjnej.

No i jaka to optymalizacja? Gdy będę miał 10000 użytkowników, to będę mieć co najmniej 10001 tabel. Dodatkowo jak cały ten system ma się zachowywać w chwili, gdy użytkownik zostaje usunięty? W przypadku normalnych relacji robią to za nas klucze obce. W przypadku osobnej tabeli trzeba to robić ręcznie. A żeby zrobić to poprawnie, trzeba to robić w transakcji (żeby usunięcie użytkownika spowodowało wszystkie kolejne, potrzebne kroki i by baza została spójna). Itp., itd.

Takie rozwiązanie nie rozwiązuje żadnych problemów, tylko dokłada kolejnych. Jedynym sensownym rozwiązaniem w przypadku SQL są dwie tabele (lub 3, jeśli potraktujemy zaproszenia jako coś osobnego), z czego druga powinna mieć odpowiednie klucze obce i klucz unikalny na pary id użytkowników.
komentarz 10 sierpnia 2018 przez Jackob Obywatel (1,430 p.)
Gdy usuwasz użytkownika usuwasz jego tabele i wszystkie rekordy z jego id w tabelach innych z pomocą relacji gdzie jego id w tabeli głównej to klucz obcy w tabelach użytkowników. Po prostu do komórki w tabelach innych userów dajesz id z tabeli użytkowników do logowania. Ja po prostu tworzę i rozwijam mój system. Jeżeli się nie zgadzasz to ok, każdy ma swoje zdanie.
komentarz 10 sierpnia 2018 przez Comandeer Guru (599,730 p.)

Jeżeli się nie zgadzasz to ok, każdy ma swoje zdanie

W ten sposób można przepchnąć każdą złą praktykę, nazywając ją "własnym zdaniem". Jest jednak pewna różnica pomiędzy subiektywnymi opiniami, a opiniami, które zyskały intersubiektywny, społeczny konsensus (jak choćby SOLID czy traktowanie baz SQL jako zbioru relacji a nie obiektów). 

komentarz 10 sierpnia 2018 przez Wiciorny Ekspert (269,120 p.)
Tworzenie tabeli  dla 1 użytkownika? Ktoś oszalał? To nie jest byt stały, byt ISTOTNY... użytkowników może być tysiące... utworzysz 1000 tabel? Non-sens...

Rekord stanowić powinien użytkownika, a z bazami relacyjnymi bardzo prosto dodać pole np stanowiące związek pomiedzy encjami i ten związek np -> znormalizować na osobną tabele przechowująca samą relacje :)
0 głosów
odpowiedź 10 sierpnia 2018 przez Catalonya1992 Mądrala (5,440 p.)
Możesz zrobić jedną tabelę z osobami. Jedną z kolumn tabeli będzie status, np. W - wysłano, Z- zaakceptowano. Na tej tabeli tworzysz widok, gdzie piszesz select * from osoby where status = 'Z'; Widok zwraca Ci to co potrzebujesz. Obsługę dodawania, usuwania znajomych możesz zrealizować triggerem na tabeli osoby.

Podobne pytania

0 głosów
1 odpowiedź 568 wizyt
pytanie zadane 11 czerwca 2018 w SQL, bazy danych przez emeryt68 Nowicjusz (130 p.)
0 głosów
2 odpowiedzi 257 wizyt
pytanie zadane 9 kwietnia 2018 w C i C++ przez lambdag Obywatel (1,310 p.)
0 głosów
1 odpowiedź 161 wizyt

92,452 zapytań

141,262 odpowiedzi

319,075 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...