HgReed
4.02.2012, 23:17:04
Witam.
Chcąc zaprojektować (tak o, edukacyjnie, może coś z tego będzie) prostą grę RPG już przy rozrysowywania projektu mam problem:
Jak trzymać w bazie danych ekwipunek?
Pomysły mam dwa:
- dwie tabele - założone i plecak - id user'a i lista przedmiotów jako CSV (id _pierwszego_przedmiotu,2,5,11), jako CHAR - powiedzmy id do 99999 i 10 przedmiotów na raz - daje 60 znaków długości,
- tabela przedmioty - każdy row to id użytkownika z id przedmiotu i bool'em założony/nie założony (ale tu do zera spada optymalność).
Czy da się to jakoś normalnie zrobić, czy pchać się w ten pierwszy pomysł?
ActivePlayer
5.02.2012, 10:38:03
imho drugie rozwiązanie jest lepsze. dużo łatwiej będzie CI tymi danymi zarządzać, przeszukiwać, modyfikować etc.
Nie zgodze się też że optymalność spada do zera.
HgReed
5.02.2012, 15:49:12
Do zera może nie, ale:
- 10 row'ów na same założone przedmioty,
- 50 row'ów na plecak
Daje 60x row / user. To strasznie dużo.
ActivePlayer
5.02.2012, 18:23:09
imho to nie dużo, tworząc odpowiednio indexy i zakładając fk (zakładam że używasz InnoDB) wg mnie to jest pestka dla mysqla.
alegorn
8.02.2012, 16:23:21
hmmm nie wiem czy dobrze rozumiem... ale to klasyczne wiele do wielu...:
tabela przedmioty
tutaj opis wszystkich przedmiotow i ich cech
tabela user
info o userze
tabela plecak
user_fk smallint(5) unsigned NOT NULL,
przedmiot_fk smallint(5) unsigned NOT NULL,
oraz:
PRIMARY KEY (`user_fk`,`przedmiot_fk`),
chyba rozwiazuje problem?
HgReed
9.02.2012, 15:47:10
alegorn - to to ja wiem jak zrobić - po prostu myślałem, że jest jakieś optymalniejsze wyjście.
alegorn
9.02.2012, 18:54:41
na sql'owych bazach? nie bardzo. moze na nosql, ale to i tak nie do konca w takim formacie jak zaproponowales...
tzn jesli juz chodzi ci o format csv.. co prawda mysql ma taki silnik bazy danych - i jesli sie zdecydujesz na cos takiego - jakos bedzie to dzialac - ale bez zadnego porownania do np: mongodb.
jesli myslisz o innodb to zastanow sie co bedzie szybciej:: wykorzystac mechanizmy bazy danych - czy pisac samemu parser.. ?
dlatego na innodb - najszybciej bedzie ci dzialac model n:n
innodb - jest relacyjna baza danych, wiec nie ma sie co bac wykorzystywac mozliwosci tej bazy danych.
zwlaszcza ze przy prawidlowo pozakladanych kluczach - i odpowiednich pytaniach, przy samym odczycie - nie bedziesz musial sie odwolywac do wszystkich tabeli
da sie skonfigurowac by mysql odwolujac sie do tabeli plecak korzystal tylko z kluczy (nie bedzie przeszukiwal samej tabeli, wiec oszczedzasz na dyskowym IO )
hmmm no ale to juz powazniejsza dyskusja, i wykracza troche poza zwykle napisanie sql'a
pozdrawiam,
j.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.