|
|
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Хай, всезнающий Олл! Мне казалось, сабжевая БД настолько же банальна, как и учет товаров, но, порывшись по форуму, не нашел ничего серьезного. Хотелось бы вести детальную статистику, а не просто таблицы игроков и команд. Реализовывать это все нужно будет на мускуле, так что хотелось бы обойтись без высших материй при создании запросов. Думаю большинство форумчан хорошо знакомо с предметной областью, поэтому объяснять не буду. Сам я новичек и не уверен в своих силах, прошу совета у коллективного разума. Принимаются любые замечания, только плиз по делу, без ртфмов :) п.с. хотелось бы иметь возможность писать просто запросы вида "сколько раз вася пупкин выходил на замену в матчах против газмяса". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 12:24 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
ну сходу, судьи бывают главными (в хоккее их вообще теперь 2 главных), линейными, резервными... потребуется, наверное, к судье прикрутить ещё и тип ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 13:57 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
egorychну сходу, судьи бывают главными (в хоккее их вообще теперь 2 главных), линейными, резервными... потребуется, наверное, к судье прикрутить ещё и тип Спасибо за замечание, это конечно учту. Это только первые наброски, без всех полей и других мелочей. Хотелось бы более конкретных замечаний и советов сейчас, чтобы потом иметь поменьше секса с запросами. Может нужно где-то прибегнуть к денормализации\нормализации... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 14:03 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Одна из двух таблиц game_events или game_join_player - лишняя. Пожалуй - game_join_player. Вход в игру и выход из нее, тоже событие. Такое же как забитие гола, получение карточки. Но тогда и player_join_tournament - лишняя, так как tournament связываетеся с plauers через game и game_events ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 21:14 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Аналогично, таблица team_join_tournament является лишней - ее можно получить сиквельным запросом из таблицы Games. По мелочам: - нет даты игры в таблице Games - желательно привести все названия таблиц к одному виду (ед.ч.) - нет указания на местоположение стадиона (таблица Staduims) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 22:31 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Cat2Одна из двух таблиц game_events или game_join_player - лишняя. Пожалуй - game_join_player. Вход в игру и выход из нее, тоже событие. Такое же как забитие гола, получение карточки. Но тогда и player_join_tournament - лишняя, так как tournament связываетеся с plauers через game и game_events Вы правы насчет того, что game_join_player лишняя. Хотел сначала подчеркнуть, что game_join_player просто состав, но никаких плюсов за счет такого подохода получить не удастся. Может подскажете еще как элегантно решить проблемку с компенсированным временем в первом тайме? А player_join_tournament я создал специально для статистики игроков в турнирах - можно конечно выбирать через 3 таблицы, но мне кажется иметь уже готовый результат в отдельной таблице будет удобнее. Как думаете? freestyleАналогично, таблица team_join_tournament является лишней - ее можно получить сиквельным запросом из таблицы Games. По мелочам: - нет даты игры в таблице Games - желательно привести все названия таблиц к одному виду (ед.ч.) - нет указания на местоположение стадиона (таблица Staduims) Мне кажется что получать список участников турнира из team_join_tournament будет немного кошернее чем из Games, но важнее всего, что эта таблица создана для выборки турнирной таблицы. Хотя пока я не представляю до конца как именно это сделать. Создавать идентификатор "номер тура"? Но ведь текущие таблицы предполагают ситуации, когда команды сыграли разное количество матчей. Добавить время занесения данных или\и количество сыгранных матчей в турнире? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 11:32 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Судей на матче несколько, а не один. по-меньшей мере 3. Также не раскрыта тема тренеров,потому как всяких Адвокатов любят выгонять за беганье к бровке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 17:12 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
А насчет времени - времен может быть несколько, например 2 раза могут назначать доп. время. поэтому надо вводить сущность Тайм с признаком Осн время и Доп время ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 17:15 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Не раскрыта тема нарушений. Может этоEvents? но тогда где их типизация а-ля удаление, карточка и ссылка на игрока. также событием может быть остановка из-за фаеров. событием может быть 2 мяча на поле. Уф, мечта для аналитика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 17:16 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
ShtockСудей на матче несколько, а не один. по-меньшей мере 3. Также не раскрыта тема тренеров,потому как всяких Адвокатов любят выгонять за беганье к бровке. Про судей уже упоминали, но мне кажется это мелочь по сравнению с другими трудностями, о которых я писал. Таки вы правы: нарушения будут лежать в events, табличку с типами событий не рисовал, рассчитываю ограничиться полем типа enum в таблице events. Тренера будут лежать вместе с игроками ;) Считаю, что вводить сущность "тайм" нецелесообразно, т.к. это заметно усложнит структуру. На самом деле для событий есть минута (неважно в каком тайме), а в таблице игр есть поля для для счета в доп время и пенальти. То, что я не гуру я и сам знаю, лучше дайте дельный совет, особенно про то, как строить таблицу чемпионата по турам(про группы ЛЧ я молчу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 18:06 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
meph, А то что на рисунке таблица Games не связана с таблицей Teams это только нарисовано так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 19:01 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Очень много полей надо не хранить, а рассчитывать динамически на основании результатов игр и таблиц событий. Навскидку - points и position для команд, cards, minutes и тд для игроков. Таблицы по турам тоже динамически считать. Просто номер тура в таблицу игр добавь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 19:03 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
score_1 и score_2 также не надо хранить. Достаточно записей в таблице голов (в евентсах? тогда добавляем типизацию, как правильно заметил Shtock). С голов ссылку на игрока, с игрока определяем забившую команду (не забываем про bool Автогол и bool Пенальти). Голы в дополнительное время определяются так же сами собой, если минута >90 (если что, забитые в добавленное время (которое 1-4 минуты) всегда считаются как 45/90). Если в евентсы добавить player_2, то можно туда же замену припахать, а, про это уже написали походу :) На всякий случай - в статистике разделяют вторую желтую, влекущую удаление, и сразу красную, напр. за фол посл. надежды. Это все первые мысли в конце рабочего дня после просмотра схемы :) О многом не написано... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 19:13 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Shtockсобытием может быть 2 мяча на поле. Уф, мечта для аналитика. Ну уж так глубоко не лезут :) Самое глубокое что приходит в голову - количество нарушений (не когда карточка, а любых, влекущих штрафной), угловых и тп. ...кстати, интересно, фиксируют ли причину показа карточек. Имхо, да, в послематчевом протоколе наверняка фигурирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 19:18 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Наверное табличку Year надо бы переименовать в Season... Не знаю как там ваш соккер играется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 19:35 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
А лига у Вас там существует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 19:39 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
To Elias33: думаю, что надо все-таки хранить таймы, потому что автовычисляя не знаешь, что например будет 2 тайма по 15 минут. Вдруг правила поменяются и таймы будут по 87. в любом случае тогда придется формализовать автовычисления, а это посложнее, чем простые селекты. Опять таки, лишние вычисления усложнят запросы. Типизация как написал meph в виде полей а-ля Доп. время опасна, потому как уже упоминалось не решает вопрос "А в каком дополнительном тайме был забит гол" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 22:10 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
В общем player_joint заменяем на events с указанием плеера,а остальное вычисляем.А то получается псевдо-хранилище: и агрегатов много и много от оперативного учета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 22:12 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
mephСоздавать идентификатор "номер тура"? Но ведь текущие таблицы предполагают ситуации, когда команды сыграли разное количество матчей. Ну и что? Мы всегда сможем сделать выборку на тему "матчи из каких туров уже сыграны такой-то командой". А если хранить для каждого матча его фактическую дату (а куда без этого), то все становится совсем хорошо. Shtockдумаю, что надо все-таки хранить таймы, потому что автовычисляя не знаешь, что например будет 2 тайма по 15 минут. Вдруг правила поменяются и таймы будут по 87 Это отдельная тема, которая решаема, так как 1) если поменяется количество минут в тайме, то это будет такое редкое событие, что не грех и базу переделать, и 2) в рамках каждого турнира правила относительно дополнительного времени жестко фиксированы - соответственно мы или знаем, что при ничьей в основное по любому играем еще 15х2, либо знаем, что первый гол, забитый в дополнительное, будет последним. Номер тайма - опять же из минуты. То есть все считается. В принципе, даже послематчевые пенальти по хорошему выносить никуда не надо, если принять определенные обозначения (например, евенты со 121 минуты и дальше по +минуте для каждой команды). А так как незабитый пенальти это тоже евент, который мы храним, то получаем все что надо в одной табличке и без дублирования. Селекты конечно пойдут еще те, но как красиво! :) Но вообще я все это написал зря, так как исходно речь шла о регулярном чемпионате (поправьте, если ошибаюсь), а там дополнительных таймов нет. Выдыхаю... PS Вспомнил, что молодежки иногда играют таймы по 40 минут, ну что ж, длины таймов можно без вопросов хранить отдельными переменными и использовать в селектах как константы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 22:35 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Elias33Но вообще я все это написал зря, так как исходно речь шла о регулярном чемпионате (поправьте, если ошибаюсь), а там дополнительных таймов нет.золотой матч? ;=) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 01:30 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Короче постараюсь высказать идею, которую придумал ночью. Постулат 1: опускаю всё, что касается турниров (ЧМ, ЧЕ, чемпионат локомотива :)), лиг и прочего. и рассматриваю только футбольный матч Постулат 2: база данных имеет oltpp-структуру, чтобы можно было быстро добавлять данные во время матчей, а все агрегаты построенны на материализованных вьюхах. Таблицы: Участники, Игра, События игры, Участники событий Участники(id, фио, id типа участника (тренерский состав, судейский состав, игрок), id вида участника(вратарь, полевой, боковой судья, основной судья, основной тренер, помощник тренера и т.д.)) Игра(id игры, дата игры, id стадиона игры (через него можно вытащить и город и стану), id того, ради чего происходит игра (это вынесенный за рамки моего поста id чемпионата)) События игры: (id события, id игры, время события, id типа события (выход на поле,замена,гол,нарушение), признак завершенности события (нужен для пенальти - забит или не забит. для всех остальных ставится в завершенный)) Участники события(id события,id участника,id типа участника в событии (Основной игрок, игрок, сделавший пас, игрок,которому забили гол, судья, зафиксировавший нарушение, игрок, против которого совершено нарушение,игрок, которым заменили и т.д.)) Для каждого типа события свой набор участников события с той детализацией,которая нужна. Например: 1.для выхода на поле фиксируем только по одному основному игроку, 2.для гола фиксируем основного игрока,игрока от которого пас,игроку,которому забили 3.гол,завершенность события. для нарушения фиксируем основного игрока,судью,зафиксировавшего нарушение Таким образом через События игры можно получать ответы о стартовом составе, о составе в любой момент времени, о действиях судей, заменах, голах, автогололах,пенальтях, голевых передачах, кому кто забил гол и т.д. Причем все это с минимальным кол-вом таблиц и без идиотских признаков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 09:35 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
А время, добавленное к основному времени тайма, где-нибудь учитывается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 10:26 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
типа оно вычисляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 11:15 |
|
||
|
Футбольная статистика
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за советы, но если честно я запутался еще больше. По поводу того, что продолжительность таймов может варьироватся - отметаем такие мысли сразу, не стоит оно того. (От меня правда хотели сделать статистику по ВСЕМ командным видам спорта, но имхо это чересчур, для меня по крайней мере). Конечно зная привередливость пользователей, можно утверждать, что они захотят хранить эвенты в формате времени 45+3. Идея с признаком тайма в таблице эвентов должна помочь, тогда мы сможем группировать по таймам... Ув. Shtock, с эвентами примерно все так и задумывалось как вы написали, только думаю вести статистику действий рефери будет лишним.А завершенность действия тоже лишнее поле: незабитый пенальти - отдельный эвент. Конечно же Years лучше было бы обозвать как Season. Что больше всего меня смущает, так это предложения отказаться от псевдохранилища. Ведь каждый раз считать все значений накладно, хотя и очень красиво с точки зрения проектирования. Мне кажется при генерации турнирной таблицы проще сделать джойн Teams с team_join_tournament и получить основные готовые параметры, чем высчитывать каждый через несколько таблиц (особенно если убрать поля score_1 и score_2 как предлогали). В общем у меня большие сомнения стоит ли отказываться от избыточных таблиц. По поводу отказаться от score_1 и score_2 и считать результат через events, players, team_join_player...игроки ведь переходят из клуба в клуб. Если Савиола перешел из Барсы в Реал в 2007 году и у него сейчас стоит признак, что он действующий игрок Реала, а статистику мы мы смотрим про матч Барса-Реал за 2006 год? Прийдется сверять даты матча и team_join_player...а если в дате трансфера ошиблись на пару дней, то окажется что выиграл Реал, а не Барса...все-таки мне кажется базовая информация должна хранится, а не считаться. И самое неприятное: хотелось бы попробовать объять необъятное, и сделать статистику не только для национальных лиг, но и для турниров (а-ля ЛЧ, кубки). Как это сделать красиво пока не представляю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 11:40 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35650212&tid=1543550]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 196ms |
| total: | 512ms |

| 0 / 0 |
