Я программирую сайт, на котором хранятся данные сеанса покера. Сессия - это период времени, проведенный в казино, играющем в покер. Сессия содержит информацию, такую как дата/время, чистая прибыль/потеря сеанса и место, где они играли. Тем не менее, часть, с которой я запутался, заключается в том, как обрабатывать сеанс типа. В покере есть два вида игр: кэш-игры и турниры. Каждый из них имеет свои собственные специальные поля только им. Ниже приведен пример таблицы (я удалил ненужные поля):Как нормализовать эту ненормированную таблицу базы данных?
+----+--------------+--------+--------+
| id | session type | stakes | buy-in |
+----+--------------+--------+--------+
| 1 | cash | 1/3 NL | NULL |
| 2 | cash | 1/2 NL | NULL |
| 3 | tournament | NULL | $20 |
+----+--------------+--------+--------+
Как вы можете видеть, мне не нужно buy-in
если тип сеанса наличными. Аналогично, если тип сеанса является турниром, мне не нужно поле stakes
.
Как бы я начал нормализовать таблицу таким образом, чтобы у меня не было полей NULL? По производительности, будет ли мое приложение страдать, если я нормализую эту таблицу, чтобы сделать это, чтобы у меня не было значений NULL в моей строке?
оставить одно поле с курсом имя/звание или что-то –
мне нравится первый ответ Lashane, но если только разница в том, один столбец, а все остальное уже написано, я бы просто убедитесь, что session_type является индексом и двигаться дальше к чему-то другому.Нормализация не принесет большого прироста производительности, если у вас нет миллионов строк. – CptMisery
Ваша текущая таблица нормализована, это реализация отношения «is-a». Первое решение Лашана - это еще один способ реализации отношения «is-a». Значения 'null' в вашей реализации прекрасно (и разрешены в нормализации), и вы получите их обратно, когда вы будете делать« select »из сеансов, оставленных join cash_sessions, на ... left join tournament_session on ...', что стандартный запрос, чтобы делать что-либо с вашими данными. Он будет медленнее (из-за соединения), но сохранит некоторое хранилище (на hdd (менее важно) и в ram (что более важно, хотя для соединения требуется также ram)). – Solarflare