Я начинаю проектировать базу данных для хранения результатов лотереи для обучения, в моей стране я могу загрузить все результаты в Excel.
Так как в Excel все включено в электронную таблицу, я хочу сделать некоторую нормализацию для импорта этих данных, мой вопрос состоит в том, правильно ли мой дизайн ориентирован на производительность, и как работать с Group By, я не уверен, но я думаю, что я плохо провалился на последнем.
Мой первоначальный дизайн:
Для результатов:
CREATE TABLE `Game_Results` (
`Id` int UNSIGNED NOT NULL,
`Date_Game` date NOT NULL,
`Ball_01` tinyint UNSIGNED NOT NULL,
`Ball_02` tinyint UNSIGNED NOT NULL,
`Ball_03` tinyint UNSIGNED NOT NULL,
`Ball_04` tinyint UNSIGNED NOT NULL,
`Ball_05` tinyint UNSIGNED NOT NULL,
`Ball_06` tinyint UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
Для получения призовых данных:
CREATE TABLE `Game_Prize` (
`Game_Id` int UNSIGNED NOT NULL,
`Total_Bets` decimal UNSIGNED NOT NULL,
`Winners` smallint UNSIGNED NOT NULL DEFAULT '0',
`Prize_Per_winner` decimal UNSIGNED NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
Местоположение победителей:
CREATE TABLE `Prize_Location` (
`Game_Id` int UNSIGNED NOT NULL,
`State_Prize` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`City_Prize` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
Этот дизайн основан на желаемой веб-странице, скажем:
Один div с последним результатом, поэтому запрос будет:
SELECT `Ball_01`, `Ball_02`, `Ball_03`, `Ball_04`, `Ball_05`, `Ball_06` FROM Game_Results WHERE Id IN (SELECT MAX(Id) FROM Game_Results)
И Текущий Идентификатор будет глобальным в php / Javascript
Еще один div на той же странице с информацией о призе, поэтому запрос будет:
SELECT `Total_Bets`, `Winners`, `Prize_Per_winner` FROM Game_Prize Where Game_Id = Id (from php / javascript)
Если человек нажмет на Победителей, то откроется модальное окно с данными о местоположении.
На этот раз я могу сделать ВЫБОР на последнем столе и перечислить его, пока проблем нет.
Но я постараюсь создать несколько пользовательских фильтров, и тогда возникнут проблемы, мои фильтры позволят людям использовать функции:
- Что за мяч, который выходит раз за разом?
- Список упорядоченных шаров по времени выхода.
- В каком штате побеждает больше людей?
- Сколько человек выиграло в одном конкретном городе?
- Etc ..
И проблема с дубликатами, которые выходят с возможностью экспорта результата в PDF или DOCX, я буду искать любой плагин javascript для преобразования JSON на тех, на данный момент, я готов переделать ту же структуру оригинального Excel ( Я знаю о JOINS), пример:
GameID = 55, ..., штат = A, город = A (1 человек)
, ..., штат A, город = A (1 человек)
, ..., штат А, город = A (1 человек)
GameID = 56, ..., штат = C, город = H
GameID = 57, ...,,, (Без победителей)
В оригинальном Excel все находятся в одной строке, перемешивая ячейки для одной и той же игры. Перед символом равенства (GameID, State, City и т. Д.) Располагаются первые строки столбцов, после символа равенства - данные о боттоне, поэтому GameID перемещается по таблице, как GROUP BY.
Итак, как мне быть с последней таблицей ('Prize_Location'), поскольку иногда бывает 3 или 6 победителей?
Я имею в виду, когда-нибудь люди из того же города и штата выиграют, в таком случае, как справиться с этой ситуацией?
И конечно, это лучший способ создать эту базу данных?
PS .: Индекс, первичные ключи и т.д ... Я сделаю после того, как выберу оптимальный дизайн. В центре внимания будет производительность, поскольку я буду делиться этими данными в своем блоге и позволять людям фильтровать и запрашивать эти данные, другими словами, я понятия не имею, сколько людей должны использовать их одновременно.