![]() |
![]() |
![]()
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: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. W pierwszym wypadku na kolumnie customer_id masz założony indeks, dzięki czemu wyszukiwanie jest szybsze.
2. Klucze obce umożliwiają zachowanie spójności danych przez wymuszenie poprwanych relacji (czy do kolumny customer_id nie wrzucisz nieistniejącego ID, a usuwając danego użytkownika możesz autumatycznie usunąć wszystkie jego zamówienia bądź zablokować możliwość usunięcia tak długo jak długo istnieją jakieś rekordy odnoszące się do usuwanego rekordu). 3. Google: MySQL foreign keys constraints 4. Nazwy kolumn powinny być raczej "id", "name". Nie ma potrzeby dodawania jakiegoś bezsensownego przedrostka "customer_". |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 23:55 |