abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
dnes 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 0
včera 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 16
včera 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 26
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (8%)
 (5%)
 (3%)
Celkem 780 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama
Štítky: není přiřazen žádný štítek

Dotaz: vztah tabulek

29.3.2009 20:27 rrak
vztah tabulek
Přečteno: 459×

Dobrý den,
mám dotaz ohledně správného rozkladu......

Mám tabulky zápas a tým.
Zápas (id_team_1 , id_team_2, ............)
Tým (id_team,nazev,............)

id_team_1,id_team_2 - cizi klice s tabulky Tym.

Potrebuji vyresit spravne vztah mezi temito tabulkami, podle me je tady vztah N:M, ale jelikoz jsou tymy vybirany ze stejne tabulky, tak nevim jak to spravne vyresit.

Dekuji..........

Odpovědi

AraxoN avatar 29.3.2009 20:40 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: vztah tabulek

A čo na tom nevieš vyriešiť? Veď to máš správne... :-)

Vzťah M:N je medzi tabuľkami "Tým" a "Tým", s tým že väzobná tabuľka je "Zápas". Medzi tabuľkami "Tým" a "Zápas" je dvakrát vzťah 1:N.

A fine is a tax for doing wrong. A tax is a fine for doing well.
29.3.2009 21:09 rrak
Rozbalit Rozbalit vše Re: vztah tabulek

nevim nejak sem se zamotal protoze ty tymy vybiram z jedne tabulky

 

vzdyt jeden tym muze hrat N zapasu ale jeden zapas muzou hrat vzdy 2 konkretni tymy

tym (1)------------------(N)  zapas (N)-------------------tym(1)

mam mit dve tabulky  tym ??? to je blbost ne ?

sem se nejako zamotal :(  :)

29.3.2009 21:22 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: vztah tabulek
Pokud by zápas hrál jenom jeden tým, byl by to vztah 1:M (pro vztah N:M byste potřeboval nějakou vazební tabulku). Protože hrajou dva týmy, jsou tam dvě vazby 1:M – pokud do budete malovat do nějakého schématu (nevidím jiný důvod, proč byste potřeboval vědět, jak tu vazbu označit), budete tam muset mít mezi těmi tabulkami dvě vazby (čáry) a každá je právě 1:M.
default avatar 29.3.2009 21:53 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: vztah tabulek
pokud do budete malovat do nějakého schématu (nevidím jiný důvod, proč byste potřeboval vědět, jak tu vazbu označit),

Typ vazby musíte znát i bez omalovánek, jinak nedáte SELECT. Slovní popis vazeb nemusí nutně znamenat nutnost grafického modelu.

29.3.2009 22:33 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: vztah tabulek
Slovní popis jistě, ale k tomu nemusíte vědět, jestli to, co je slovně popsáno, je zrovna .M nebo něco jiného. Zrovna v tomhle případě si stejně málokdo něco představí pod "x:y", zato když se řekne, že jeden zápas hrají dva týmy a každý tým může hrát víc zápasů, je to hned jasné.
default avatar 30.3.2009 09:37 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: vztah tabulek

Ale tak samozřejmě. Vždycky se to musí nějak vysvětlit. A jestli to člověk udělá grafickým modelem nebo slohovou prací — výsledek by měl být stejný. To znamená — srozumitelný pro toho, kdo s databází pracuje. ;-)

default avatar 29.3.2009 21:49 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: vztah tabulek

Můžu Tě uklidnit. Máš to dobře. Obecně se vztah M:N řeší přes převodní tabulku, ale v tomto případě dva cizí klíče stačí. Výběr provedeš takto:

SELECT
    z.whatever,
    t1.nazev AS "název prvního týmu",
    t2.nazev AS "název druhého týmu"
FROM
    zapas z INNER JOIN tym t1 ON (z.id_team_1 = t1.id_team)
        INNER JOIN tym t2 ON (z.id_team_2 = t2.id_team)
WHERE
    1 = 1
    -- AND whatever…
/

Ještě bych zauvažoval nad CHECK CONSTRAINTem, který zajistí, aby tým nemohl hrát sám se sebou (předpokládám, že id_team_1 and id_team_2 jsou již pod NOT NULL constraintem):

ALTER TABLE "Zápas" ADD CONSTRAINT ck_teams CHECK (id_team_1 != id_team_2)
/

