Autor Zpráva
Lamička
Profil *
Jsem začátečník a totálně se topím v pochopení základních principů databáze MySQL...
Potřeboval bych nakopnout na příkladu, který neumím rozchodit.

Do databáze budu ukládat info o uživatelích např: (id, jméno, datum zápisu) jednoduchá tabulka, no problém!

chci umožnit např. uživatelům, aby si uložili jaký mají rádi hudební styl, tím pádem asi budu muset vytvořit další tabulku... viz. moje představa na obrázku:

Neumím navrhnout funkční formu (MySql příkazy), a nevím jak se bude do takto "propojených" tabulek vstupovat, nějak jsem nepochopil pojmy "primary key", "inner join" apod.

Poradí někdo???
Akacko
Profil
Lamička
Tento příklad si vyžaduje třetí tabulku. Je to tzv. vztah M:N.

když si řekneš že
jeden uživatel může mít více oblíbených stylů (1:N)
a více uživatelů může poslouchat 1 styl (M:1)
tak průsečík těchto hodnot je M:N

a návrh by měl vypadat přibližně takto:
Mastodont
Profil
Ten návrh máš v zásadě správně, dal by se ještě obohatit o další extra tabulku hudebních stylů, takže v té druhé tabulce by pak namísto názvů byla jen čísla odkazující do další tabulky.
Ke studiu doporučuji http://www.linuxsoft.cz/mysql/
Lamička
Profil *
Díky za navedení... jdu študovat a testovat dál.
Urso
Profil
Díky za navedení... jdu študovat a testovat dál.
Při návrhu databáze to vychází takto:


Je to vztah více ku více, což bývá složitější. Musí se vytvořit asociativní tabulka s cizím klíčem z každé datové tabulky (tedy se dvěma cizími klíci).

+---------+-------+---------------------+
| id_uziv | jmeno | datum               |
+---------+-------+---------------------+
|       1 | Karel | 2009-05-22 17:10:28 |
|       2 | Honza | 2009-05-22 17:10:28 |
|       3 | Petr  | 2009-05-22 17:10:28 |
+---------+-------+---------------------+

+-------+---------+
| cislo | styl    |
+-------+---------+
|     1 | rock    |
|     2 | pop     |
|     3 | hip-hop |
|     4 | folk    |
|     5 | country |
+-------+---------+

select * from uzivatele_styly;
+-------+---------+-------+
| id_us | id_uziv | cislo |
+-------+---------+-------+
|     1 |       1 |     2 |
|     2 |       1 |     4 |
|     3 |       2 |     3 |
|     4 |       2 |     1 |
|     5 |       3 |     2 |
|     6 |       3 |     4 |
|     7 |       3 |     5 |
+-------+---------+-------+


Pak pro zjištění jaké styly má rád Karel se použije dotaz:
select jmeno,styl from uzivatele join uzivatele_styly
-> on uzivatele.id_uziv=uzivatele_styly.id_uziv join oblibene_styly on uzivatele_styly.cislo=oblibene_styly.cislo
-> where jmeno="Karel";
Výsledek:
pop
folk

Pro zjištění které styly kdo má rád:
select jmeno,styl from uzivatele join uzivatele_styly on uzivatele.id_uziv=uzivatele_styly.id_uziv join oblibene_styly on uzivatele_styly.cislo=oblibene_styly.cislo where styl="folk";
Výsledek:
Karel
Petr

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: