![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 695 Pomógł: 65 Dołączył: 27.07.2009 Skąd: Y Ostrzeżenie: (0%) ![]() ![]() |
witam
Prowadzę pewną grę via www, pisząc ją uczyłem się php,mysql aktualnie jestem w trakcie wprowadzania pewnych zmian w grze co wiąże się ze zmianą struktur tabel no i przy okazji wolał bym już zrobić wszystko aby było bardziej prawidłowo napisane ale nie jestem w stanie sam stwierdzić co wypada poprawić/ zmienić dlatego proszę userów tych bardziej zorientowanych w mysql o pomoc 1) Przy rejestracji dane użytkownika są dodawane do 2 tabel konto - tutaj trzymam podstawowe dane typu login haslo email itp postacie - nazwa postaci i inne podstawowe dane oraz id postaci jest dodawane do kilku tabel, w momencie gry dane są w tych tabelach aktulizowane na chwile obecną chcę wprowadzić możliwość posiadania kilku postaci na jednym koncie dlatego widzę to w taki sposób: Przy rejestracji dodawane są dane tylko do tabeli konto + ewentualnie jakieś innej gdzie też są informacje o koncie po zalogowaniu gracz może się wcielić lub utworzyć nową postać (o ile nie ma maksymalnej ilości postaci) i dopiero przy ewentualnym stworzeniu postaci dodawane są dane do tabeli postacie + pozostałych innych tabel związanych z postacią czyli około dodatkowych 6. Oczywiście do tabeli postacie powinienem dodać pole id konta aby było wiadomo pod które konto jest podpięta postać. czemu opisałem dosyć szczegółowo jak to wygląda ? ponieważ liczę się z tym że można bardziej wydajnie to zrobić. 2) w każdej tabeli o postaci/koncie mam pole ID - primery,auto_increment id konta,postaci - index (oraz z nie wiadomych mi przyczyn unique) tutaj zastanawiam się po co trzymać 2 takie same pola bo na chwile obecną id = id konto,postac 3) Index jak zweryfikować czy warto na dane pole zakładać index (oprócz na id konta/postaci bo to rzecz oczywista) 4) typ tabeli to MyISAM , może warto przejść na INNODB oraz pozakładać klucze obce na pola w tabelach id konta,postaci (IMG:style_emoticons/default/questionmark.gif) 5) jaka jest różnica w jeżeli dla loginu bym utworzył oddzielny index a dla e-mail oddzielny od tego widocznym na zdjęciu. (IMG:http://img804.imageshack.us/img804/9605/capture12262011173447.th.jpg) Uploaded with ImageShack.us z góry dziękuje za pomoc i proszę o wyrozumiałość (IMG:style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Pole id_postaci w tabelach BA i BB powinno być unikalne UNIQUE, żeby nie "mieszały się" dane postaci (de facto tylko wtedy będzie to określać relację jeden do jednego). UNIQUE KEY to specyficzny INDEX, zatem masz odpowiedź na jedno z pytań.
Zależność CONSTRAINT dodana jak najbardziej prawidłowo. Dane/rekordy do tabel BA i BB powinny być dodane już w momencie tworzenia postaci, jeśli tylko dana postać będzie kiedykolwiek korzystać z informacji z tych tabel. Skoro korzystasz z silnika InnoDB to wykorzystaj możliwości jakie daje i użyj transakcji podczas dodawania postaci. Alternatywą jest TRIGGER AFTER INSERT, który dodaje do tabel BA i BB domyślne wartości pod nowym id_postaci, a później zapytanie aktualizujące (UPDATE), które aktualizuje dodany rekord, używając danych użytkownika. EDIT: Napomnę jeszcze, że taki podział tabel bazy danych ma sens tylko wtedy, kiedy danych/informacji o postaci jest naprawdę bardzo dużo jak i wtedy, gdy możemy je podzielić na pewne charakterystyczne "grupy". Ten post edytował mortus 29.12.2011, 20:40:43 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 22:17 |