Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Физическая модель / 25 сообщений из 35, страница 1 из 2
22.01.2014, 20:21
    #38534879
Include.nv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Добрый вечер. Проектирую ДБ «Футбольные клубы».
Получилась такая вот физическая модель. Подскажите, что по вашему мнению не так, что исправить, что добавить?
...
Рейтинг: 0 / 0
22.01.2014, 20:43
    #38534899
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nv,


Для PHONE я бы выбрал CHAR/VARCHAR - там может быть несколько форм записи с пробелами/скобками/тире/кодами стран и регионов.
...
Рейтинг: 0 / 0
22.01.2014, 21:08
    #38534914
Include.nv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
DarkMasterInclude.nv,


Для PHONE я бы выбрал CHAR/VARCHAR - там может быть несколько форм записи с пробелами/скобками/тире/кодами стран и регионов.

Тоже про это думал. Спасибо.
Может есть еще какие-нибудь замечания?
Я вот думал, надо ли разбивать адрес на отдельные поля Страна, Город и т.д. Но думаю, в данной БД в этом нет смысла.
...
Рейтинг: 0 / 0
22.01.2014, 21:25
    #38534922
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nv,

А что, у клуба всегда ровно одна команда? Или в этой задаче это не важно?
...
Рейтинг: 0 / 0
22.01.2014, 21:45
    #38534934
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nv,

у футболистов бывают псевдонимы.
футболисты играют в игре определенные периоды времени либо всю игру.
у тебя этого нет.
голы - где голы, удаления, карточки, штрафные?
...
Рейтинг: 0 / 0
22.01.2014, 22:10
    #38534959
Include.nv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
miksoftInclude.nv,

А что, у клуба всегда ровно одна команда? Или в этой задаче это не важно?

В данной задаче это не важно.

MasterZivInclude.nv,

у футболистов бывают псевдонимы.
футболисты играют в игре определенные периоды времени либо всю игру.
у тебя этого нет.
голы - где голы, удаления, карточки, штрафные?

Статистику не затрагиваем.
...
Рейтинг: 0 / 0
23.01.2014, 10:32
    #38535256
lLocust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nv,

Футболист может переходить из клуба в клуб и, наверное, нужно знать когда он перешел и когда за какой клуб играет....

Еще не понятно как хранится результат игры (поле варчар?) как запросы на победителя и счет строить? (тут можно было бы для оппонентов игр сделать отдельную табличку с game_id с записью на каждого оппонента, признаком что он победил, проиграл, ничья и сколько голов забил)

И что такое табличка Positions? не совсем понятен ее смысл....
...
Рейтинг: 0 / 0
23.01.2014, 10:53
    #38535289
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
И команда всего одна в клубе, и даже статистику мы не берем... детский сад какой-то.

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

Собственный Id в таблице участников игр не нужен - композитного Game + Person будет достаточно.

Если я правильно понял, что позиция - это вратарь/форвард/полузащитник, то может ли этот атрибут меняться со временем, и если да, как вы собираетесь хранить его историю? А может, позиция меняется в зависимости от конкретного матча (в футболе, наверное, вряд ли, а за все остальные виды спорта не уверен) - тогда надо дублировать этот атрибут в GamePlayers.
...
Рейтинг: 0 / 0
23.01.2014, 12:15
    #38535408
rockclimber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nvПроектирую ДБ «Футбольные клубы».
<...>
В данной задаче это не важно.
<...>
Статистику не затрагиваем.Огласите весь список, пожалуйста. Что важно, что не важно. Сейчас при отсутствии конкретных требований вы можете на любые замечания и предложения отвечать "это не важно", и смысла предлагать вам что-то нет.
...
Рейтинг: 0 / 0
23.01.2014, 13:23
    #38535512
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nv,

По самой схеме -- у тебя в некоторых таблицах лишние суррогатные ключи. Например, в играх Id лишний не нужен, достаточно
идов двух комманд и номера тура или даты игры.
...
Рейтинг: 0 / 0
23.01.2014, 13:39
    #38535534
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
MasterZivInclude.nv,

