SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.01.2013 05:07:33

dmonco
Участник
Зарегистрирован: 22.01.2013
Сообщений: 1

Как правильно организовать структуру базы

Помогите исправить ошибки и правильно организовать небольшую базу, чтобы понять логику процесса.

Исходные данные:
название лотереи (например, лото Мега-Сена)
континент (например, Северная Америка)
страна (например, США)
название валюты (например, доллар)
символ валюты (например, $ или USD)
минимальный джекпот (например, 10000000 - десять миллионов)
рекордный джекпот (например, 100000000 - сто миллионов - данных может не быть, поле останется пустым)
потенциальный джекпот (например, 10000000 - десять миллионов - данных может не быть, поле останется пустым)
следующий джекпот (например, 100000000 - сто миллионов)
дни проведения (понедельник, вт, ср, чт, пт, сб или воскресенье)
время проведения (наример, в 14:00)
дата проведения (10 августа 2012)
результат розыгрыша (например, 5,6,4,2,4,5 и бонусные номера 10 и 12 или 5,6,4,2,4 и только один бонусный номер 10, везде формат лотерей разный)

Логика у меня была такой:
1. Создаем для континентов таблицу. Континенты внесу сразу в базу, редактироваться они не будут.

2. Страны - то же самое, создаем отдельно таблицу, данные внесу сразу, редактироваться не будут.
В этой таблице делаю привязку к континенту по id.

3. Для валюты - отдельно таблицу:
- название валюты
- символ валюты
Так как планирую с админки добавлять, убирать валюту или опубликовывать, также добавил поля:
- published
- дату создания валюты
- кем создана (ну, админ или другой юзверь)
- дата изменений (пишу для Joomla, там есть такой функционал)
- кем внесены изменения

4. Следующая таблица - дни недели.
- ид дня
- название (понедельник, вторник и т.д.)

5. Таблица по лотереям (лотереи будут добавляться или убираться с админки)
- ид лотереи
- название
- ид континента
- ид страны
- ид валюты
- минимальный джекпот (если есть данные)
- рекордный джекпот джекпот (если есть данные)
- потенциальный или другой джекпот джекпот (если есть данные)
- следующий джекпот (если есть данные)
- опубликована или не опубликована (1 или 0)
и стандарт когда создана, кем создана, когда внесены изменения и кем внесены изменения

6. Шестая таблица - дни розыгрыша. У некоторых три розыгрыша в неделю, у некоторых один раз в неделю.
- ид розыгрыша
- ид лотереи
- ид дня
- время проведения в этот день

7. И последняя таблица - результаты проведенных лотерей
- ид результата
- ид лотереи
- дата розыгрыша
- результат розыгрыша (здесь может быть что угодно, я в том плане, у некоторых 6 номеро, у некоторых лотерей 6 основных и два дополнительных шара, но не более 8 всего)

Из всего написанного, вот что я накуралесил:


CREATE TABLE `#__continents` (
  `continent_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `continent_name` char(64),
  PRIMARY KEY(`continent_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Used to store continents';

CREATE TABLE `#__countries` (
  `country_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `country_name` char(64),
  `id_continent` int(10),
  PRIMARY KEY(`country_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Used to store countries';

CREATE TABLE `#__currencies` (
  `currency_id` smallint(1) UNSIGNED NOT NULL AUTO_INCREMENT,
  `currency_name` char(64),
  `currency_symbol` char(4),
  `published` tinyint(1) NOT NULL DEFAULT '1',
  `created_on` datetime NOT NULL default '0000-00-00 00:00:00',
  `created_by` int(11) NOT NULL DEFAULT '0',
  `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified_by` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`currency_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Used to store currencies';

CREATE TABLE `#__days` (
`day_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`day_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Used to store days';

CREATE TABLE `#__lotteries` (
  `lottery_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL DEFAULT '',
  `continent_id` int(10),
  `country_id` int(10),
  `currency_id` int(11),
  `min_jackpot` int(12),
  `max_jackpot` int(12),
  `other_jackpot` int(12),
  `next_jackpot` int(12),
  `published` tinyint(1) NOT NULL DEFAULT '1',
  `created_on` datetime NOT NULL default '0000-00-00 00:00:00',
  `created_by` int(11) NOT NULL DEFAULT '0',
  `modified_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified_by` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`lottery_id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Used to store lotteirs';

CREATE TABLE `#__drawday` (
  `drawday_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `lottery_id` int(10),
  `day_id` int(10),
  `drawtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
  PRIMARY KEY (`drawday_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Used to store days of draws';

CREATE TABLE `#__results` (
  `result_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `lottery_id` int(10),
  `drawdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `drawresult` varchar(255) NOT NULL,
  PRIMARY KEY (`result_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='Used to store results of draws';

 

Подскажите, правильно ли организовал структуру или есть ошибки?
И по полям правильно ли всё определил для создания таблиц?

Неактивен

 

#2 03.02.2013 06:42:42

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Как правильно организовать структуру базы

Организация БД зависит от запросов, которые вы собираетесь выполнять. По запросам станет понятно, что могут потребоваться дополнительные индексы.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson