Схема на MySQL база данни - Общи въпроси

моля, имайте предвид, че аз съм нуб в проектирането на бази данни, тъй като никога не съм го правил.

Имам уебсайт, създаден за онлайн игра, създадена на Java. Когато играч излезе от играта, аз го карам да добави ред (или да актуализира ред, ако вече съществува) в таблица с име "highscores" в база данни с име "highscores"...

Имам страница с най-високи резултати на моя уебсайт, която използва php, за да изтегли данни от таблицата с най-добри резултати и да ги организира в html таблица, така че играчите да могат да видят своите резултати и всичко работи чудесно. Също така имам форуми на моя уебсайт, като инсталирах fluxBB (система за форуми) и я модифицирах по мой вкус.

Така че в моя PHPMyAdmin имам общо 5 бази данни: information_schema, performance_schema, mysql, highscores и < силни>форуми. Първите три бази данни бяха добавени, когато инсталирах phpmyadmin и не съм ги пипал. Базата данни зафоруми, която направих при инсталирането на форумите; той поиска база данни за създаване на таблици, така че направих нова база данни, в която да поставя всички таблици.

Така че имам някои въпроси...

  1. Моята база данни настроена ли е така, както би го направил един типичен уебсайт? Ако не, как един типичен уебсайт с най-високи резултати и форуми би настроил своите бази данни? Имат ли една база данни за уебсайта си и след това една база данни за играта си?

  2. Ако искам да добавя статистически данни за сървъра като „х брой акаунти са създадени“ или „х брой играчи в момента са онлайн“, къде да съхранявам тази информация? Мислех да преименувам базата данни с най-високи резултати на „game“ (или името на моята игра) и след това вътре ще има таблица „highscores“ и таблица „server_statistics“. Това хубаво ли е? Но таблицата "server_statistics" ще има само един ред, който съдържа статистиката... това нормално ли е?

  3. Ако искам да добавя анкета към моя уебсайт, бих ли създал нова база данни, наречена "анкета"? Или трябва да имам база данни, наречена като "уебсайт", където да поставя всички данни, свързани с уебсайта? Но имам база данни "форуми", така че какво да правя с това?

  4. Как уебсайтовете публикуват новини нормално? Ако статията се съхранява в базата данни, как публикуват новини, така че да се показват на началната страница? И тогава щеше ли да има база данни за "новини"?

Трудно е да се намерят общи въпроси онлайн... Опитах да търся, но моля, не ме свързвайте просто към статия, защото вероятно не е подходяща за моята ситуация.

Благодаря предварително.


person user1226792    schedule 22.02.2012    source източник
comment
Вероятно трябва да зададете всеки въпрос поотделно. По-вероятно е да получите отговор.   -  person jcubic    schedule 23.02.2012


Отговори (2)


Е, тъй като говорим за сравнително малка база данни, съдържаща информация за уебсайт и игра, би било за предпочитане да използвате website или game база данни и да разделите различната информация между таблици.

Мисля, че не уточнявате точно тук, как поддържате високите резултати? Свързани ли са към таблица с потребители, потребител във форум или просто поле за име в таблицата с най-добри резултати?

  1. Тъй като използвате външна форумна система, бих запазил тази база данни такава, каквато е, и просто ще създам втора, както е предложено по-горе, за използване от моята игра и моя уебсайт.

  2. Статистиката като повечето потребители онлайн и броят на акаунтите няма да бъдат запазени в базата данни, тъй като това би създало ненужни и излишни извиквания към DBMS, което не е оптимално. Те най-вероятно ще бъдат създадени в движение или дори по-добре с помощта на задача cron и създаване на кеширана статистика, която ще бъде показана на потребителя, дори ако този номер е преди няколко минути.

  3. Отново разполагайки с website база данни, след това ще създадете допълнителни таблици, ако е необходимо, вътре в website db и ще оставите forums базата данни така, както е.

  4. Повечето от сайтовете, които ще видите, ще имат централна база данни, която ще има няколко таблици, т.е. users , news, comments, reviews и др.

Схемата на таблицата с новини може да бъде под формата на:

id             int   auto_increment & primary key
title          varchar(*)
content        text or big varchar according to your needs
posted_on      datetime or timestamp
posted_by      int key representing the authors id

Като цяло, ако тепърва започвате с бази данни и се интересувате да научите повече за най-добрите практики, първо бих прочел няколко книги/статии по темата, което от своя страна ще доведе до по-специализирани теми като връзки с бази данни, нормализиране и най-добри практики.

