IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Ukladanie dlhých reťazcov do databázy

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Neaktivní uživatel:10.11.2014 14:37

Zdravím,
pracujem na jednom "väčšom projekte" (skôr obrovskom) a chcel by som pár rád ohľadom ukladania fakt dlhých reťazcov.
Povedzme, že mám objekt (nadradený), ktorému vytvorím ID funkciou hash. (Ak mám ID robiť inak treba povedať :D ) Ak používateľ použije tento objekt, zoberie sa jeho ID a vloží do stĺpca v DB, ktorý prislúcha danému používateľovi. V jednom stĺpci riadka ale bude viac než jeden takýto ID a budú od seba oddelené čiarkou. Myslíte, že je to správny postup? alebo to mám ukladať do súboru a nie DB?

// Čo ste nepochopili rád vysvetlím znovu a detailnejšie :D

Editováno 10.11.2014 14:38
Odpovědět
10.11.2014 14:37
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Štěpánek:10.11.2014 14:43

Co je to za objekty? Nadřazený objekt čemu? Co je to za DB?
V jednom sloupci nemůže být víc než jeden záznam. Můžeš mít víc řádků, kde bude např. stejné ID uživatele a jiné ID "objektu", ale nemůžeš mít v jednom řádku a jednom sloupci víc hodnot...

Editováno 10.11.2014 14:43
Nahoru Odpovědět
10.11.2014 14:43
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Neaktivní uživatel:10.11.2014 14:51

Ja viem, že v jednom stĺpci riadka nemôže byť viac hodnôt, ale myslel som to tak, že hodnoty oddelím čiarkou, načítam do poľa (v PHP) a pole potom rozdelím.
Takže mám to radšej rozdeliť do viac tabuliek?
Napr.
tabuľka 1

| id pouzivatela | ine udaje o nom |
------------------------------------
| ds546sdf4d5f4s | blablabla       |

tabulka 2

| id objektu     | id podr. obj.   | id vlastnika/pouz. | ine udaje |
---------------------------------------------------------------------
| 2dgf6sdhgfh8s6 | d8dfdss5f465fa4 | ds546sdf4d5f4s     | blablabla |
Nahoru Odpovědět
10.11.2014 14:51
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Haňáček:10.11.2014 14:53

Proč chceš HASHovat ID?

Nahoru Odpovědět
10.11.2014 14:53
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Michal Haňáček
Neaktivní uživatel:10.11.2014 14:57

Keď dám obejktu "obj1" ID AI a tiež aj objektu "obj2" ID AI, pri ich použití ďalej by sa mi mohli navzájom pobiť. Potrebujem úplne jedinečný typ ID pre každý objekt, aby som zabránil možnej zhode, i keď riziko je malé.

Editováno 10.11.2014 14:57
Nahoru Odpovědět
10.11.2014 14:57
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Haňáček:10.11.2014 15:11

Já teda nevím, ale stále mi nějako uniká důvod proč to chceš hashovat. PHP přiznám se neumím, ale databázový stroj si přeci může sám hlídat unikátnost klíčů a "hlídat" si to sám programově mi příjde jako zbytečná činnost ... asi jsem to co potřebuješ zle pochopil, a nebo to je mou neznalostí technologie.

V jaké to chceš mít databázi?

Nahoru Odpovědět
10.11.2014 15:11
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Michal Haňáček
Neaktivní uživatel:10.11.2014 15:17

V databázi bude viac tabuliek.
V jednej zoznam používateľov, druhá bude pre nadradený objekt, v tretej bude zoznam podradených objektov,...(ta­buliek bude istotne viac)
Ak nechám databázu vytvoriť IDy pomocou auto_increment, v jednej, druhej a vlastne všetkých tabuľkách budú rovnaké IDy a to môže spôsobiť vážny problém, ak sa tieto IDy stretnú.

// A DB je MySQL.

Editováno 10.11.2014 15:18
Nahoru Odpovědět
10.11.2014 15:17
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Štěpánek:10.11.2014 16:57

Můžeš mít tabulek kolik chceš a v každé může být sloupec ID (auto_increment). Pak máš nějakou spojovací tabulku, kde bude první sloupec taky ID (aito_increment) a další sloupce budou jako cizí klíče taky ID, ale budou se brát z těch původních tabulek. Takže o nějakém problému nemůže být řeč.
Pokud nejde o nějaké tajné ID uživatele, není třeba to ID hashovat.
K těm tvým dvěma tabulkám, co jsi uvedl výše bych přidal jednu "spojovací, kde by bylo

id_záznamu
id_uzivatel
id_objektu

kde id_záznamu by bylo auto_increment a ostatní by se dosazovaly podle uživatele a objektu z jejich tabulek...

Editováno 10.11.2014 17:00
Akceptované řešení
+20 Zkušeností
Řešení problému
Nahoru Odpovědět
10.11.2014 16:57
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Neaktivní uživatel:10.11.2014 17:42

Dik. Nejako to skúsim s tou spojovacou tabuľkou.

Nahoru Odpovědět
10.11.2014 17:42
Neaktivní uživatelský účet
Avatar
Odpovídá na Michal Štěpánek
Neaktivní uživatel:10.11.2014 17:47

Ešte sa predsa opýtam. Ako by si spravil, že používateľ dá objektu napr.odber. Na všetky odbery si mám vytvoriť novú tabuľku?

Nahoru Odpovědět
10.11.2014 17:47
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Štěpánek:10.11.2014 18:26

Nevím, jestli jsem ten "odběr" správně pochopil (jako třeba odebírání novinek, nebo zpráv o produktu), ale udělal bych tabulku, třeba odbery

id_odber(auto_increment)
id_uzivatel
id_objekt

a když si uživatel odběr zaškrtne, nebo nějak zvolí, přidá se záznam do DB do té tabulky "odbery": Když odběr zruší, jednoduše se smaže příslušný záznam...

Editováno 10.11.2014 18:28
Nahoru Odpovědět
10.11.2014 18:26
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Neaktivní uživatel
Michal Haňáček:10.11.2014 18:58

Hele "spojovací tabulka" je typický příklad vazby M:N ... na to vygooglíš miliardu článků, tutoriálů a dalších (a vsadil bych boty, že i tady na to nějaký ten tutoriál bude) :).

Nahoru Odpovědět
10.11.2014 18:58
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
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 12 zpráv z 12.