По самой схеме -- у тебя в некоторых таблицах лишние суррогатные ключи. Например, в играх Id лишний не нужен, достаточно
идов двух комманд и номера тура или даты игры.

А можно огласить критерии "лишности" суррогатного ключа? У таблицы Games есть подчиненная таблица - этого, по-Вашему, недостаточно?
...
Рейтинг: 0 / 0
23.01.2014, 14:10
    #38535584
Include.nv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
rockclimberInclude.nvПроектирую ДБ «Футбольные клубы».
<...>
В данной задаче это не важно.
<...>
Статистику не затрагиваем.Огласите весь список, пожалуйста. Что важно, что не важно. Сейчас при отсутствии конкретных требований вы можете на любые замечания и предложения отвечать "это не важно", и смысла предлагать вам что-то нет.

Имелось в виду, что добавить или исправить для ДАННЫХ таблиц.


lLocustЕще не понятно как хранится результат игры (поле варчар?) как запросы на победителя и счет строить? (тут можно было бы для оппонентов игр сделать отдельную табличку с game_id с записью на каждого оппонента, признаком что он победил, проиграл, ничья и сколько голов забил)

Здесь вы правы, не додумал. Но думаю стоит сделать просто поле типа enum('Win', 'Draw', 'Loss'). Тогда мы сможем легко находить нужные результаты.

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


lLocustИ что такое табличка Positions? не совсем понятен ее смысл....


Позиции игроков.
...
Рейтинг: 0 / 0
23.01.2014, 14:14
    #38535588
Include.nv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nvНо думаю стоит сделать просто поле типа enum('Win', 'Draw', 'Loss'). Тогда мы сможем легко находить нужные результаты.

Ну а так же хранить счет игры в другом поле.
...
Рейтинг: 0 / 0
23.01.2014, 15:33
    #38535706
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nvlLocustЕще не понятно как хранится результат игры (поле варчар?) как запросы на победителя и счет строить? (тут можно было бы для оппонентов игр сделать отдельную табличку с game_id с записью на каждого оппонента, признаком что он победил, проиграл, ничья и сколько голов забил)

Здесь вы правы, не додумал. Но думаю стоит сделать просто поле типа enum('Win', 'Draw', 'Loss'). Тогда мы сможем легко находить нужные результаты.Нужно сделать 2 поля, количество голов с каждой стороны.
И (или) в таблице GamePlayers хорошо бы писать, сколько голов забил игрок.
...
Рейтинг: 0 / 0
23.01.2014, 16:17
    #38535752
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
alexeyvgИ (или) в таблице GamePlayers хорошо бы писать, сколько голов забил игрок.
И в чьи ворота :)...
...
Рейтинг: 0 / 0
23.01.2014, 16:18
    #38535756
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nv
lLocustИ что такое табличка Positions? не совсем понятен ее смысл....


Позиции игроков.
Позиции игроков в кманде - могут меняться.
Самое главное - позиции в мачте могут отличаться от позиций в команде, и их может быть несколько :).
И самое-самое главное - зачем вообще нужны позиции :)
...
Рейтинг: 0 / 0
23.01.2014, 16:20
    #38535757
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Include.nvЗдесь вы правы, не додумал. Но думаю стоит сделать просто поле типа enum('Win', 'Draw', 'Loss'). Тогда мы сможем легко находить нужные результаты.

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

('Winner - 1', 'Winner - 2', 'Draw')
...
Рейтинг: 0 / 0
23.01.2014, 16:30
    #38535770
lLocust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
alexeyvgInclude.nvпропущено...

Здесь вы правы, не додумал. Но думаю стоит сделать просто поле типа enum('Win', 'Draw', 'Loss'). Тогда мы сможем легко находить нужные результаты.Нужно сделать 2 поля, количество голов с каждой стороны.
И (или) в таблице GamePlayers хорошо бы писать, сколько голов забил игрок.

Как я понимаю статистика по игрокам не важна )))

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

Код: plsql
1.
select * from games where club_id = :pClub_id or opponent_club_id = :pClub_id


еще ничего (кроме того что index range scan летит нахрен и лучшее что можно добиться это index full scan), а если нужно знать когда она выиграла?

