124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
|
|
1 | |
Нормализация таблицы БД (сложности с вычисляемым столбцом)08.02.2014, 17:08. Показов 4000. Ответов 52
Метки нет (Все метки)
Всем доброго времени суток!
Ребята, посоветуйте пожалуйста, как нормализовать мою БД. Так же не могу разобраться как быть с вычисляемым полем "полетное_вермя" и "Общая_наработка_самолета_в_часах". Тут вопросов несколько: на сколько я понимаю, то вычисляемые поля в таблице лучше не создавать, а размещать их в запросах. С полем "полетное_вермя", я еще соглашусь (так как оно складывается из двух предыдущих полей "взлет" и "посадка"), а вот как быть с полем "Общая_наработка_самолета_в_часах"? Допустим сейчас строка в этом поле содержит значение 55985:05 часов, но после следующего рейса к нему должно приплюсоваться "полетное время". Так где хранить значение 55985:05 часов и где должны происходить вычисления? Еще вопрос, на поле "Общая_наработка_самолета_в_часах" ставлю формат Дата/время, но не могу добиться чтобы получился формат 99999:00 часов. Как быть?
0
|
08.02.2014, 17:08 | |
Ответы с готовыми решениями:
52
Нормализация таблицы до 2НФ Нормализация перекрестной таблицы Нормализация таблицы excel Декомпозиция таблицы животные (нормализация) |
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
|
|
08.02.2014, 17:27 | 2 |
Мои замечания: Если поле Дата – дата взлета; то должно быть поле Дата_посадки (сегодня взлетает и завтра прилетает). Полетное время у вас подсчитано не правильно, т.к. вы сложили поля Взлет и Посадка. Надо вычесть из поля Посадка поле Взлет с учетом дат взлета и посадки. Сейчас постараюсь поправить ваши данные как я это вижу и выложу.
Еще: в схеме данных не корректно установлены связи.
1
|
Модератор
|
|
08.02.2014, 17:55 | 3 |
мое решение
таб1 --ид1 --данные самолета --наработки на момент поступления самолета в контору, причем не в дата/время, а в нормальном числовом значении таб2 --ид2 --ид1 --взлет --посадка --наработка в часах числом(здесь допустима денормализация, чтобы не возится с минутами /секундами сосчитать накопление для некого отчета--не проблема причем бывает неоднократная правка данных(незапланированные посадки, прогрев системы и т.п.)
0
|
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
|
|
08.02.2014, 18:00 [ТС] | 4 |
Буду очень признателен. Заинтересовался акцесом (возможностями базы данных), но на начальном этапе имею очень общие представления о построении. Раньше все таблицы вел в экселе.
0
|
Модератор
|
|
08.02.2014, 18:07 | 5 |
я это поняла
--в екселе легко сделать формулы, накопление --в аксесс-- это сложнее, особенно когда есть суммирование промежуточных данных аксесс--для более формализованных задач некоторые вещи непрограммисту легче склепать в ексель
0
|
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
|
|
08.02.2014, 18:41 [ТС] | 6 |
Если взлет и посадка в формате дата/время, а общая наработка в числовом выражении, как в этом случае прибавлять разницу: взлет-посадка к общей наработке?
0
|
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
|
|
08.02.2014, 19:36 | 7 |
Если по простому (очень муторно), то можно в запросе сделать отдельные поля вычисляющие часы полета и отдельно поле вычисляющее минуты полета. Сложить их нет проблем. В этих полях очень много зависимостей. Рассмотрим вариант:
Вылет Прилет 10:50 12:30 Сами видете, что простыми вычислениями не обойтись. Поэтому я деляю отдельно поля (по другому не умею): Часы_полета Мин_полета 1 40 А в этих полях стоят зависимости: если минуты больше, то, если минуты меньше, то и т.д. Поля потом без проблем складываются и выкладываются в любом виде. Обычно выкладываю окончательный пример, сейчас запрос доведен не до конца. Главное наверное дать идею, а далее сами. Поможем.
0
|
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
|
|
08.02.2014, 19:40 | 8 |
Все эти сложности, конечно-же, если вы хотите только проставлять время взлета и время посадки. Все остальное по моему должна считать машина. Если наработку будете проставлять вручную, то это не верное решение. Наработка должна вычисляться автоматом.
1
|
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
|
|
08.02.2014, 19:53 [ТС] | 9 |
Да верно в моих эксель таблицах так и происходит, проставляются: дата, лист журнала, регистационный номер самолета, взлет и посадка, все остальное в автомате. Но общая наработка должна быть на каждый рейс, такая же наработка вычисляется на каждый двигатель. На счет разделения часов и минут - не плохая идея, думаю стоит рассмотреть.
0
|
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
|
|
08.02.2014, 20:27 | 10 |
ac1-caesar. Когда получите окончательно часы по рейсу, то далее с ними можно делать все, что угодно.
Не по теме: Именно так я сделал учет отгулов, а там такая каша, как с рейсами, только хуже есть еще увеличивающий коэффициент. И если 45 мин умножить на коэф 2, то должно получиться 1 час 30 минут (у меня в разных полях).
0
|
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
|
|
08.02.2014, 22:59 [ТС] | 11 |
Понял суть идеи разделения часов и минут. Но время полета вычислить можно в запросе и в формате дата/время затем перевернуть в числовое выражение. Разместил поле "общую наработку" на момент поступления в таблице "данные_самолета", как уже подсказали.
Дата вылета и посадки, как мне кажется, здесь не нужна, так как самолет делает рейсы длительностью не больше 5 часов. Но все-таки как при этом складывать в запросах "общую наработку" цепляясь за "общую наработку на момент поступления" из таблицы "данные_самолета" и прибавляя к этому время полета крайнего рейса??? По поводу времени которое перескакивает например: взлет в 23:50 минус посадка в 02:30 получается 21:20. В экселе это решается просто: взлет 23:50 минус посадка 26:30 и все работает. Как это обойти?
0
|
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
|
|
08.02.2014, 23:40 | 12 |
А вот как раз для этого и нужна дата посадки. Делаю пример.
0
|
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
|
|
09.02.2014, 00:09 | 13 |
Примерно сделал, но здесь не все условия (их много). Рассмотрел ваш вариант перелета через 0 часов и некоторые варианты полета не более суток. Постарайтесь поймать мою мысль. Дата посадки нужна. А вдруг полет более двух суток (такое возможно). К тому же надо учесть перелет из 31.01.2014 например в день 01.02.2014 (т.е. влет в новый месяц)
1
|
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
|
|
09.02.2014, 22:10 [ТС] | 14 |
Согласен, спасибо! Но честно скажу с общей наработкой пока мыслей нет. Может завтра будет лучше...
Добавлено через 21 час 44 минуты А как быть с полями "добавление масла в двигатель" с точки зрения нормализации? Нужно ли эти поля выводить в отдельную таблицу?
0
|
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
|
|
09.02.2014, 22:48 | 15 |
Я считаю, что не надо. Вот только вопрос: масло заливается перед полетом или после него. Сейчас получается, что техобслуживание происходит после полета (что в принципе правильно), т.к. мы знаем время вылета и посадки. А значит берем самолет после рейса такого-то и записываем в журнал все те работы, которые были произведены. Считаю, что в отдельную таблицу записывать не надо.
Добавлено через 16 минут ac1-caesar,
0
|
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
|
|
09.02.2014, 22:51 [ТС] | 16 |
Вячеслав, подскажите как сделать чтобы в таблице НАРАБОТКА, поле регистрационный номер самолета был не код из таблицы данные самолета 3,2,1, а реальный номер - RA-292. ... Понимаю что должен быть столбец подстановки, но не получается.
0
|
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
|
|
09.02.2014, 23:07 | 17 |
ac1-caesar, ни как. В таблице в полях подстановки должны быть коды (правило такое, которое оспаривать не надо, хотя можно, но потом по моему будет сложнее). Просматривать данные надо не в таблице, а в запросе. Смотрите запрос Регистрационный_номер.
1
|
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
|
|
09.02.2014, 23:12 [ТС] | 18 |
Я почему спросил, потому что планируется сделать форму ввода данных именно из таблицы НАРАБОТКА. Может у меня не верный ход мыслей???
0
|
2833 / 1375 / 215
Регистрация: 13.05.2011
Сообщений: 4,217
|
|
09.02.2014, 23:21 | 19 |
Ход правильный. Так и надо. В форме в поле со списком Регистрационный_номер_самолета в Окне свойств выберете Число столбцов - 2 (код и рег № самолета), а ширина столбцов соответственно 0 и хватит 3 см.
Между делом сделал уже. Посмотрите. Извеняюсь, но я пошел бай-бай! На остальные вопросы отвечу позже, если кто нибудь не ответит. Спокойной ночи.
1
|
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
|
|
10.02.2014, 14:38 [ТС] | 20 |
В моем случае поля "заправка масла в двигатель" получается - двигатель 1, двигатель 2, но может быть и двигатель 3, двигатель 4 еще и двигатель (вспомогательная силовая установка). Не противоречит ли это правилам нормализации?
Добавлено через 1 минуту Спокойной ночи! Добавлено через 15 часов 10 минут Вячеслав Я, похоже кроме Вас на форуме access никто больше не участвует
0
|
10.02.2014, 14:38 | |
10.02.2014, 14:38 | |
Помогаю со студенческими работами здесь
20
Нормализация значений поля таблицы Нормализация таблицы и составить ER-модель! Функциональные зависимости и нормализация таблицы Материалы Нормализация БД, две связанные таблицы. А что дальше? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |