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 | Nová verze

    Firma Proxmox vydala novou serverovou distribuci Datacenter Manager ve verzi 1.0 (poznámky k vydání). Podobně jako Virtual Environment, Mail Gateway či Backup Server je založená na Debianu, k němuž přidává integraci ZFS, webové administrační rozhraní a další. Datacenter Manager je určený ke správě instalací právě ostatních distribucí Proxmox.

    |🇵🇸 | Komentářů: 0
    včera 23:44 | Nová verze

    Byla vydána nová verze 2.4.66 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 5 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    včera 14:00 | IT novinky

    Programovací jazyk JavaScript (Wikipedie) dnes slaví 30 let od svého oficiálního představení 4. prosince 1995.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Bezpečnostní upozornění

    Byly zveřejněny informace o kritické zranitelnosti CVE-2025-55182 s CVSS 10.0 v React Server Components. Zranitelnost je opravena v Reactu 19.0.1, 19.1.2 a 19.2.1.

    Ladislav Hagara | Komentářů: 2
    včera 02:44 | Komunita

    Bylo rozhodnuto, že nejnovější Linux 6.18 je jádrem s prodlouženou upstream podporou (LTS). Ta je aktuálně plánována do prosince 2027. LTS jader je aktuálně šest: 5.10, 5.15, 6.1, 6.6, 6.12 a 6.18.

    Ladislav Hagara | Komentářů: 0
    včera 02:22 | Nová verze

    Byla vydána nová stabilní verze 3.23.0, tj. první z nové řady 3.23, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    3.12. 18:11 | Nová verze

    Byla vydána verze 6.0 webového aplikačního frameworku napsaného v Pythonu Django (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    3.12. 05:55 | Nová verze

    Po více než 7 měsících vývoje od vydání verze 6.8 byla vydána nová verze 6.9 svobodného open source redakčního systému WordPress. Kódové jméno Gene bylo vybráno na počest amerického jazzového klavíristy Gene Harrise (Ray Brown Trio - Summertime).

    Ladislav Hagara | Komentářů: 16
    3.12. 05:11 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za listopad (YouTube).

    Ladislav Hagara | Komentářů: 0
    3.12. 01:55 | Nová verze

    Google Chrome 143 byl prohlášen za stabilní. Nejnovější stabilní verze 143.0.7499.40 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 13 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (34%)
     (47%)
     (19%)
     (18%)
     (23%)
     (15%)
     (25%)
     (16%)
     (18%)
    Celkem 427 hlasů
     Komentářů: 18, poslední 2.12. 18:34
    Rozcestník

    Dotaz: SQLite rowid nebo id

    5.12.2022 14:28 Jirka
    SQLite rowid nebo id
    Přečteno: 1977×
    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.