Jen doplním mé myšlenkové pochody: předpokládám, že primární klíč v tabulce ZÁPAS je definován svým ID; předpokládám, že dva týmy můžou spolu hrát několik zápasů.

29.3.2009 22:02 rrak
Rozbalit Rozbalit vše Re: vztah tabulek

diky moc vsem sem, zacatecnik s databazemi tak me zmatlo ze jsou oba tymy se stejne tabulky......

jen pro upresneni :) mam tedy dve tabulky mezi kterymi mam dva vztahy 1:N ??? :)

neubicujte me za tu otazku :-D

 

podivam se na to co znamena ten CHECK CONSTRAINT a bude to ok snad

tak jeste jednou diky

default avatar 29.3.2009 22:21 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: vztah tabulek

Ano, jedná vpodstatě o vztah 1:N. Dá se říci, že ty tabulky mají dvojnásobný vztah. Jak jsem říkal, je to jedna z možných implementací vztahu M:N. S pomocnou tabulkou by to vypadalo takto: TYMTYM_ZAPAS — ZAPAS:

CREATE TABLE tym (
    id_team NUMBER(10) NOT NULL,
    nazev VARCHAR2(256) NOT NULL)
/

ALTER TABLE tym ADD CONSTRAINT pk_tym PRIMARY KEY (id_team)
/

CREATE TABLE zapas (
    zapas_id NUMBER(10) NOT NULL,
    zapas_details VARCHAR2(256))
/

ALTER TABLE zapas ADD CONSTRAINT pk_zapas PRIMARY KEY (zapas_id)
/

CREATE TABLE tym_zapas (
    zapas_id NUMBER(10) NOT NULL,
    id_team_1 NUMBER(10) NOT NULL,
    id_team_2 NUMBER(10) NOT NULL)
/

ALTER TABLE tym_zapas ADD CONSTRAINT fk_zapas FOREIGN KEY (zapas_id) REFERENCES zapas (zapas_id)
/

ALTER TALBE tym_zapas ADD CONSTRAINT fk_tym1_tym FOREIGN KEY (id_team_1) REFERENCES tym (id_team)
/

ALTER TALBE tym_zapas ADD CONSTRAINT fk_tym2_tym FOREIGN KEY (id_team_2) REFERENCES tym (id_team)
/

ALTER TABLE tym_zapas ADD CONSTRAINT pk_tym_zapas PRIMARY KEY (zapas_id, id_team1, id_team2)
/

Tento model má tu výhodu, že do tabulky TYM_ZAPAS můžu dát vlastnosti, které se týkají jen vztahu tým — zápas.

Jiný příklad. Mám vyřešit datový model v bance. Mám ukládat účty a jejich klienty. Každý účet má několik klientů. Jednoho majitele a pak případně další (například manželka a její disponabilní právo; nebo nějaký garantor úvěrového účtu). To znamená, že zavedu tabulku účtů, tabulku klientů a tabulku vazeb. Ten typ vztahu klient — účet — to je přesně to, co patří do té vazební tabulky KLIENT_ÚČET.

29.3.2009 22:36 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: vztah tabulek
Ano, jedná vpodstatě o vztah 1:N. Dá se říci, že ty tabulky mají dvojnásobný vztah. Jak jsem říkal, je to jedna z možných implementací vztahu M:N
Taky by se to dalo označit jako jeden vztah 2:M :-)
29.3.2009 22:55 rrak
Rozbalit Rozbalit vše Re: vztah tabulek

System Eror :)

nj ale vztah ktery ja nechapu tedy vztah mezi tabulkou "tym" a "zapas" byl presunut mezi tabulky "tym_zapas" a tabulu "tym"

TYMTYM_ZAPAS — ZAPAS:

stale vybiram 2 tymy s tabulky "tym" ...

porad me tam pretrvava vztah 2:N jenom se presunul mezi jine tabulky 

 

30.3.2009 09:38 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: vztah tabulek
Nechápete ten vzťah pri vytváraní databázy alebo pri výbere dát?

Skúste tento model:
CREATE TABLE zapas (
  id int,
  time_play time,
  ...
);

CREATE TABLE tym (
  id int,
  name text,
  ...
);

