Close

relacje – #15

Dzisiaj porozmawiamy o relacjach…

oczywiście między tabelami w bazie 😉

W mojej aplikacji mam 3 tabele.

diag.png
Każda z nich ma kolumnę _id, która jest kluczem głównym. Dzięki temu mogę bardzo łatwo zidentyfikować każdy rekord w tabelce, a także zaprojektować relacje między danymi w tabelkach.

Relacja między Meal a Dinner to jeden-do-wielu. W kodzie wygląda to tak, że w tabelce Dinner mam kolumnę meal_id, która jest kluczem obcym do tabelki Meal.

CREATE TABLE dinner (<br />
_id INTEGER PRIMARY KEY,<br />
meal_id INT,<br />
date INT,<br />
FOREIGN KEY(meal_id) REFERENCES meal(_id))<br />

Przy wyszukiwaniu obiadów mogę łatwo złączyć tabele po wspólnej kolumnie:

select dinner._id, meal_id, date, name<br />
from dinner<br />
join meal on dinner.meal_id= meal._id;

Relacja pomiędzy Meal a Ingredient jest trochę bardziej skomplikowana. Jeden posiłek może mieć wiele składników, a i jeden składnik może występować w wielu posiłkach. Relacji wiele-do-wielu nie da się zrealizować bez tabelki pomocniczej.

Stworzyłam sobie tabelkę Meal_Ingredient, która ma dwie kolumny: meal_id i ingredient_id. Obie są kluczami obcymi do tabelek Meal i Ingredient.

CREATE TABLE meal_ingredient(<br />
_id INTEGER PRIMARY KEY,<br />
ingredient_id int,<br />
meal_id int,<br />
FOREIGN KEY(meal_id) REFERENCES meal(_id),<br />
FOREIGN KEY(ingredient_id) REFERENCES ingredient(_id));

Jeśli będę chciała znaleźć nazwy wszystkich składników w posiłku o id = 3 to zapytanie będzie wyglądać na przykład tak:

select ingredient.name<br />
from meal_ingredient<br />
join meal on meal._id= meal_ingredient.meal_id<br />
join ingredient on ingredient._id= meal_ingredient.ingredient_id<br />
where meal._id=3;

i nawet zadziała 😉

wp-1493209749928.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: