Схема базы данных MySQL — общие вопросы

обратите внимание, что я новичок в проектировании баз данных, так как никогда этого не делал.

У меня есть веб-сайт, созданный для онлайн-игры, созданной на Java. Когда игрок выходит из игры, я добавляю строку (или обновляю строку, если она уже существует) в таблице с именем «рекорды» в базе данных с именем «рекорды»...

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

Итак, в моем PHPMyAdmin у меня всего 5 баз данных: information_schema, performance_schema, mysql, рекорды и < strong>форумы. Первые три базы данных были добавлены, когда я установил phpmyadmin, и я их не трогал. База данных forums, которую я создал при установке форумов; он запросил базу данных для создания таблиц, поэтому я создал новую базу данных, чтобы поместить в нее все таблицы.

Итак, у меня есть несколько вопросов...

  1. Устроена ли моя база данных так, как это сделал бы обычный веб-сайт? Если нет, то как на типичном веб-сайте с рейтингами и форумами будут настроены базы данных? Есть ли у них одна база данных для их веб-сайта, а затем одна база данных для их игры?

  2. Если я хочу добавить статистику о сервере, такую ​​как «количество учетных записей x было создано» или «количество игроков x в настоящее время онлайн», где я должен хранить эту информацию? Я думал о том, чтобы переименовать базу данных рекордов в «игру» (или название моей игры), а затем внутри нее будет таблица «рекорды» и таблица «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 и оставить базу данных 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. Я даже не уверен, что вы имеете в виду. Когда новости сохраняются, они могут храниться в базе данных, и в этом случае текст извлекается для статьи и форматируется для отображения, или это может быть файл на сервере на основе информации об идентификаторе и ссылке, хранящейся в базе данных, и вашего скрипта. просто извлекает и отображает его.

В целом существуют рекомендации по нормализации баз данных, которые вам следует изучить для своего сайта. Но сначала я бы предложил изучить отношения между вашим форумом и игрой. Если они неотделимы друг от друга, а именно, если человек играет в игру, он участвует в форуме и наоборот, тогда было бы лучше, если бы эти базы данных были на самом деле одной.

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