Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
Добрый день! Делаю свой учебно-тренировочный проект (для себя пока, разбираюсь), и есть вопрос по структуре базы.. Никак не могу понять, как сделать правильно таблицы со счетом спортивного соревнования. У меня есть спортивный турнир. В нем игры, в каждой игре по 8-10 периодов (их может быть больше - пусть будет максимум 14, может меньше). Играют две команды, табло счета есть выглядит примерно так: Код: plaintext 1. Как сделать форму и передать значения в базу я разберусь сам, интересует как правильно хранить эти значения в базе. Чтобы можно было обратиться с запросом, к примеру, по всем играм определенной команды с итоговым счетом, и получать результат: Код: plaintext 1. То есть понимаю, что нужно сделать как-то, чтобы итоговый результат считался сам, складывая сумму очков во всех периодах. Но тут есть два момента: 1) в некоторых периодах может стоять "Х", это значит, что одна команда "закрылась" - игра закончена досрочно. К примеру, Код: plaintext 1. Код: plaintext 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 Подскажите, как правильно.. Чтобы сразу сделать как надо, а не переделывать всё, когда там будут тысячи записей ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 14:17 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
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. ну и очки суммировать легко по коммандам или по игре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 15:33 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
наутилус можно сделать scores: id | game_id| period_num | team_1_score | team_2_score тогда вы сможете не думать о том, сколько будет периодов. хоть один, хоть 100. ну и очки суммировать легко по коммандам или по игре. Я думал об этом.. А как в таком случае внести просто итоговый счет в игре, если у меня по какой-то причине нет счета по периодам (суммироваться нечему будет)? То есть мне нужно просто внести Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 02:16 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeem, ну добавьте буле поле isTotal ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 10:58 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeemЯ думал об этом.. А как в таком случае внести просто итоговый счет в игре, если у меня по какой-то причине нет счета по периодам (суммироваться нечему будет)? То есть мне нужно просто внести Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 22:23 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
Всё равно не очень понятно.. Если будет, к примеру, такая игра Код: plaintext 1. то в таблице 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. Ок, а как-то можно сделать, чтобы и в случае с внесением счета по периодам общий счет фиксировался в таблице? Чтобы просто одним запросом можно было его оттуда получить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2018, 18:53 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeem, ну так при вставке, если период_нам не ноль, обновляйте запись с итоговым счетом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2018, 18:57 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
наутилусvadeem, ну так при вставке, если период_нам не ноль, обновляйте запись с итоговым счетом Понял, да. Так мне и нужно. Подскажите, как это делать? Я только учусь) или где почитать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2018, 19:13 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeem, вставьте новую запись, удалите запись с период_нам = 0, и вставьте новую с пересчитанной суммой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2018, 19:16 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
наутилус, огромное спасибо! Теперь я понял, что делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2018, 19:53 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeemХорошо, а если у меня нет счета по периодам, а есть только финальный - я его ставлю в строки с period_num = 0 (как подсказано Akina) b отмечаю istotal = 1. а что делать, если таблицу сгрызла моль )) запишите туда период с финальным счётом: 9:2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2018, 07:19 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeemКак я понимаю, нужна таблица | period1 | period2 | .... | period14 | вместо этого ада придумали "нормальные формы" - погуглите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2018, 07:20 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
tip78vadeemКак я понимаю, нужна таблица | period1 | period2 | .... | period14 | вместо этого ада придумали "нормальные формы" - погуглите Я теперь понял, что моя первая "идея" была неправильной, я и не пытался утверждать, что то решение верное Так мне подсказали выше - что-то неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2018, 17:41 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeemчто-то неправильно?Да, неправильно. Идеологически. У Вас одновременно хранятся частные данные (результаты по эндам) и окончательный (суммарный) результат. При этом: 1) Не установлен приоритет - т.е. при наличии и того, и другого результатов какой брать, а какой игнорировать; 2) Не поддержана целостность - т.е. сумма по эндам может не соответствовать итоговому результату, а также набор эндов может быть неполным. В первую очередь надо решать ЭТИ проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 08:28 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeemТак мне подсказали выше - что-то неправильно? для Делаю свой учебно-тренировочный проект всё нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 12:08 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
Akina, так у меня будет поле isototal (isfinished можно). При наличии 1 в нет в каком-то из эндов и будет установлено, что 1) игра закончена 2) этот энд был последним (в результате можно будет вывести) 9:2 (8 эндов). Или нужно делать другую таблицу для этих данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 13:25 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeemтак у меня будет полеЯ не о том вообще-то. Представь, что у тебя по каким-то причинам пропала (удалена) запись результата первого энда... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 13:42 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
Akinavadeemтак у меня будет полеЯ не о том вообще-то. Представь, что у тебя по каким-то причинам пропала (удалена) запись результата первого энда... Целостность можно обеспечить либо ограничитель (constraint) - как при назначении внешнего ключа (это мне знакомо), так и триггер (с ними дела не имел). Если я неправ, поправьте.. То есть нужно сделать еще одну таблицу, где отдельно хранить итоговый счет? Тогда после окончания игры туда должен заноситься итоговый счет и проверяться, соответствует ли он счету по эндам? Правильно я мыслю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 16:20 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeem, вы себе противоречите. выше писали, что может быть неизвестен энд, а итоговый есть. авторА как в таком случае внести просто итоговый счет в игре, если у меня по какой-то причине нет счета по периодам (суммироваться нечему будет)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 16:23 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
наутилус, верно. Итоговый счет будет в любом случае, а по эндам - нет. То есть таблица с итоговым счетом мне нужна совершенно точно отдельная, а по эндам - можно сделать дополнительную. Только как их связать, непонятно. Я пока не совсем запутался, но близок к этому. Как это сделать, "чтобы работало и ну его" я и сейчас примерно представляю. Но я хочу сделать правильно, и чтобы потом не переделывать. С этим сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 17:18 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeem, я бы не делал отдельную таблицу для итогов. смысла в ней никакого - она будет иметь ровно такой же вид как по энда, только без номера периода. пишите номер периода =0, и это будет итоговый счет, как советовали выше. ваша задача состоит в том, что бы интерфейсно минимизировать риски ввода неправильных данных или удаления без пересчёта. хотя, опять же может быть такой случай: ввели первый период, второй, третий и итоговый. потом оказалось что данные по второму периоду неправильные, а правильного счета второго периода аы не знаете. но итог правильный! что тогда делать? удалять второй период, ведь результат введен неверный? пересчитывать итог? в общем моё имхо: таблица у вас правильная и вам её будет достаточно. вопрос только вот в таких сценариях, когда данные могут вноситься неправильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 17:25 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeemтаблица с итоговым счетом мне нужна совершенно точно отдельная, а по эндам - можно сделать дополнительную. Только как их связать, непонятно.Да никак!!! Они НЕ СВЯЗАНЫ! Сведения по результатам эндов - это временные данные для матча, имеющего статус "незавершённый", ну и при определённых условиях исходные данные для формирования итогового результата. А после его завершения сведения по результату (получаемые суммированием результатов эндов или водимые напрямую) - это уже постоянные данные. После появления которых надобность в данных по эндам, во всяком случае в рамках задачи, отпадает, и формально они как временные должны быть вычищены из БД. Я не зря сказал, что пока что проблемы носят идеологический характер. И до их решения заниматься созданием отображения процесса на структуру БД - бессмысленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 07:45 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
Akina, а если я хочу оставить данные по эндам в таблице? И при их наличии выводить, например, по запросу все игры какой-то команды со счетом по эндам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 12:10 |
|
||
|
Нужна помощь по структуре базы
|
|||
|---|---|---|---|
|
#18+
vadeemа если я хочу оставить данные по эндам в таблице?Да оставляй, пожалуйста... Просто если у тебя в таблице присутствует окончательный итог, результаты по эндам ты должен игнорировать. И если выводить их - то исключительно для справки. А вот если окончательный итог отсутствует - тогда результат считается по эндам. Причём если присутствуют результаты по всем эндам, ты должен сразу посчитать итоговый счёт, внести его в таблицу - и начать результаты по эндам игнорировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 12:20 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39612849&tid=1829989]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 148ms |

| 0 / 0 |
