Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemAnketa Uložená dat do mysql - způsob

Ahoj,

právě navrhuji jednu MySQL databázi a přemýšlím co je lepší:

Řekněme že máme databázi nějakých výrobků, které mají nějaké vlastnosti - mají nějaké položky u kterých je uloženo jen ano/ne, případně číslo, ale je tam taky skupina Certifikace (např IP67, IP 68, CE, XX, YY) a výrobek může mít žádnou až všechny.

No a já přemýšlím zda to uložit binárně jako třeba 10001 - tedy že má IP67 a YY, nebo zda to uložit každé zvlášť např jako tiniint a mít hodnotu 1 nebo 0.

Uživatel si bude moct podle těchto hodnot také filtrovat, tak jestli třeba bude lepší to mít binárně jako jedno pole a to oindexovat, místo abych indexoval 5 sloupců. Binární varianta má také výhodu že při filtrování se nebude muset skládat DB dotaz typu WHERE ... and IP67==1 AND YY == 1 atd... ale bude jen WHERE ... AND certifikace = 10001.

Ale binární uložení má i nevýhody - např při editaci při vyplňování formuláře se musí binarní hodnota rozebrat a správně vyplnit formuláře prvky apod.

K jaké variante se kloníte vy? Případně výhody/nevýhody.

Snad jsem to popsal srozumitelně...
Díky

Jak ukládat

0%
14%
86%

Předmět Autor Datum
No doufám, že jsem to pochopil správně. Ale pokud ano, tak tohle patří do samostatné tabulky.
Wikan 02.03.2021 19:50
Wikan
pokud chápu správně, tak si myslel tabulku kde bude ID výrobku a id certifikace a tedy pokud bude mí…
n.u.r.v. 02.03.2021 19:54
n.u.r.v.
Ano, tak jsem to myslel. I když to budeš chtít exportovat v jiném formátu, v samotné databázi by ses…
Wikan 02.03.2021 19:57
Wikan
jj vím, jen jsem se tomu snažil vyhnout, protože to je další JOIN SELECT ... FROM vyrobek AS v INNER…
n.u.r.v. 02.03.2021 20:11
n.u.r.v.
JOINů se fakt bát nemusíš, zvlášť jestli tam spojuješ tři tabulky. To je naprostý prd.
Wikan 02.03.2021 20:13
Wikan
no nepotěšil si mě tou třetí tabulkou :-) počkám ještě do zítra a pokud nebude jiný názor tak to tak…
n.u.r.v. 02.03.2021 21:16
n.u.r.v.
Import ze souboru můžeš vyřešit tak, že si uděláš speciální tabulku pro import, která bude mít celou…
Jan Fiala 03.03.2021 07:56
Jan Fiala
díky za tip - udělám to tak
n.u.r.v. 03.03.2021 21:37
n.u.r.v.
Tri tabulky celkem jednoznacne: VYROBKY (id, nazev, .... ) CERTIFIKACE (id, nazev, ...) VYROBKY_CERT…
gilhad 03.03.2021 09:07
gilhad
jj už jsem se tak rozhodl. V původním návrhu jsem to tak i měl, ale pak jsem zkusil si to zjednoduši…
n.u.r.v. 03.03.2021 13:04
n.u.r.v.
nikoli "asi", ale "zcela jiste" :)
gilhad 03.03.2021 13:24
gilhad
hmm, tak zatím mi vzniklo 17 tabulek (když počítám i ty kde je jen uložen název certifikaci apod...)…
n.u.r.v. 03.03.2021 21:35
n.u.r.v.
Mam projekt, kde tech tabulek je prez 80 a to to neni ani zdaleka tak rozsekane, jak by byt mohlo :) poslední
gilhad 04.03.2021 07:32
gilhad

pokud chápu správně, tak si myslel tabulku kde bude ID výrobku a id certifikace a tedy pokud bude mít výrobek 3 certifikace, tak budou v této tabulce 3 záznamy? Tak jsem to původně měl, ale nevěděl jsem jaký to bude mít vliv na výkon při filtrování + pakárna při importu - dostanu to ve formě excelu - 1 výrobek = 1 řádek v excelu...

jj vím, jen jsem se tomu snažil vyhnout, protože to je další JOIN
SELECT ...
FROM vyrobek AS v
INNER JOIN treti_tabulka AS tt ON (tt.VYROBEK_ID = v.ID AND tt.CERTTIFIKACE_ID IN (1,3,5))
WHERE v. ....

+ při importu budu muset nejdřív založit výrobky, abych získal ID a pak teprve plnit tuhle tabulku. No ale pokud to mí i další výhody kromě toho že je to "akademicky správně", tak to tak klidně udělám

Import ze souboru můžeš vyřešit tak, že si uděláš speciální tabulku pro import, která bude mít celou strukturu
Z ní si vybereš chybějící záznamy pro jednu tabulku a doplníš je. Pak to samé uděláš pro ostatní a nakonec pro datovou tabulku.
Podstatou je doplnit nejprve číselníky a nakonec datovou tabulku
A měl bys mít nastaveny foreign klíče, abys měl jistotu, že je v pořádku referenční integrita mezi tabulkami

Tri tabulky celkem jednoznacne:
VYROBKY (id, nazev, .... )
CERTIFIKACE (id, nazev, ...)
VYROBKY_CERTIFIKACE (vyrobek_id, certifikace_id)

Protoze certifikace ti budou postupne pribyvat (stejne jako dalsi kriteria), a vsad se, ze za chvili bude zakaznik potrebovat vypsat vyrobky s certifikaci co obsahuje 67, ktere jsou zrovna na sklade, protoze si to nekdo zadal na webovkach
A takovych pozadavku bude pribyvat a kdyz to nebudes mit provazane podobnym zpusobem, tak se zblaznis. A nahrada za tebe, kterou narychlo sezenou proste odmitne s takovyma tabulkama delat.


SELECT UNIQUE v.id, v.nazev 
  FROM VYROBKY AS v 
  JOIN VYROBKY_CERTIFIKACE AS vc ON vc.vyrobek_id=v.id
  JOIN CERTIFIKACE AS c ON c.id=vc.certifikace_id AND c.nazev LIKE '%67%'
  JOIN SKLAD AS s ON s.vyrobek_id=v.id AND s.mnozstvi >0
   

hmm, tak zatím mi vzniklo 17 tabulek (když počítám i ty kde je jen uložen název certifikaci apod...). Pro jistotu jsem totiž rozsekal i jiné věci (parametry produktu), které nyní mohou mít jen jednu ze dvou možností, ale kdyby v budoucnu náhodou vznikly další možnosti, nebo byla povolena kombinace. Doufám že jsem to zase nepřehnal... :-)

Zpět do poradny Odpovědět na původní otázku Nahoru