![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 9 Dołączył: 29.05.2009 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Witam,
uczę się podstaw baz danych. Mam za zadanie modelowanie projektu w mysql workbench. Mam jedno pytanie, na które nie mogę sobie odpowiedzieć. Załóżmy mamy: Kod CREATE TABLE customers ( customer_id INT AUTO_INCREMENT PRIMARY KEY, customer_name VARCHAR(100) ); CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, customer_id INT, amount DOUBLE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ); Dwie tabele, które są połączone relacją. Żeby wyciągnąć dane piszę zapytanie: Kod SELECT * FROM customers JOIN orders WHERE customers.customre_id = orders.customer_id; Działa. A teraz robię to samo zapytanie na tabelach, które nie mają relacji. Kod CREATE TABLE customers ( customer_id INT AUTO_INCREMENT PRIMARY KEY, customer_name VARCHAR(100) ); CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, customer_id INT, amount DOUBLE ); I zapytanie też pokazuje ten sam wynik. Moje pytanie po co tak właściwie są te ralacje? Żeby skrypt szybciej zadziałał? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Sam JOINujesz wiec mówisz co masz łączyć - prawidłowo. Od tego jesteś Ty by mówić bazie co chcesz a nie baza ma się domyślać (IMG:style_emoticons/default/smile.gif)
A relacje są np. do: 1) Automatycznego usuwania rekordu z jednej tabeli, gdy zniknie odpowiednik z innej tabeli 2) Nie pozwalaniu na kasowanie rekordu z jednej tabeli, gdy ma on wiązanie w innej 3) Update rekordu na NULL, gdy jego odpowiednik zniknie z innej tabeli Relacje nie służą do przyspieszania operacji. Od tego są indeksy. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 06:39 |