Код: plsql
1.
select * from games where (club_id = :pClub_id and enum='Win') or (opponent_club_id = :pClub_id and enum<>'Win')


Уже геморройнее.

А если нужно узнать соотношение забитых/пропущенных голов? (даже писать не хочется....)
...
Рейтинг: 0 / 0
23.01.2014, 16:48
    #38535786
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
lLocust,

Делается вьюшка с UNION, разворачивающая матчи относительно второй стороны
...
Рейтинг: 0 / 0
23.01.2014, 17:15
    #38535836
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
АнатоЛойalexeyvgИ (или) в таблице GamePlayers хорошо бы писать, сколько голов забил игрок.
И в чьи ворота :)...Кстати да, это важно :-)

Я вообще хотел написать, что нужно в GamePlayers писать, за какую команду играл игрок. Но допустим, игроки не могут переходить из команды в команду.
И даже в этом случае нужно писать, в какие ворота гол, потому что есть автоголы :-)
...
Рейтинг: 0 / 0
23.01.2014, 18:01
    #38535909
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Встречное предложение. На схеме ключевые атрибуты, опущены почти все названия и прочие атрибуты, не влияющие на связывание таблиц.
...
Рейтинг: 0 / 0
23.01.2014, 18:19
    #38535928
lLocust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Кот Матроскин,
Приседания вокруг изначально неправильно спроектированной базы......

АнатоЛой,
А вот так мне нравится, даже придираться не хочется )
...
Рейтинг: 0 / 0
23.01.2014, 18:28
    #38535935
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Кот МатроскинMasterZivInclude.nv,

По самой схеме -- у тебя в некоторых таблицах лишние суррогатные ключи. Например, в играх Id лишний не нужен, достаточно
идов двух комманд и номера тура или даты игры.

А можно огласить критерии "лишности" суррогатного ключа? У таблицы Games есть подчиненная таблица - этого, по-Вашему, недостаточно?

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

я должен был оговориться, что, конечно, это не является грубой ошибкой, скорее, дело вкуса.
Но "не умножай" должно тоже действовать.
...
Рейтинг: 0 / 0
23.01.2014, 18:40
    #38535962
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
MasterZivКот Матроскинпропущено...


А можно огласить критерии "лишности" суррогатного ключа? У таблицы Games есть подчиненная таблица - этого, по-Вашему, недостаточно?

Критерий простой -- можно и без него.

По этому критерию он "лишний" в 99% таблиц - там ведь найдется естественный ключ, который в принципе можно сделать первичным. Выкиньте ID из Clubs - там ключом можно сделать название (или название + город, или названия + город + страна - в данном случае неважно)
Суррогат делается не из логической необходимости (иначе он не суррогат, по определению), а для технического удобства.
...
Рейтинг: 0 / 0
23.01.2014, 21:49
    #38536105
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Физическая модель
Кот МатроскинMasterZivпропущено...


Критерий простой -- можно и без него.

По этому критерию он "лишний" в 99% таблиц - там ведь найдется естественный ключ, который в принципе можно сделать первичным. Выкиньте ID из Clubs - там ключом можно сделать название (или название + город, или названия + город + страна - в данном случае неважно)
Суррогат делается не из логической необходимости (иначе он не суррогат, по определению), а для технического удобства.

При отрисовке "логических схем" (термин из PowerDesigner) поля внешних ключей отсутствуют - использовать суррогаты ни к чему.
Но:
1) часто в команде встречаются аналитики/разработчики, которые "мыслят" только "физической схемой" - они привыкли видеть все поля реальной таблицы из БД :(;
2) при работе с физической схемой составные первичные ключи из нескольких полей только усложняют (увеличивают количество) полей (и отображаемой информации);
3) бывает, что в процессе разработки (дай Бог), а то уже и эксплуатации (sick!), естественный ключ оказывается не совсем первичным; при правильном подходе не самая большая проблема, но таки кропотливая работа по изменениям.

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

Да и как показала практика - особых хлопот в реализации суррогатные ключи не доставляют...
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Физическая модель / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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