Navrhnutie riešenia – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Navrhnutie riešenia – MySQL – Fórum – Programujte.comNavrhnutie riešenia – MySQL – Fórum – Programujte.com

 

lukas.balaz0
Super člen
11. 12. 2014   #1
-
0
-

Čaute

V MySQL som ešte len začiatočník (no vlastne ešte niečo menej ako začiatočník) a potrebujem pomôcť ako mám navrhnúť tabuľky, ak mám niečo takéto:

  • Neobmedzený počet zákazníkov si môže urobiť neobmedzený počet setov nábytku. Každý zákazník bude mať v cookies nejaké ID pomocou ktorého sa môžem dostať k jeho cartu (teda zoznamu jeho setov)
  • Set sa skladá neobmedzeného množstva objektov, ku každému musím vedieť čísla X,Y,R (kde sú položené a ako sú zrotované) ... ak by to bolo lepšie, nebude problém tieto 3 čísla hodiť do jedného stringu a oddeliť to nejakým separátorom (pretože tieto jednotlivé čísla nebudem nikde v PHP potrebovať, parsovať to budem len v Unity webovej aplikácii, kde beží konfigurátor), ale takéhoto postupu by som sa chcel inde vyvaovať
  • Objekt je 5 čísel ... dokopy je pre objekt niečo cez 50 000 možností

Mám nápad urobiť samostatnú tabuľku pre objekty, kde bude každý pod svojou ID a tú budem postupne dopĺňať, takže budú tam len objekty ktoré sa už niekedy použili (mám pocit, že zistiť, či v tabuľke o 50 000 riadkoch je nejaký konkrétny riadok je v MySQL docela rýchle). Potom neviem, či je dobré robiť tabuľku aj pre sety, pretože tých môže byť velikánske množstvo, skôr urobiť tabuľku priamo pre zákazníkov, ale nenapadá mi žiadny spôsob, ako tam tie data ukladať (každý zákazník môže mať značný počet setov a každý set značný počet objektov ... a potrebujem sa vedieť rýchlo dostať napr. ku konkrétnemu setu alebo potrebujem set vymazať, zmeniť mu počet objektov atď... nezdá sa mi dobrý nápad to mať uložené ako stĺpce: set1_objekt1_id .... v tom sa bude strašne orientovať). Ďalší zlý nápad je asi aj robiť pre každého zákazníka samostatnú tabuľku, v čom by sa ale orientovalo oveľa lepšie, pretože každý set by mal vlastný riadok (hoci stále by som tam musel mať stĺpce objekt1_id, objekt1_x,objekt1_y), ale myslím, že počet tabuliek je limitovaný. A teraz som si aj uvedomil, že pre obidve riešenia bude problém to, že každý zákazník má iný počet setov a každý set má iný počet objektov ... ale stĺpce budú musieť byť pre každého rovnako (a budem samozrejme aj potrebovať veľmi rýchlo zistiť koľko setov má zákazník a koľko objektov má set). Ja fakt neviem ako to mám riešiť, prosím pomôžte mi ..

Ďakujem

Nahlásit jako SPAM
IP: 80.242.41.–
lukas.balaz0
Super člen
11. 12. 2014   #2
-
0
-

#1 lukas.balaz
Ale prosím vás ... naozaj to potrebujem ...

Nahlásit jako SPAM
IP: 80.242.41.–
Flowy0
Věrný člen
11. 12. 2014   #3
-
0
-

definuj si vztahy a nakresli si model v mysql workbench ... potom je vsetko jednoduche

... pozname tri (resp 4) vztahy - 1:1, 1:N, M:N, N:1 ... ako ich zrealizujes si najdi niekde inde (foreign key, primary key)

zakaznik:setNabytku - jeden zakaznik moze mat N setov ... jeden set moze mat bud jedneho zakaznika alebo viac zakaznikov moze mat jeden set

zakaznik:cookie - 1:1 alebo ak chces tak 1:N aby mohol mat jeden zakaznik viac cookies (na roznych prehliadacoch)

setNabytku:objekt - jeden set moze mat N objektov, jeden objekt moze byt v M setoch ... teda budes mat vztah setNabytku - binder - objekt ... do bindera mozes dat parametre ktore spajaju set a objekt - objekt ma v danom sete danu poziciu

na rychlost sa nepozeraj kym to nebudes mat funkcne ... tabulky zvladaju (vyhladat) miliardy zaznamov s takmer rovnakou rychlostou ako by ich bolo tisic

Nahlásit jako SPAM
IP: 95.103.190.–
https://github.com/Flowy
lukas.balaz0
Super člen
12. 12. 2014   #4
-
0
-

#3 Flowy
OK diki ... dosť som sa s tým hral, už tomu pomaly začínam chápať .. ešte mám jednu otázku:
v tabulke objekt musím mať primary key, aby som si to mohol pamätať v tom bindery, a asi ho chcem mať nastavený na auto increment, ale teraz neviem, ako zistiť, či už riadok, čo chcem vložiť, existuje (s tým, že sa bude stĺpec ID ignorovať) a ak nie, uložiť jeho index, alebo ho vytvoriť. Skúšal som toto, ale nefunguje to (pretože kvôli tomu auto increment sa to vždy vytvorí, a tiež neviem, že aj keby sa to nevytvorilo, čo bude uložené v LAST_INSERT_ID()):

INSERT IGNORE INTO objekt VALUES(null,1,2,3);
set @objekt_id=LAST_INSERT_ID();

Diki

Nahlásit jako SPAM
IP: 80.242.41.–
peter
~ Anonymní uživatel
4014 příspěvků
12. 12. 2014   #5
-
0
-

Jestli to chapu spravne, tak
LAST_INSERT_ID() vraci posledni id INSERTu. A funguje tusim jen u autoincrementu.

google = INSERT IGNORE INTO site:cz
Pokud narazi na problem, tak nevypise error a pokracuje dalsim prikazem. Pokud tam zadny prikaz neni a nenastal error, pak LAST_INSERT_ID bude posledni radek. Pokud nastal error, tak tam bude predchozi insert id.
Ja osobne bych ty errory chtel mit vypsane.

http://www.linuxsoft.cz/article.php?id_article=816
http://cs.wikipedia.org/wiki/INSERT#…
Pokud tam mas duplicity, je mozne pouzit UPDATE nebo REPLACE.
INSERT INTO users_partners (uid,pid) VALUES (1,1) ON DUPLICATE KEY UPDATE uid=uid
INSERT INTO hledane_vyrazy(id,vyraz,pocet_hledani) VALUES(178,"Britney Spears",1) ON DUPLICATE KEY UPDATE pocet_hledani=pocet_hledani+1;

Pak jsou moznosti jako IF NOT EXISTS.

Nicmene tebe zpis zajimaji kostrukce jako
id = 123
try {
UPDATE ... id
} catch (exception) {
INSERT INTO ... null
id = LAST_INSERT_ID()
}
https://pornel.net/postmysql

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:5d15:91...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

Pavel Herout - riešenia — založil djmathias

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý