NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Ukládání dat do databáze

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Vakos
Tvůrce
Avatar
Vakos:24.2.2018 9:36

Ahoj,
řeším aktuálně problém s ukládáním článků do databáze. Jde mi spíše o teoretickou část.

Na webu mám možnost vytvořit tag, který má nějaké ID a Název. Při tvorbě článku mám mimo jiné možnost přiřadit i tag. Když by byl 1, tak je ukládání jednoduché, prostě do nové kolonky v databázi hodím ID tagu. Jak ale vyřešit více tagů? Ukládat to do pole?

Jde mi o to, že uživatel bude moct vytvořit stránku, kde bude výpis článků s daným tagem/tagy a když by to bylo polo, tak mi přijde že by výpis komplikovaný.

Napadá vás, jak by se to dalo vyřešit nějak elegantně?

Odpovědět
24.2.2018 9:36
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Odpovídá na Vakos
Marian Benčat:24.2.2018 10:30

nechápu otázku.. každopádně:

SQL - M:N vazební tabulka, případně stringy oddělené nějakým delimiterem, pokud jsou ty tagy immutable a nevadí ti denormalizovaný tvar, tak nemusíš mít vůbec napojení článku na záznam v tabulce tagů, jelikož je jasná identita tagu = je to prostě string, co je immmutable = jiný string -> jiný tag...

NoSQL . pole stringů, opět... tag je immutable, takže nemusíšě mít vůbec refku..

= nějaká kolekce / tabulka tagů ti slouží pouze pro vkládání (hledání existujících tagů).

Nahoru Odpovědět
24.2.2018 10:30
Totalitní admini..
Avatar
Vakos
Tvůrce
Avatar
Odpovídá na Marian Benčat
Vakos:24.2.2018 11:03

Úplně to nechápu. Databáze bude určitě SQL.

Když bude M:N vazební tabulka, tak budu mít například tabulky ArticleTags, kde když bude mít článek například 2 tagy, tak bude mít 2 zápisy v databázi?

Nahoru Odpovědět
24.2.2018 11:03
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Vakos
Tvůrce
Avatar
Odpovídá na Marian Benčat
Vakos:24.2.2018 20:16

Ještě jsem nad tím přemýšlel a bude tagy budou buď formou checkboxů, případně <select> s možností výběru více než jednoho prvku.

Je blbost to ukládat jako pole, nebo je lepší to uložit jako string s oddělovači jak píšeš? Ukládat tyto data ještě do solo databáze mi přijde trošku zbytečné, to spíše ale říkám z mé nezkušenosti, nevím co je lepší.

Nahoru Odpovědět
24.2.2018 20:16
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Odpovídá na Vakos
Michal Štěpánek:24.2.2018 20:58

Jestliže máš (pokud jsem to správně pochopil) tagy v extra tabulce, ze které si můžeš vybrat, spáchej si ještě jednu tabulku (vazební) kde bude ID článku a ID tagu. Pak si k jednomu článku můžeš dát tagů, kolik chceš...

Nahoru Odpovědět
24.2.2018 20:58
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Vakos
Marian Benčat:24.2.2018 22:07

pointa te samostatne tabulky, neni pro cteni tagu,ale po napovedu uzivateli...

chceš pokud možno zamezit tomu,, aby si měl tagy:

"auto, auto, Auta, auticka, Automobil" a budeš chtít podle tagů hledat... ale nechces to delat strong pravidlo.. takže sice budeš mít ty tagy uloženy přímo v DB u Articlu, aby si kvuli takové hlouposti nemusel dělat vazební tabulku, jak tady někdo navrhuje (neboli, proč jednoduše do proměnné uložit hodnotu, když můžeme na její hodnotu udělat 2 joiny do databáze ^_^ ) ...

...

Ale ty ulozene tagy budes mit pro autocomplete - pro napovídání..

Tj. V db muzes mit klidne

ArticleId  Name   Tags
GUID     Pepa     auta@holky@sex@phpsuxx

Pokud ti nevadí denormalizovaný tvar.

A na zobrazení článku a jeho tagu nepotřuješ žádný join (ani 2 joiny přes M:N tabulku).

Zároveň ale přeci jen budeš mít tabulku

TagId value
guid  auta
guid  holky
guid  sex
guid  phpshit

z toho duvodu, aby si mohl v tom Autocompletu co budeš mít na frontendu v editaci tagů uživateli napovídat a on tam nevkládat duplicitní hodnoty. Už se chápeme? ;-)

Editováno 24.2.2018 22:08
Nahoru Odpovědět
24.2.2018 22:07
Totalitní admini..
Avatar
Marian Benčat:24.2.2018 22:10

Celé co si z toho máš odnést je to.. že tag je POUZE string.. a string má definovanou identitu sám sebou a je immutable.. Jakmile změníš "maminka" na "tatínek" tak už to není to samé... Z toho důvodu si můžeš dovolit tu hodnotu uložit takto napřímo jako řetězec do Articlu.. protože jsi schopný jendoduše spárovat na zákaldě toho, že je to "maminka" a ne "tatínek" a nepotřebuješ žádné IDčko, ani další hlouposti.

Nahoru Odpovědět
24.2.2018 22:10
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.