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


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


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

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

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

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

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

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

MasterZivInclude.nv,

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


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

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

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


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

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

('Winner - 1', 'Winner - 2', 'Draw')
...
Рейтинг: 0 / 0
Физическая модель
    #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
Физическая модель
    #38535786
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lLocust,

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

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

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

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

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

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

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


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

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

По этому критерию он "лишний" в 99% таблиц - там ведь найдется естественный ключ, который в принципе можно сделать первичным. Выкиньте ID из Clubs - там ключом можно сделать название (или название + город, или названия + город + страна - в данном случае неважно)
Суррогат делается не из логической необходимости (иначе он не суррогат, по определению), а для технического удобства.
...
Рейтинг: 0 / 0
Физическая модель
    #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]