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 00:33 | IT novinky

    FEL ČVUT vyvinula robotickou stavebnici pro mladé programátory. Stavebnice Brian byla navržená speciálně pro potřeby populární Robosoutěže. Jde ale také o samostatný produkt, který si může koupit každý fanoušek robotiky a programování od 10 let, ideální je i pro střední školy jako výuková pomůcka. Jádro stavebnice tvoří programovatelná řídicí jednotka, kterou vyvinul tým z FEL ČVUT ve spolupráci s průmyslovými partnery. Stavebnici

    … více »
    Ladislav Hagara | Komentářů: 3
    včera 20:33 | Komunita

    Ubuntu bude pro testování nových verzí vydávat měsíční snapshoty. Dnes vyšel 1. snapshot Ubuntu 25.10 (Questing Quokka).

    Ladislav Hagara | Komentářů: 0
    včera 14:55 | Nová verze

    Společnost Netgate oznámila vydání nové verze 2.8.0 open source firewallové, routovací a VPN platformy pfSense (Wikipedie) postavené na FreeBSD. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 14:00 | Nová verze

    Byla vydána nová verze 6.16 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Tor Browser byl povýšen na verzi 14.5.3. Linux na verzi 6.1.140. Další změny v příslušném seznamu.

    Ladislav Hagara | Komentářů: 0
    včera 12:33 | Zajímavý článek

    Člověk odsouzený za obchod s drogami daroval letos ministerstvu spravedlnosti 468 kusů kryptoměny bitcoin, které pak resort v aukcích prodal za skoro miliardu korun. Darováním se zabývá policejní Národní centrála proti organizovanému zločinu (NCOZ). Deníku N to potvrdil přímo ministr spravedlnosti Pavel Blažek (ODS). Podle resortu bylo nicméně vše v souladu s právem.

    Ladislav Hagara | Komentářů: 12
    28.5. 20:44 | Nová verze

    Svobodný a otevřený multiplatformní editor EPUB souborů Sigil (Wikipedie, GitHub) byl vydán ve verzi 2.5.0. Stejně tak doprovodný vizuální EPUB XHTML editor PageEdit (GitHub).

    Ladislav Hagara | Komentářů: 0
    28.5. 12:22 | IT novinky

    Na základě národního atribučního procesu vláda České republiky označila Čínskou lidovou republiku za zodpovědnou za škodlivou kybernetickou kampaň proti jedné z neutajovaných komunikačních sítí Ministerstva zahraničních věcí ČR. Tato škodlivá aktivita, která trvala od roku 2022 a zasáhla instituci zařazenou na seznam české kritické infrastruktury, byla provedena kyberšpionážní skupinou APT31, veřejně spojovanou se zpravodajskou službou Ministerstvo státní bezpečnosti (MSS).

    Ladislav Hagara | Komentářů: 29
    28.5. 00:11 | Nová verze

    Google Chrome 137 byl prohlášen za stabilní. Nejnovější stabilní verze 137.0.7151.55 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 11 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    27.5. 19:22 | Nová verze

    Byl vydán AlmaLinux OS 10 s kódovým názvem Purple Lion. Podrobnosti v poznámkách k vydání. Na rozdíl od Red Hat Enterprise Linuxu 10 nadále podporuje x86-64-v2.

    Ladislav Hagara | Komentářů: 0
    27.5. 15:11 | Nová verze

    Byl vydán Mozilla Firefox 139.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 139 je již k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 10
    Jaký je váš oblíbený skriptovací jazyk?
     (55%)
     (32%)
     (7%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 161 hlasů
     Komentářů: 12, poslední 28.5. 18:42
    Rozcestník

    Dotaz: SQLite rowid nebo id

    5.12.2022 14:28 Jirka
    SQLite rowid nebo id
    Přečteno: 1560×
    Ahoj, parsuji nějaká data a výsledkem by měl být textový SQL soubor, který se později nahraje do SQLite. V datech je nějaký popis jako krátký text a k němu může být několik obrázků (ale nemusí). Zhotovil jsem tuto jednoduchou databázi:
    CREATE TABLE popis (
        id    INTEGER PRIMARY KEY AUTOINCREMENT,
        text TEXT
    );
    CREATE TABLE popis_obrazek (
        id    INT NOT NULL,
        src   TEXT NOT NULL,
        FOREIGN KEY(id) REFERENCES popis(id)
    );
    
    A výsledkem parsování je takovýto soubor:
    INSERT INTO popis (text) VALUES("Jakysi popis");
    INSERT INTO popis_obrazek (id, src) VALUES((SELECT seq FROM sqlite_sequence WHERE name='popis'), 'obrazek1.jpg');
    INSERT INTO popis_obrazek (id, src) VALUES((SELECT seq FROM sqlite_sequence WHERE name='popis'), 'obrazek2.jpg');
    
    A všechno pracuje jak má. Každý obrázek má id popisu, ke kterému patří. Napadlo mě vyhodit z tabulky popis ten sloupec id, vždyť je tam už rowid. Ale jak s ním pracovat v insertech, vždyť po prvním insertu do popis_obrazek se last_insert_rowid() změní. Našel jsem, že by to šlo oklikou přes pomocnou tabulku, ale zdá se mi to zbytečné. Je na to nějaký fígl, nebo je lepší nechat id a nepoužívat rowid? Díky za inspiraci.

    Odpovědi

    5.12.2022 15:16 X
    Rozbalit Rozbalit vše Re: SQLite rowid nebo id
    Rekl bych ,ze to 'id' je v obou pripadech zbytecne. K tomu vkladani muzes pouzit 'SELECT last_insert_rowid()' a teoreticky transakci, nebo sekvenci INSERT .. VALUE (A,B), (C,D);.
    5.12.2022 16:02 Jirka
    Rozbalit Rozbalit vše Re: SQLite rowid nebo id
    Ano, sekvence v INSERT - to je řešení. Upravil jsem to takto:
    CREATE TABLE popis (
        text TEXT
    );
    CREATE TABLE popis_obrazek (
        id    INT NOT NULL,
        src   TEXT NOT NULL,
        FOREIGN KEY(id) REFERENCES popis(rowid)
    );
    
    INSERT INTO popis (text) VALUES("Jakysi popis");
    INSERT INTO popis_obrazek (id, src) VALUES((SELECT LAST_INSERT_ROWID()), 'obrazek1.jpg'), ((SELECT LAST_INSERT_ROWID()), 'obrazek2.jpg');
    
    To id v tabulce popis_obrazek tam být musí, identifikuje, ke kterému popisu obrázek patří. Děkuji mnohokráte za radu.
    5.12.2022 17:53 .
    Rozbalit Rozbalit vše Re: SQLite rowid nebo id
    To je řešení ve stylu "jak si rozbít data". Zkuste si přečíst třeba tohle.
    5.12.2022 18:35 X
    Rozbalit Rozbalit vše Re: SQLite rowid nebo id
    Nesmysl. Misto straseni to zkus priste realne podlozit. Mimochodem, informace na odkazu nijak tazatelovo reseni neovlivnuje.
    5.12.2022 18:43 Jirka
    Rozbalit Rozbalit vše Re: SQLite rowid nebo id
    Aha, to by mohl být problém. Takže zpět na id, ovšem se sekvencí v INSERTu.
    9.12.2022 12:31 Tom K | skóre: 22
    Rozbalit Rozbalit vše Re: SQLite rowid nebo id
    Nepoužíval bych LAST_INSERT_ROWID, ale:
    INSERT INTO popis VALUES('Jakysi popis') RETURNING rowid; 
    A pozor, bez:
    PRAGMA foreign_keys = ON;
    nebude fungovat kontrola referenční integrity.
    echo -n "u48" | sha1sum | head -c3; echo
    30.12.2022 12:54 ChatBot GPT-3
    Rozbalit Rozbalit vše Re: SQLite rowid nebo id
    Ano, v SQLite můžete použít speciální sloupec rowid, který zajišťuje unikátní identifikátor pro každý řádek v tabulce. Můžete tedy vytvořit tabulku popis_obrazek bez sloupce id a namísto toho použít sloupec rowid ze tabulky popis.

    Vytvořte tabulku popis_obrazek takto:
    CREATE TABLE popis_obrazek (
        popis_rowid INTEGER NOT NULL,
        src TEXT NOT NULL,
        FOREIGN KEY(popis_rowid) REFERENCES popis(rowid)
    );
    
    Následně můžete vkládat do tabulky popis_obrazek pomocí příkazu INSERT s výrazem last_insert_rowid() pro získání posledního vloženého rowid:
    INSERT INTO popis (text) VALUES("Jakysi popis");
    INSERT INTO popis_obrazek (popis_rowid, src) VALUES(last_insert_rowid(), 'obrazek1.jpg');
    INSERT INTO popis_obrazek (popis_rowid, src) VALUES(last_insert_rowid(), 'obrazek2.jpg');
    
    Tento způsob může být vhodný, pokud nepotřebujete sloupec id v tabulce popis a chcete využít automatického generování identifikátorů v SQLite pomocí rowid.

    Pokud ale potřebujete sloupec id v tabulce popis, je lepší ho ponechat a používat ho jako klíč pro odkazování v tabulce popis_obrazek. Toto je obecně považováno za lepší praxi, protože rowid může být přepsán při určitých operacích s tabulkou, například při přesunutí řádků nebo při vkládání řádků do středu tabulky. Klíče definované uživatelem (jako je id) jsou stabilnější a méně pravděpodobné, že se změní.

    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.