Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Projekt tabeli z przedmiotami
Forum PHP.pl > Forum > Bazy danych > MySQL
HgReed
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
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
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
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
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
alegorn - to to ja wiem jak zrobić - po prostu myślałem, że jest jakieś optymalniejsze wyjście.
alegorn
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.