Stránka 1 z 1

SQL - návrh databáze - TYP

Napsal: 08 srp 2019, 08:58
od pavel1tu
Je tu někdo přes SQL databáze ?

Vytvářím novou databázi pro meteostanici,
budu importovat data z programu Cumulus asi za 15 let ?!

U každého řádku databáze se zadává jaký TYP to bude, já používám nevím proč FLOAT, asi že je to v příkladech.

Vyplatí se to vytvořit jakoby "na míru", třeba teplotu místo FLOAT DECIMAL(3,2) atd. ?
Je to obrovský objem dat (pro BananaPi), tak pokud to bude lepší, pohraji si s tím - ukládáme asi 30 položek

děkuji za názory

Re: SQL - návrh databáze - TYP

Napsal: 08 srp 2019, 17:19
od kiRRow
Já to spíš pochopil tak, že myslíš sloupec. Do řádků se pak skládají data. Pokud jsi si 100% jist, že do ono sloupce nikdy nebudeš chtít vložit nic jiného než to co tam potřebuješ, tak mu dej ten správný datový typ akorát tak nadimenzovaný. Ušetří to místo, které ta databáze pak zabere.

Pokud si chceš nechat nějaký prostor pro manévrování, stím že tam třeba budeš chtít uložit i někdy nějaký text ... nvm např ERR, jako chybovou hlášku rozlišitelnou od 0, FALSE ... tak já bych použil dostatečně nadimenzovaný varchar.To desetiný číslo se tam uloží jako prostě text ... takže čárka může lítat jak chce, jdou tam nacpat i znaky atd... Až si ty data potom z tý databáze vyžádáš nějakým klientem, tak si sám určíš jestli se k těm datům budeš chovat jako k float, nebo string.

Re: SQL - návrh databáze - TYP

Napsal: 08 srp 2019, 19:44
od pavel1tu
JJ myslel jsem sloupce.
byl to opruz ale vyzkoušel jsem to - buď všude FLOAT nebo u celých čísel INT, u čísel pod 255 TINYINT a tak dále.

za skoro 15 let dat to po přechrochtání SQL dotazem zabírá 1/4 místa nebo tak nějak, což je super

Re: SQL - návrh databáze - TYP

Napsal: 09 srp 2019, 13:09
od KamilV
Ono to nemá vliv jen velikost samotné databáze, ale s rostoucím počtem záznamů i na rychlost její odezvy. Díky správným datovým typům se pak mohou některé sloupce oindexovat, čímž se urychlí výběr dat z db.
Float není úplně snadní správně použít, lépe je DECIMAL a specifikovat, kolik cifer bude požadováno za des. čárkou.
Nějaké případné chybové stavy rozhodně do tohoto sloupce nepatří (a nedejbože kvůli tomu měnit typ na varchar - tím si člověk odpráskne možnosti používat matematické agregační funkce). Pokud stanice může generovat chybový stav, tak buď: je evidovat v samostatném sloupci, nebo v samostatné tabulce...

Re: SQL - návrh databáze - TYP

Napsal: 09 srp 2019, 13:16
od pavel1tu
Děkuji,
dobrý podnět - udělám kody chyb číslem, podle bitové váhy kdy každý modul bude mít svoji chybu

vše co má desetinná místa jsem dal na DECIMAL, trochu to učesal a opět 5% úspory

testnul jsem na obou databázích i rychlost generování dat (statistiky za určitý měsíc) a je to skoro o 1/3 rychlejší (BananaPi dostal záhul)

Re: SQL - návrh databáze - TYP

Napsal: 09 srp 2019, 14:54
od KamilV
Asi bych to viděl nějak takto:

Kód: Vybrat vše

+-----------+---------------+-----------------------+-----------------+
| ID        | Teplota       | Nastala_chyba         | Chyba_text      |
+-----------+---------------+-----------------------+-----------------+
| UNINT     | DECIMAL       | TINYINT               | VARCHAR         |
+-----------+---------------+-----------------------+-----------------+
S tím, že nad sloupcem Nastala_chyba by byl index,
Chyba_text by byl NULLový.
Když budeš chtít vytáhnout všechny záznamy, kde nedošlo k chybě (a dále s nimi počítat), napíšeš si do dotazu WHERE Nastala_chyba=0.
Index nad TINYINT bude nejrychlejší. Nevím, co máš za DB, PostgreSQL třeba umí i BIT, MySQL tuším stále ne.

Re: SQL - návrh databáze - TYP

Napsal: 09 srp 2019, 15:27
od pavel1tu
Mám MariaDB

chyby a alarmové stavy budou ve druhé tabulce databáze
bude se podle těch záznamů ovládat posílání emailů a SMS