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í
×
    dnes 13:44 | Zajímavý software

    V pátek 6. a sobotu 7. března proběhl v pražském sídle Nejvyššího kontrolního úřadu (NKÚ) Hackathon veřejné správy 7.1. Publikovány byly vytvořené aplikace. V kategorii projektů rozvíjených z krajského kola zvítězil tým „Mackokládi“. Čtyři středoškoláci ze Dvora Králové uspěli s aplikací KompaZ. Jde o digitálního průvodce, který pomůže s rychlou a srozumitelnou orientací v životních i krizových situacích „krok za krokem“. Aplikace

    … více »
    Ladislav Hagara | Komentářů: 2
    dnes 13:33 | Nová verze

    QGIS, svobodný desktopový GIS, byl vydán v nové hlavní verzi 4.0. Změny zahrnují několik nových analytických a editačních funkcí, rozšíření podpory 3D, více možností úprav uživatelského rozhraní či mnoho dalších zlepšení použitelnosti. Řada 3.44 má aktualizace plánovány do září.

    |🇵🇸 | Komentářů: 0
    dnes 05:11 | Komunita

    Dan Blanchard vydal knihovnu pro Python chardet v nové verzi 7.0.0. S novou verzí byla knihovna přelicencována z LGPL na MIT. Souhlasili s tím všichni přispěvatelé? Dan Blanchard souhlasy vůbec neřešil. Zaúkoloval umělou inteligenci (Claude), aby knihovnu zcela přepsala a výslovně jí nařídil, aby nepoužila žádný LGPL kód. Dan Blanchard tvrdí, že se jedná o clean room design. Protistrana argumentuje, že umělá inteligence byla trénována

    … více »
    Ladislav Hagara | Komentářů: 12
    včera 18:44 | Komunita

    Andy Nguyen si na svou herní konzoli PlayStation 5 (PS5) pomocí exploitu Byepervisor nainstaloval Linux (Ubuntu). V Linuxu si spustil Steam a PS5 tak proměnil v Steam Machine. Na PS5 může hrát hry, které jsou vydané pouze pro PC a jsou na Steamu [Tom's Hardware].

    Ladislav Hagara | Komentářů: 9
    včera 12:22 | Nová verze

    Správce sbírky fotografií digiKam byl vydán ve verzi 9.0.0. Jedná se o větší vydání provázené aktualizacemi knihoven. Mnoho dílčích změn se vedle oprav chyb týká uživatelského rozhraní, mj. editace metadat.

    |🇵🇸 | Komentářů: 1
    7.3. 13:55 | Nová verze

    Byla vydána verze 2026 distribuce programu pro počítačovou sazbu TeX s názvem TeX Live (Wikipedie). Přehled novinek v oficiální dokumentaci.

    Ladislav Hagara | Komentářů: 29
    6.3. 23:22 | Humor

    Jihokorejská Národní daňová služba (NTS) zabavila kryptoměnu Pre-retogeum (PRTG) v hodnotě 5,6 milionu dolarů. Pochlubila se v tiskové zprávě, do které vložila fotografii zabavených USB flash disků s kryptoměnovými peněženkami spolu se souvisejícími ručně napsanými mnemotechnickými obnovovacími frázemi. Krátce na to byla kryptoměna v hodnotě 4,8 milionu dolarů odcizena. O několik hodin ale vrácena, jelikož PRTG je extrémně nelikvidní, s denním objemem obchodování kolem 332 dolarů a zalistováním na jediné burze, MEXC [Bitcoin.com].

    Ladislav Hagara | Komentářů: 10
    6.3. 16:33 | Nová verze

    Komunita kolem Linuxu From Scratch (LFS) vydala nové verze knih s návody na instalaci vlastního linuxového systému ze zdrojových kódů Linux From Scratch 13.0 a Beyond Linux From Scratch 13.0. Pouze se systemd.

    Ladislav Hagara | Komentářů: 0
    6.3. 16:00 | Nová verze

    Byla vydána nová stabilní major verze 25.12 linuxové distribuce primárně určené pro routery a vestavěné systémy OpenWrt (Wikipedie). Jedná se o nástupce předchozí major verze 24.10. Přehled novinek v poznámkách k vydání. Podporováno je více než 2200 zařízení.

    Ladislav Hagara | Komentářů: 0
    6.3. 04:44 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za únor (YouTube). Odstraněn byl veškerý kód napsaný ve Swiftu. JavaScriptový engine LibJS byl reimplementován v Rustu.

    Ladislav Hagara | Komentářů: 4
    Které desktopové prostředí na Linuxu používáte?
     (17%)
     (7%)
     (0%)
     (11%)
     (28%)
     (2%)
     (5%)
     (2%)
     (13%)
     (25%)
    Celkem 1036 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Dotaz: 1:N relace, jak se pracuje?

    10.5.2011 10:16 petrrrr
    1:N relace, jak se pracuje?
    Přečteno: 1493×
    Dobrý den, navrhuji si pro svůj malý webík databázi a potřebuji 1:N relace. Vím, že se to zařizuje přes join, ale není mi jasný detail návrhu. Jakým způsobem je v jednom sloupci uchováno více údajů (N)? Napadá mě jedině, že jde o duplicitní záznam lišící se pouze v rozdílovém sloupci. Uvedu příklad:
    Interpreti:
    (pk) id_interpreta | jmeno | zanr (FK)
    Skladby:
    (pk)id_skladby | (fk)id_interpreta | (fk) id_interpret_spolu_s |nazev_skladby
    Zanry:
    (pk)id_zanru | nazev_zanru
    Potřebuji mít stav, že v interpreti.zanr bude víc záznamů. Napadlo mě, že se to řeší více 1řádkovými záznamy v tabulce Interpreti, příklad:
    1 | Karel Gott | pop
    1 | Karel Gott | jiný žánr
    Ale to potom nemohu u id_interpreta použít auto_increment.

    Řešení dotazu:


    Odpovědi

    10.5.2011 10:43 VM
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    Tak tahkle určitě ne (přečtěte si něco o normalizaci DB):
    1 | Karel Gott | pop
    1 | Karel Gott | jiný žánr
    
    Asi potřebujete tohle, a není to relace 1:n, nýbrž m:n :
    tabulka interpreti
    interpret_id | interpret_jmeno
    1                 | Karel Gott
    
    tabulka zanry
    zanr_id | zanr_jmeno
    1          | pop
    2          | folk
    
    tabulka interpreti_zanry
    id | interpret_id | zanr_id
    1  | 1                 | 1
    2  | 1                 | 2
    (fk) interpreti(interpret_id)
    (fk) zanry(zanr_id)
    
    Tarmaq avatar 10.5.2011 12:46 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    mozna bych to jeste zjednodusil, rekl bych ze umelohmotny identifikator pro zanry je zbytecny:
    interprets
    ----------
    id (PK) | name
    1       | Karel Gott
    2       | Atka Janouskova
    3       | Alicia Keys
    
    genres
    ------
    id (PK)| title
    pop    | Pop
    folk   | Folk
    rnb    | Rhythm&Blues
    
    interpret2genre
    ---------------
    interpret | genre
    1         | pop
    1         | folk
    2         | pop
    3         | rnb
    (pk) interpret, genre
    (fk) interprets(interpret)
    (fk) genres(genre)
    
    CREATE TABLE interprets (
      id NUMBER(16) PRIMARY KEY,
      name VARCHAR2(128)
    );
    CREATE TABLE genres (
      id VARCHAR2(16) PRIMARY KEY,
      title VARCHAR2(64) NOT NULL
    );
    CREATE TABLE interpret2genre (
      interpret NUMBER(16)
        CONSTRAINT fk_interpret2genre_interpret
        REFERENCES interprets
        ON DELETE CASCADE,
      genre VARCHAR2(16)
        CONSTRAINT fk_interpret2genre_genre
        REFERENCES genres
        ON DELETE CASCADE,
    
      CONSTRAINT pk_interpret2genre
      PRIMARY KEY (interpret, genre)
    );
    
    Don't panic!
    10.5.2011 14:24 petrrrr
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    děkuji převelice! ještě večer vykoumám jak to uplácat v php (cykly). Mám totiž tedy: Chci takovýto výsledek: píseň|Karel Gott|žánr1, žánr2 Díky:
    SELECT `interpreti`.`interpret_jmeno` AS 'Interpret', `skladby`.`skladba_nazev` AS 'Název skladby', `zanry`.`zanr_jmeno` AS 'Žánr'
    	FROM `interpreti_zanry`, `interpreti`, `zanry`, `skladby`, `interpreti_skladby` WHERE
    	`interpreti_zanry`.`interpret_id`=`interpreti`.`interpret_id` AND
    	`interpreti_zanry`.`zanr_id`=`zanry`.`zanr_id` AND
    	`interpreti_skladby`.`skladba_id`=`skladby`.`skladba_id` AND
    	`interpreti_skladby`.`interpret_id`=`interpreti`.`interpret_id`;
    
    mám záznamy:
    Karlova_píseň_1 | Karel Gott | žánr1
    Karlova_píseň_1 | Karel Gott | žánr2
    Umím si zobrazit vše:
    $radku=mysql_num_rows($vysledek);
    if ($radku==0) echo "nic tu neni";
    else
    {
    	while ($zaznam=MySQL_Fetch_Array($vysledek)):
            	echo $zaznam["Interpret"]."
    \n"; echo $zaznam["Název skladby"]."
    \n"; echo $zaznam["Žánr"]."
    \n"; endwhile; }
    Ale přemýšlím, jak tam zakopomnovat ten druhý cyklus, který by vyzvednul ve třetím sloupci data a hodil je na jeden řádek... Prosím o naťuknutí, dodělám si to pak sám... Ještě jednou díky (je to fanouškovskej web, ne úkol do školy).
    10.5.2011 15:21 VM
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    Nerozumim dotazu - priklad uz treti sloupec vypisuje.

    Jinak tip - dotaz lze prepsat na uspornejsi variantu:
    SELECT interpret_jmeno, skladba_nazev, zanr_jmeno
    FROM interpreti JOIN interpreti_zanry USING(interpret_id)
         JOIN zanry USING(zanr_id)
         JOIN interpreti_skladby USING(interpret_id)
         JOIN skladby USING(skladba_id);
    Predpokladam ze stejna skladba muze vyslovne patrit k vice interpretum - v opacnem pripade je tabulka interpreti_skladby zbytecna, misto ni by se dal interpret_id do tabulky skladby.
    10.5.2011 15:47 petrrrr
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    ano, je přeci možné, aby jedna skladba měla více interpretů (zpívá: X feat Y). Dotaz jsem myslel takto: příklad PHP kódu jenž jsem dodal vypíše obsah spojených tabulek v toto tvaru:
    Karel Gott | Když muž se ženou snídá | pop
    Karel Gott | Když muž se ženou snídá | rock
    Karel Gott | Když muž se ženou snídá | blues
    já ale chci:
    Karel Gott | Když muž se ženou snídá | pop, rock, blues
    Potřebuji přistupovat do toho třetího sloupce a vypsat tam všechny žánry.

    Chápu, že by šlo, vyzjistit kolik dotaz vygeneroval řádků a tam udělat dlouhý for cyklus a spojovat obsahy z třetího sloupce. Ale já potřebuju vypsat 30 posledních přidaných skladeb. Napadá mě udělat si pomocnou funkci, která tyto žánry spojí pro jednu skladbu, ale není mi jasné jak rozlišovat jestli jsem u Káji nebo jinde. Opět lepší příklad, než slova:
    
    function ma_funkce($kolik_radku){
    // tato funkce u 3 radku Karel Gott vytahuje ze 3. sloupce zanry a haze je do jednoho radku
    //zvladne to i u Kabátů a 5 žánrů
    }
    
    
    $radku=mysql_num_rows($dotaz);
    if ($radku==0) echo "nic tu neni";
    else
    {
    	while ($zaznam=MySQL_Fetch_Array($vysledek)):
            	echo $zaznam["Interpret"]."
    \n";
            	echo $zaznam["Název skladby"]."
    \n";
            	echo $zaznam["Žánr"]."
    \n";
          	endwhile;
    }
    
    No a já potřebuji vymyslet tu podmínku u while, aby rozlišovala, že tam je teď 3x Karel Gott, tak zavolej má_funkce(3) nebo pro Kabáty má_funkce(5).

    Za JOIN díky.

    11.5.2011 10:48 VM
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    ano, je přeci možné, aby jedna skladba měla více interpretů (zpívá: X feat Y). Dotaz jsem myslel takto: příklad PHP kódu jenž jsem dodal vypíše obsah spojených tabulek v toto tvaru:
    Karel Gott | Když muž se ženou snídá | pop
    Karel Gott | Když muž se ženou snídá | rock
    Karel Gott | Když muž se ženou snídá | blues
    já ale chci:
    Karel Gott | Když muž se ženou snídá | pop, rock, blues
    Co takhle:
    SELECT interpret_jmeno, skladba_nazev, GROUP_CONCAT(zanr_jmeno)
    FROM interpreti JOIN interpreti_skladby USING(interpret_id) 
        JOIN skladby USING(skladba_id)
        JOIN interpreti_zanry USING(interpret_id)
        JOIN zanry USING(zanr_id)
    GROUP BY interpret_id, skladba_id;
    
    BTW, neměl by žánr patřit spíše ke skladbě než k interpretovi?
    Josef Kufner avatar 16.5.2011 00:13 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    Sloupeček vyjadřující relaci dej do té druhé tabulky. Pokud se do té druhé tabulky nehodí, přidej tabulku.

    V tvém případě přesuň sloupec "žánr" do tabulky se skladbama a pro získání interpretů s žánry uděláš:
    SELECT i.id_interpreta, i.jmeno,
        GROUP_CONCAT(DISTINCT z.nazev_zanru SEPARATOR ', ') AS zanry
    FROM interpreti i
    LEFT JOIN Skladby s ON s.id_interpreta = i.id_interpreta
    LEFT JOIN Zanry z ON z.id_zanru = s.id_zanru
    GROUP BY i.id_interpreta
    
    Hello world ! Segmentation fault (core dumped)
    16.5.2011 18:21 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    Dobrý den, navrhuji si pro svůj malý webík databázi a potřebuji 1:N relace.
    Na nějaké studování joinů bych se "pro svůj malý webík" vykašlal, a místo toho použil rovnou nějaký ORM framework. Tam si jen řeknete jak mají vypadat objekty (záznamy) a starost o schema v DB jakož i insert/select/update/delete odpadá.

    In Ada the typical infinite loop would normally be terminated by detonation.
    Josef Kufner avatar 16.5.2011 19:46 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    "Pro svůj malý webík" by spíš mělo smysl studovat nějaké hotové CMS než cokoliv jiného.
    Hello world ! Segmentation fault (core dumped)
    16.5.2011 21:31 CIJOML
    Rozbalit Rozbalit vše Re: 1:N relace, jak se pracuje?
    ja si to pro sebe kdyz delam databazove schema prelozim do ceske vety. Potom mas zajisteno, ze to vyjadruje to co potrebujes:

    1:1 jedno dite ma jen jedno rodne cislo a naopak jedno cislo nalezi jen jednomu diteti

    1:N jeden ucitel uci ve vice ucebnach a naopak v kazde ucebne uci vzdy jen jeden kantor

    M:N jedna zena muze spat s mnoha muzi a naopak mnoho muzu muze spat s mnoha zenami :D

    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.