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

Tworzenie relacji w bazie mysql - konstrukcja zapytania

Object Storage Arubacloud
+1 głos
772 wizyt
pytanie zadane 19 września 2020 w SQL, bazy danych przez bulgotnik86 Gaduła (3,040 p.)

Witam,

zaczynam zabawę w relacje w bazie mysql i proszę o pomoc już na starcie .

Przykładowo mam dwie tabele :

- users

- reservations

W tabeli "reservations"  będę zapisywał id zalogowanego usera , w kolumnie user_id  , które to nastepnie rezerwację będę wyswietlał na stronie konta zalogowanego usera. Czyli najprostszy z możliwych przykład klucza głównego ( id)  i klucza obcego ( user_id ).

Teraz uwaga!!! Będę pisał straszne głupoty, ale jak dostanę odpowiedź to może tak głupie pytania juz sie wiecej nie pojawią.

Pytania :

1. czy musze określić  (stworzyć ) relację między tymi tabelami ( kluczami) przy użyciu zapytania ALTER TABLE... i w tym zapytaniu określic co będzie kluczem głównym , a co obcym . 

 A może  relacja może być  wirtualna , i będę o niej wiedział tylko ja , silnik mysql już nie ?  No bo i bez tego mogę przecież pobrać dane z obu tabel z uzyciem JOIN ? . 

Czy jest to obowiązkowe i jaki będą korzysci z tego że silnik mysql będzie wiedział jakie co z czym ma relacje.

 

2. Załóżmy ze pisze moduł ( wtyczkę , np. do wordpressa)  i  tabela będzie tworzona dynamicznie , np . taka :

CREATE TABLE `wizyta` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `user_id` int(11) NOT NULL,
 `visit_date` datetime NOT NULL,
 `doctor_name` varchar(255) COLLATE utf8mb4_polish_ci NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_polish_ci

i będę chciał żeby 'user_id'  było kluczem obcym dla kolumny 'id'  w tabeli wordpressowskiej wp_users . 

Pytanie brzmi czy muszę w tym zapytaniu określić relację , jak to zrobić poprawnie i w ogóle czy dobrze kombinuje. 

Będę bardzo wdzięczny gdyby ktoś mi to raz a dobrze zobrazował .

dzięki z góry

2 odpowiedzi

+2 głosów
odpowiedź 19 września 2020 przez dayvu Obywatel (1,470 p.)

Praktycznie będzie działać bez relacji, ale w teorii relacje powinny być, są podstawą:

  • indeksowanie przyspiesza zapytania
  • masz pewność, że tabela "rezerwacje" zawiera powiązanie z użytkownikiem, który rzeczywiście istnieje. W przypadku zdefiniowanej relacji serwer bazy danych odrzuci transakcję dla nieistniejącego użytkownika. W przypadku braku takich relacji insert się wykona, co generuje "sieroce rekordy"
  • "A może  relacja może być  wirtualna , i będę o niej wiedział tylko ja , silnik mysql już nie" - jak odstawisz apkę na pół roku i do niej wrócisz to będzie pamiętał o tym?

I jeszcze można wymieniać :-D

 

komentarz 20 września 2020 przez bulgotnik86 Gaduła (3,040 p.)
Bardzo dziękuję wszsytkim za odpowiedzi.
+1 głos
odpowiedź 19 września 2020 przez Artek Stary wyjadacz (11,800 p.)
Ja bym określił relacje.

1) Zabezpieczenie przed niepoprawnymi przypadkowymi danymi - można dodać tylko to co rzeczywiście jest w tabeli users.

2) Np. w phpAdminie gdy masz to ustawione to po najechaniu myszką na klucz obcy od razu wyświetla podpowiedź i wiesz do czego się odnosi.

3)Możesz tak zrobić, że gdy użytkownik zostanie usunięty to wszystko co jest do niego przypisane od razu też zostanie usunięte.

Podobne pytania

0 głosów
1 odpowiedź 1,700 wizyt
pytanie zadane 18 listopada 2018 w SQL, bazy danych przez ariva6152 Użytkownik (570 p.)
0 głosów
1 odpowiedź 36,197 wizyt
pytanie zadane 10 sierpnia 2015 w SQL, bazy danych przez Else Stary wyjadacz (12,260 p.)
0 głosów
2 odpowiedzi 2,095 wizyt
pytanie zadane 15 czerwca 2015 w SQL, bazy danych przez _a4 Obywatel (1,330 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...