Autor Zpráva
nemo
Profil *
lze realizovat tuto databázi? [img]schrek.wz.cz/odlozene/Diagram1.png[/img]


nevím jak vytvořit relace mezi tabulkami v phpmyadmin....


NÁVRH DATABÁZE

Databáze je volně inspirovaná pro agendu vedení letiště, obsahuje tři hlavní tabulky (Letadla, Lide_konta, Organizace) a další čtyři tabulky, které zaznamenávají pohyby mezi hlavními tabulkami (Odpracovane_hodiny, Denik, Palivo_pohyby, Sklad).
Hlavní tabulky:
Letadla
• položka tabulky Letadla má představovat jedno letadlo u, kterého zaznamenáváme základní atributy, letadlo má také vlastní konto kam se připisují peníze za létané hodiny a odepisují za palivo
• sloupec Imatrikulace je primární klíč tabulky, znaky a čísla
• sloupec Majitel odkazuje na položku z tabulky Lide_konta / Organizace
Lide_konta
• položka tabulky Lide_konta představuje osobu, respektive její osobní záznamy (nalétané hodiny, konto, odpracované hodiny...)
• sloupec Index je primární klíč tabulky, klíč ve formátu (kxxx)
Organizace
• položka tabulky Organizace představuje firmu, položka zahrnuje potřebu letiště pracovat jak s fyz. osobami, tak i s firmami (tabulka je v podstatě obdoba Lide_konta)
• sloupec Index je primární klíč tabulky, klíč ve formátu (oxxx)
Záznamové tabulky:
Odpracovane_hodiny
• položka tabulky Odpracovane_hodiny má představovat jednu pracovní činnost ve, které konkrétní konto, pro něhož je práce vykonána, zaplatí pracovníkovi (kontu)
• sloupec Id je primární klíč tabulky
• sloupec Pracovnik odkazuje na položku z tabulky Lide_konta
• sloupec Plati odkazuje na položku z tabulky Lide_konta
Denik
• položka tabulky Denik představuje položku knihu letů ve, které se evidují provedené lety
• sloupec Id je primární klíč tabulky
• sloupec Imatrikulace odkazuje na položku z tabulky Letadla
• sloupec Pilot odkazuje na položku z tabulky Lide_konta
• sloupce Vzlet a Nalet by měli přičítat starty a hodiny konkrétnímu pilotovi a letadlu
• sloupce Cena*Nalet by měli přičítat peníze letadlu a strhávat peníze pilotovi
Palivo_pohyby
• položka tabulky Palivo_pohyby představuje pohyb skladu PHM (má vlastní konto), palivo mohou kupovat osoby / organizace, ale i letadla v rámci ceny za LH
• sloupec Id je primární klíč tabulky
• sloupec Platce odkazuje na položku z tabulky Letadla /Organizace / Lide_konta
• sloupec Mnozstvi by měl, odečítat z sloupce Nadrz
• sloupec Cena by měl, odečítat z konta Platce
Sklad
• položka tabulky Sklad představuje položku ve skladu letiště, položka má konkrétní odpovědnou osobu
• sloupec Invent_cislo je primární klíč tabulky
• sloupec Odpovedna_osoba odkazuje na položku z tabulky Lide_konta / Organizace
Keeehi
Profil
vazba M:N se provádí vazební tabulkou. Je to tabulka nejčastěji o 2 sloupcích, kde každý záznam tvoří právě jednu vazbu v propojení 2 tabulek.

Příklad: Spojení tabulek Lide_konta a Odpracovane_hodiny

Vytvořím tabulku s názvem "_vazba_Lide_konta_Odpracovane_hodiny" a se sloupci "_v_Index" a "_v_Id". Svázání záznamů z tabulky Lide_konta se záznamy v tabulce Odpracovane_hodiny určují záznamy právě ve vazební tabulce. Když člověk s indexem 8 udělá nějakou práci, která má Id 697 do té vazební tabulky se přidá nový řádek, ve kterém je v prvním sloupci 8 a ve druhém 697.

Ovšem ten návrh mi nepřijde správný. Například vazba mezi Letadla a Denik mi spíše přijde jako 1:N, protože jeden záznam v deníku se nebude vázat k více letadlům. Vazba 1:N jde implementovat úplně stejně jako M:N, avšak je to zbytečnost a plýtvání. Pokud by se implementovala správně, pak se v dotazy zmenší.
nemo
Profil *
a dá se nějak spáchat npř. Palivo_pohyby, tj. jedna tabulka aby měl relace ze sloupce Platce na tabulky Organizace, Lide_konta, Letadla ?
Keeehi
Profil
Pokud potřebuješ vyřešit přesně toto, tak do vazební tabulky se přidá 3. sloupce, který určuje, co je to za typ spojení. Např 1 pro organizace, 2 pro lide_konta, 3 pro letadla.

Avšak nejsem si úplně jistý, že je to správný návrh. Nešlo by to udělat třeba tak, že palivo mohou nakupovat jen organizace? Pokud by ho nakupoval člověk, pak by se palivo připsalo organizaci, ke které člověk patří a stejně tak s letadlem. A nebo obráceně. Palivo nakupují jen lidé. Palivo nakoupené organizací je pak vlastně součet paliv nakoupených lidmi, které patří do té organizace.
Jelikož však vůbec neznám ty vztahy které jsou a které mohou nastat, je prakticky nemožné vymyslet správný návrh. Proto předchozí příklady mohou být úplně zcestné. Tato problematika se však těžko řeší na diskusním fóru.
nemo
Profil *
díky za pomoc....nakoplo mě to a už skoro finišuju...
nemo
Profil *
ještě malý problém...jak vyexportuju db jako sql, ale s tím že se zachovají vztahy(relace) mezi tabulkami?
Keeehi
Profil
nemo:
Ty vztahy jsou jen virtuální. Ta čára na obrázku je ve skutečnosti reprezentovaná zase jen obyčejnou tabulkou. Nic extra. A pak ta jednotlivá spárování dat jsou zase jen obyčejné záznamy v tabulce. Pro databázi je to tedy tabulka jako každá jiná, a proto se exportuje jako jakákoliv jiná tabulka. Takže ano, "vztahy" zůstanou zachovány.
Kajman
Profil
Při innodb mohou být ty čáry přímo definovány jako cizí klíče. Každopádně exportovací nástroje bývají zpravidla dělány tak, aby je zachovaly (zvolily správnou posloupnost, případně dočasně cizí klíče vypnuly).

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:

0