Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помощь в проектировании БД  (Прочитано 18651 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sd
Постоялец

by
Offline Offline

« : 22-04-2016 12:07 » 

Приветсвую.
Требуется помощь в разарботке модели БД почти с нуля.
Требования, предъявляемые к БД:
- Соответствие структуры базы данных требованиям третьей нормальной формы;
- целостность и непротиворечивость базы данных;
БД представляет собой учет транспортных средств на предприятии. Основная цель разработки БД, использовании ее потом в приложении на С++. Цель приложения - это мониторинг срока окончания дейтсвия ТО на ТС; страхового полиса; количества ДТП за определенный период по вине водителей, работающих на предприятии; срока действия мед. справки водителя; даты выхода водиетлей на пенсию.
Я прочитал различный материл в интернете и на основе прочитанного получилось вот что:
Сущности: водители, авто, документы, события.
Аттрибуты: водители (ФИО, дата рождения, стаж)
                  авто (номер, марка, модель, год выпуска, цевт)
                  документы (название документы, срок действия)
                  события (тип события, дата события, комментарии, затраты)
Дальше идут связи:
1) ВОДИТЕЛИ - ИМЕЮТ - ДОКУМЕНТЫ
Поскольку один водитель может иметь только одну медсправку, то связь 1:1
2) АВТО - ИМЕЕТ - ДОКУМЕНТЫ
Поскольку на одну машину приходится два документа (страховка, сретификат ТО), то связь 1:2
3) АВТО - ПРОИСХОДИТ - СОБЫТИЕ
Поскольку с одним авто может произойти множество событий, то связь 1:N
До этого не приходилось сталкиваться с проектированием БД, поэтому знаний в этой области мало и, как результат, составленная модель может оказаться очень некорректной.
Прокоментируйте, пожалуйста, модель которую я составил, укажите на недостатки и объясните как надо и почему.
Спасибо.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 22-04-2016 12:13 » 

Событие (дата, тип события)
 имеет (возможно): водитель, авто

Для поиска события от авто или от водителя нужны соотв. индексы.
« Последнее редактирование: 22-04-2016 12:15 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 22-04-2016 12:38 » 

3) АВТО - ПРОИСХОДИТ - СОБЫТИЕ
Поскольку с одним авто может произойти множество событий, то связь 1:N

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

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Qulac
Постоялец

ru
Offline Offline

« Ответ #3 : 22-04-2016 13:42 » 

Вероятно, так как это зависит от оконечных требований, то может быть так.

Водитель может иметь несколько мед. справок с разным сроком начала и окончания действия, т.е медсправка - это сущность, отношение водитель - медсправка 1 ко многим.

Аналогично для документов авто и их отношений.
В принципе это все усложняет, но зато ближе к реальности.
Записан
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 22-04-2016 19:15 » new

Я бы всё таки сперва разобрался: какие у кого могут быть документы. Вот, например, у автомобиля единственный уникальный номер это VIN, государственный номерной знак может изменяться. Удобнее было бы записывать события, например, событие: регистрация в базе автомобиля: дата введения на учёт в БД, договор купли, птс, свидетельство о регистрации, распоряжение руководства об вводе в эксплуатацию... В любом случае лучше сразу уяснить некоторые организационные моменты на бумаге, согласовать их с руководством, потом подумать, как это оформить в БД. То есть, полный список исходных, и конечная цель в пунктах. Да, и ещё нюанс - километраж - влияет на техобслуживание, как вести его учёт - сменные вводы с одометра по факту?
Записан
SCRIBE
Гость
« Ответ #5 : 26-04-2016 12:24 » 

Нигде не увидел уникальных идентификаторов...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 26-04-2016 13:48 » 

Не надо искать связей, когда их еще нет Улыбаюсь
Например
Документы - могут иметь признак ЧЕЛОВЕК/АВТО А сколько документов  не имеет значения, хоть 10, это не только  справка, но и.. трудовая, копии прав, и тд.
Также и документами на авто..

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

Человек - это не просто водитель, а также может быть и механик/слесарь
Т.е. соответственно - таблица специальности.

И т.д.


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Qulac
Постоялец

ru
Offline Offline

« Ответ #7 : 26-04-2016 17:58 » 

Sla, слишком усложнено. К тому же дублируется информация, один раз в атрибуте человек/авто другой раз в самом отношении сущностей. Если документ уже имеет отношение к авто, то зачем ему еще атрибут?  А черт его знает...
 Если так делать, то уж лучше имитация наследования документов, базовая таблица для всех документов и дочернии для конкретных документов.  Улыбаюсь Но это все лишняя сложность.  Улыбаюсь
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 26-04-2016 19:43 » 

Sla, слишком усложнено. К тому же дублируется информация, один раз в атрибуте человек/авто другой раз в самом отношении сущностей. Если документ уже имеет отношение к авто, то зачем ему еще атрибут?  А черт его знает...
 Если так делать, то уж лучше имитация наследования документов, базовая таблица для всех документов и дочернии для конкретных документов.  Улыбаюсь Но это все лишняя сложность.  Улыбаюсь

Человек
id_people Василий Пупкин
Авто
id_auto Газ 66

Документ
id_doc1 id_people название человек
id_doc2 id_people название2 человек
id_doc3 id_auto название авто
id_doc4 id_auto название2 авто

Что здесь избыточное?

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Qulac
Постоялец

ru
Offline Offline

« Ответ #9 : 26-04-2016 20:23 » 

Что такое в таблице человек и авто? Это не 3-я нормальная форма.  Улыбаюсь
« Последнее редактирование: 26-04-2016 20:29 от Qulac » Записан
SCRIBE
Гость
« Ответ #10 : 27-04-2016 07:10 » 

Человек (таблица slave)
id, s_type, s_firstname, s_secondname
Тип человека (таблица slave_type)
id, st_desc

Авто (таблица auto)
id, a_type, a_number, a_name, a_color, a_datecreate
Типы авто (auto_type)
id, at_desc

Документ (document)
id, d_type, d_name, owner_id (в зависимости от типа, ссылается на машину или человека)
Типы документов (document_type)
id, dt_desc

Событие (event)
id, e_type, e_desc, e_datebegin, a_id (id машины), s_id (id человека)
Тип события (event_type)
id, et_desc

Что-то типа)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines