powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь по структуре базы
25 сообщений из 25, страница 1 из 1
Нужна помощь по структуре базы
    #39612241
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Делаю свой учебно-тренировочный проект (для себя пока, разбираюсь), и есть вопрос по структуре базы.. Никак не могу понять, как сделать правильно таблицы со счетом спортивного соревнования.

У меня есть спортивный турнир. В нем игры, в каждой игре по 8-10 периодов (их может быть больше - пусть будет максимум 14, может меньше). Играют две команды, табло счета есть выглядит примерно так:
Код: plaintext
1.
Команда 1: 1 0 2 1 2 0 1 2   9
Команда 2: 0 1 0 0 0 1 0 0   2

Как сделать форму и передать значения в базу я разберусь сам, интересует как правильно хранить эти значения в базе. Чтобы можно было обратиться с запросом, к примеру, по всем играм определенной команды с итоговым счетом,
и получать результат:
Код: plaintext
1.
Команда 1   9:2   Команда 2
Команда 1   3:5   Команда 3
и т. п.
То есть понимаю, что нужно сделать как-то, чтобы итоговый результат считался сам, складывая сумму очков во всех периодах. Но тут есть два момента:
1) в некоторых периодах может стоять "Х", это значит, что одна команда "закрылась" - игра закончена досрочно. К примеру,
Код: plaintext
1.
Команда 1: 1 0 2 1 2 Х Х Х   4
Команда 2: 0 1 0 0 0 X X X   1
2) мне нужна возможность внести в базу просто итоговый счет, без счета по периодам, то есть просто
Код: plaintext
1.
Команда 1:  4
Команда 2:  1
то есть этот момент нужно предусмотреть в базе.
Подскажите, пожалуйста, какие таблицы будет правильно сделать в этом случае. Сейчас есть таблицы:
team
id | name | tournament_id

game
id | datetime | team1_id | team2_id |

Как я понимаю, нужна таблица
scores
id | game_id | team1_id | period1 | period2 | .... | period14 | total
id | game_id | team2_id | period1 | period2 | .... | period14 | total

Подскажите, как правильно.. Чтобы сразу сделать как надо, а не переделывать всё, когда там будут тысячи записей )
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612268
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeem team
id | name | tournament_id

game
id | datetime | team1_id | team2_id |

Как я понимаю, нужна таблица
scores
id | game_id | team1_id | period1 | period2 | .... | period14 | total
id | game_id | team2_id | period1 | period2 | .... | period14 | total

Подскажите, как правильно.. Чтобы сразу сделать как надо, а не переделывать всё, когда там будут тысячи записей )

можно сделать scores:
id | game_id| period_num | team_1_score | team_2_score

тогда вы сможете не думать о том, сколько будет периодов. хоть один, хоть 100. ну и очки суммировать легко по коммандам или по игре.
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612403
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наутилус
можно сделать scores:
id | game_id| period_num | team_1_score | team_2_score

тогда вы сможете не думать о том, сколько будет периодов. хоть один, хоть 100. ну и очки суммировать легко по коммандам или по игре.

Я думал об этом.. А как в таком случае внести просто итоговый счет в игре, если у меня по какой-то причине нет счета по периодам (суммироваться нечему будет)? То есть мне нужно просто внести
Код: plaintext
Команда 1   9:2   Команда 2
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612455
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeem,

ну добавьте буле поле isTotal
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612705
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeemЯ думал об этом.. А как в таком случае внести просто итоговый счет в игре, если у меня по какой-то причине нет счета по периодам (суммироваться нечему будет)? То есть мне нужно просто внести
Код: plaintext
Команда 1   9:2   Команда 2
Period=0.
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612834
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё равно не очень понятно.. Если будет, к примеру, такая игра
Код: plaintext
1.
Команда 1: 1 0 2 1 2 0 1 2   9
Команда 2: 0 1 0 0 0 1 0 0   2

то в таблице scores
id | game_id| period_num | team1_score | team2_score
будет:
1 100 1 1 0
2 100 2 0 1
3 100 3 2 0
...

соответственно total у первой команды я могу считать как
SELECT SUM(team1_score) FROM scores WHERE game_id = 100;

отмечаю в поле istotal = 1, если игра закончена.

Хорошо, а если у меня нет счета по периодам, а есть только финальный - я его ставлю в строки с period_num = 0 (как подсказано Akina) b отмечаю istotal = 1.

Ок, а как-то можно сделать, чтобы и в случае с внесением счета по периодам общий счет фиксировался в таблице? Чтобы просто одним запросом можно было его оттуда получить?
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612835
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeem,

ну так при вставке, если период_нам не ноль, обновляйте запись с итоговым счетом
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612840
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наутилусvadeem,

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

Понял, да. Так мне и нужно. Подскажите, как это делать? Я только учусь) или где почитать..
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612842
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeem,

вставьте новую запись, удалите запись с период_нам = 0, и вставьте новую с пересчитанной суммой
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612849
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наутилус, огромное спасибо!

Теперь я понял, что делать.
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612941
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeemХорошо, а если у меня нет счета по периодам, а есть только финальный - я его ставлю в строки с period_num = 0 (как подсказано Akina) b отмечаю istotal = 1.

а что делать, если таблицу сгрызла моль ))
запишите туда период с финальным счётом: 9:2
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39612942
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeemКак я понимаю, нужна таблица
| period1 | period2 | .... | period14 |

вместо этого ада придумали "нормальные формы" - погуглите
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613033
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78vadeemКак я понимаю, нужна таблица
| period1 | period2 | .... | period14 |

вместо этого ада придумали "нормальные формы" - погуглите

Я теперь понял, что моя первая "идея" была неправильной, я и не пытался утверждать, что то решение верное


Так мне подсказали выше - что-то неправильно?
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613192
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeemчто-то неправильно?Да, неправильно. Идеологически.

У Вас одновременно хранятся частные данные (результаты по эндам) и окончательный (суммарный) результат. При этом:

1) Не установлен приоритет - т.е. при наличии и того, и другого результатов какой брать, а какой игнорировать;
2) Не поддержана целостность - т.е. сумма по эндам может не соответствовать итоговому результату, а также набор эндов может быть неполным.

В первую очередь надо решать ЭТИ проблемы.
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613334
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeemТак мне подсказали выше - что-то неправильно?

для Делаю свой учебно-тренировочный проект всё нормально.
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613397
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, так у меня будет поле isototal (isfinished можно). При наличии 1 в нет в каком-то из эндов и будет установлено, что
1) игра закончена
2) этот энд был последним (в результате можно будет вывести) 9:2 (8 эндов).
Или нужно делать другую таблицу для этих данных?
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613415
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeemтак у меня будет полеЯ не о том вообще-то. Представь, что у тебя по каким-то причинам пропала (удалена) запись результата первого энда...
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613592
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinavadeemтак у меня будет полеЯ не о том вообще-то. Представь, что у тебя по каким-то причинам пропала (удалена) запись результата первого энда...
Целостность можно обеспечить либо ограничитель (constraint) - как при назначении внешнего ключа (это мне знакомо), так и триггер (с ними дела не имел). Если я неправ, поправьте.. То есть нужно сделать еще одну таблицу, где отдельно хранить итоговый счет? Тогда после окончания игры туда должен заноситься итоговый счет и проверяться, соответствует ли он счету по эндам? Правильно я мыслю?
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613599
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeem,

вы себе противоречите. выше писали, что может быть неизвестен энд, а итоговый есть.

авторА как в таком случае внести просто итоговый счет в игре, если у меня по какой-то причине нет счета по периодам (суммироваться нечему будет)?
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613644
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наутилус, верно.
Итоговый счет будет в любом случае, а по эндам - нет. То есть таблица с итоговым счетом мне нужна совершенно точно отдельная, а по эндам - можно сделать дополнительную. Только как их связать, непонятно.
Я пока не совсем запутался, но близок к этому.

Как это сделать, "чтобы работало и ну его" я и сейчас примерно представляю. Но я хочу сделать правильно, и чтобы потом не переделывать. С этим сложнее.
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613651
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeem,

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

пишите номер периода =0, и это будет итоговый счет, как советовали выше. ваша задача состоит в том, что бы интерфейсно минимизировать риски ввода неправильных данных или удаления без пересчёта.

хотя, опять же может быть такой случай: ввели первый период, второй, третий и итоговый. потом оказалось что данные по второму периоду неправильные, а правильного счета второго периода аы не знаете. но итог правильный! что тогда делать? удалять второй период, ведь результат введен неверный? пересчитывать итог?

в общем моё имхо: таблица у вас правильная и вам её будет достаточно. вопрос только вот в таких сценариях, когда данные могут вноситься неправильно
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39613878
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeemтаблица с итоговым счетом мне нужна совершенно точно отдельная, а по эндам - можно сделать дополнительную. Только как их связать, непонятно.Да никак!!! Они НЕ СВЯЗАНЫ! Сведения по результатам эндов - это временные данные для матча, имеющего статус "незавершённый", ну и при определённых условиях исходные данные для формирования итогового результата. А после его завершения сведения по результату (получаемые суммированием результатов эндов или водимые напрямую) - это уже постоянные данные. После появления которых надобность в данных по эндам, во всяком случае в рамках задачи, отпадает, и формально они как временные должны быть вычищены из БД.

Я не зря сказал, что пока что проблемы носят идеологический характер. И до их решения заниматься созданием отображения процесса на структуру БД - бессмысленно.
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39614039
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, а если я хочу оставить данные по эндам в таблице? И при их наличии выводить, например, по запросу все игры какой-то команды со счетом по эндам?
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39614046
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadeemа если я хочу оставить данные по эндам в таблице?Да оставляй, пожалуйста... Просто если у тебя в таблице присутствует окончательный итог, результаты по эндам ты должен игнорировать. И если выводить их - то исключительно для справки. А вот если окончательный итог отсутствует - тогда результат считается по эндам. Причём если присутствуют результаты по всем эндам, ты должен сразу посчитать итоговый счёт, внести его в таблицу - и начать результаты по эндам игнорировать.
...
Рейтинг: 0 / 0
Нужна помощь по структуре базы
    #39614642
vadeem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, наутилус,
Спасибо большое. Стало понятнее
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь по структуре базы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]