Освен това ще откриете, че е много интересно да проверите как другите структурират своите бази данни и това може лесно да стане, като прегледате някои от проектите с отворен код, достъпни онлайн като joomla, wordpress и други. Когато започнете да се оглеждате, всичко ще стане много по-лесно.

person Kypros    schedule 22.02.2012
comment
Редовете в таблицата с най-добри резултати съдържат потребителското име на играча + 36 резултата. Така че във всеки ред има общо 37 стойности. Форумите са отделни от играта (те трябва да се регистрират отново) и нямам нищо против това. Не знам как ще получа статистика от моя сървър, която да се показва на уебсайта, ако не я съхранявам в база данни :S Моята игра има сървър и клиент, направени на Java. Когато сървърът работи, хората могат да се присъединят чрез клиент. Сървърът може да получи количеството хора онлайн, но как да накарам тази стойност да се показва на уебсайта, като не я съхранява първо в базата данни? - person user1226792; 23.02.2012
comment
Ако разбирам правилно, имате highscores таблица с username game1score game2score ...? За статистика не бих използвал база данни за прости числа като тези, които се променят постоянно и се показват много пъти. Можете дори да го запишете в обикновен плосък text или XML файл - person Kypros; 23.02.2012
comment
Да, така са настроени най-добрите ми резултати. Мисля, че вече получих всичките си отговори и ще опитам да го настроя да съхранява и чете статистиките от текстов файл. Благодаря за вашата помощ. - person user1226792; 23.02.2012
comment
Не е най-добрият начин за запазване на най-високите резултати според мен. Предлагам ви да прочетете малко за базите данни и например да помислите какво ще се случи, ако искате да добавите друга нова игра? Къде се съхраняват резултатите от 37-ия мач? - person Kypros; 23.02.2012

Нека се опитам да направя това по ред:

  1. Няма такова нещо като типичен уебсайт, има софтуерни пакети, които са проектирани да използват определена схема и това е, което те използват. Настройките варират според нуждите, това може да е 1 база данни с множество таблици или множество бази данни.
  2. Трябва да имате някъде таблица, която да следи влизането и излизането на вашите потребители, както и началните дати за определени акаунти. Ако по някаква причина разделяте форумите и класациите, бих ви предложил да разделите и управлението на потребителите.
  3. Зависи от вашето внедряване. Ако използвате продукт на някой друг, може да имате база данни, дефинирана за вас или изобщо да не е дефинирана, просто показана на вашия сайт и данни, които да се съхраняват другаде.
  4. Дори не съм сигурен какво имаш предвид. Когато се съхраняват новини, те могат да се съхраняват в база данни, в който случай текстът се извлича за статията и се форматира за показване, или може да бъде файл на сървъра и да се основава на ID и информация за връзка, съхранена в базата данни и вашия скрипт просто го извлича и показва.

Като цяло има най-добри практики за нормализиране на бази данни, които трябва да разгледате за вашия сайт. Но първо бих предложил да разгледате връзката, която имате между вашия форум и играта. Ако те са неделими една от друга, а именно ако човек играе играта, той участва във форума и обратното, тогава може би е по-добре тези бази данни всъщност да бъдат една.

person Karlson    schedule 22.02.2012
comment
Благодаря. Това, което имах предвид с въпрос 4, е, че ако уебсайт извлича статиите от база данни, тогава, за да добавите новини към уебсайта, трябва ръчно да влезете в базата данни и да добавите ред с новинарската статия? Това не изглежда правилно. - person user1226792; 23.02.2012
comment
Защо не звучи правилно? Ако се замислите, една статия не е нищо друго освен част от text, може би varchar за заглавието, datetime за posted_time, int за user_id и това може лесно да бъде запазено в ред с уникален идентификатор, разбира се - person Kypros; 23.02.2012
comment
Добре :S изглежда странно да влезеш в phpmyadmin и да вмъкнеш ред, за да направиш новинарска публикация? Мислех да направя форум, наречен Новини и когато там се направи тема от администратор, първата страница получава публикацията и я поставя на първа страница. - person user1226792; 23.02.2012
comment
Не бъркайте двете. Те не влизат в phpmyadmin и не добавят нов ред за новинарска публикация. Има търговски или създадени по поръчка системи, наречени CMS като системи за управление на съдържанието, които отговарят за актуализирането на записа на базата данни за CRUD операции. Google CMS, за да добиете представа за какво говоря - person Kypros; 23.02.2012