CREATE TABLE tym_zapas (
  id    int  not null primary key,
  zapas int  not null reference zapas (id) on delete restrict,
  tym   int  not null reference tym (id) on delete restict,
  score int  null,
  home  int  not null
);

CREATE UNIQUE INDEX i__tym_zapas on tym_zapas (tym, zapas);
Hlavná výhoda: ak potrebujem nájsť zápasy týmu X, nemám podmienku OR (tym1 = ? or tym2 = ?). Práca so score, kombináciami týmov, ...

Príklad: chcem vyhľadať zápasy Sparta - Slavia, ktoré skončili víťazstvom Sparty
SELECT
   z.time_play,
   case when zt.home = 1 then 'na sparte' else 'na slavii' end,
   t1.name,
   t2.name,
   zt1.score,
   zt2.score
FROM
  zapas z,
  tym t1,
  tym t2,
  tym_zapas zt1,
  tym_zapas zt2,
WHERE
      t1.name = 'Sparta'    -- ktorý tým je Sparta
  and t2.name = 'Slavia'    -- ktorý tým je Slavia
  and zt1.tym = t1.id       -- ktoré zápasy hral tým 1
  and zt2.tym = t2.id       -- ktoré zápasy hral tým 2
  and zt1.zapas = zt2.zapas -- oba hrali rovnaký zápas
  and zt1.score > zt2.score -- a tým 1 dal viac gólov
;
Vysvetlenie pre autora otázky: v klauzule FROM je definíciou aliasu pre tabuľky (t1, t2, zt1, zt2) umožnené vyhľadať dva rôzne riadky z jednej tabuľky, každý podľa jeho vlastnej podmienky Pre fanúšikov join: tento zápis považujem za zrozumiteľnejší
default avatar 30.3.2009 10:03 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: vztah tabulek
System Eror :)

Nic takového tady neznáme. :-D

nj ale vztah ktery ja nechapu tedy vztah mezi tabulkou "tym" a "zapas" byl presunut mezi tabulky "tym_zapas" a tabulu "tym"

TYMTYM_ZAPAS — ZAPAS:

stale vybiram 2 tymy s tabulky "tym" ...

porad me tam pretrvava vztah 2:N jenom se presunul mezi jine tabulky

Jistě. O to tady jde. Tvůj problém je, že v tvém případě zápas spolu hrají právě dva týmy. Proto ti stačí dva cizí klíče — jak psal Filip Jirsák — vzba 2:N. Kdybys měl případ, že nevíš, kolik těch týmů může hrát jeden zápas — například ten vztah účet a jeho klienti — pak bys měl dvě možnosti:

  1. vygenerovat v tabulce účtů například tisíc cizích klíčů do tabulky klientů a doufat, že nenastane případ, že u jednoho účtu bude víc klientů a pro každý cizí klíč zavést atribut popisující daný vztah (majitel, garantor, …),
  2. nebo uděláš tu vazební tabulku, u které to množství vazeb řešit nemusíš.

Takže jinými slovy — ta vazební tabulka se hodí v těchto případech:

  1. neznáš dopředu počet relací, vztahů, vazeb
  2. potřebuješ každou vazbu nějak zvlášť popsat (typ vztahu klienta k účtu, nebo v případě třeba síťové topologie: detaily propojení dvou síťových prvků — délka a typ kabelu, odkaz do inventáře, odkaz na dokumentaci daného propojovacího zařízení, atd.)

Naproti tomu cizí klíče použiješ, když:

  1. počet relací, vztahů, vazeb je přesně daný
  2. nepotřebuješ každou vazbu nějak zvlášť popisovat, a když jo, tak velmi jednoduše a stačí ti nějaký atribut navíc.

Tak snad jsem to trošku objasnil… doufám… Už mě totiž napadají jen samé nevhodné příklady, které by snad prošly v blogu než v poradně (například model "vztahů" návštěvníků gayklubu — každý s každým). :-D

30.3.2009 12:54 rrak
Rozbalit Rozbalit vše Re: vztah tabulek
Příloha:

takze formalne si vztah zakreslim jako dve cary se vztahem 1:N mezi tabulkami (viz obr)

Tak dekuji vsem kteri prispely a pomohli k rozjasneni v me hlave :)

default avatar 30.3.2009 14:42 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: vztah tabulek

Přesně tak.

Hodně štěstí!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.