Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71

справочная таблица

25.10.2011, 13:16. Показов 1837. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Подскажите как лучше быть в такой ситуации. Имеются справочная таблица с сотрудниками и основная, типа журнала. В журнале хранится инфа и сотрудники определяются по их id из справочной таблицы. Как быть в такой ситуации, когда сотруднику необходимо будет, например, сменить фамилию или отдел, но в журнале изменений не должно происходить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2011, 13:16
Ответы с готовыми решениями:

справочная система
Подскажите пожалуйста как создать справочную систему для приложения?

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

Информационно справочная система
Помогите написать Информационно справочную систему про котов Добавлено через 1 минуту вот база <body> <TABLE...

15
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
25.10.2011, 13:26
Ну так если Id сотрудника не изменится, с какой стати будет изменение в журнале?
А для сохранения истории (скажем, изменение атрибутов сотрудника, например, фамилии) обычно заводится отдельная историческая таблица, куда при изменении атрибутов заносится предыдущая версия записи (например, с пом. триггера).

PS
Вопрос по общей теории БД (или проектированию БД) и к Delphi никакого отношения не имеет
0
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71
25.10.2011, 13:59  [ТС]
я имею ввиду фамилия сотрудника в журнале не должна меняться (при смене фамилии в справочнике).
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
25.10.2011, 15:05
Цитата Сообщение от Evgueny
я имею ввиду фамилия сотрудника в журнале не должна меняться (при смене фамилии в справочнике).
Так...
Тогда я не понял, что такое журнал, и зачем там дублируется фамилия, которая уже есть в справочнике
0
Тимуровец
 Аватар для Страдалецъ
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
25.10.2011, 15:29
Если не ошибаюсь, автор уже подымал тему по структуре БД. И опять-же, если я не ошибаюсь, то там уже говорилось, что приведенную автором структуру надо переделывать т.к. она нерабочая.
0
 Аватар для SantjaGo
1 / 1 / 1
Регистрация: 15.10.2009
Сообщений: 105
25.10.2011, 15:38
https://www.cyberforum.ru/delp... 72009.html
может помочь кто-нибуть по этой теме?
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
25.10.2011, 15:45
Кому нужна старая фамилия ?

Добавлено через 1 минуту
Отдел, кстати, тут вообще никаким боком не стоит ибо принадлжность сотрудника к подразделению должна храниться вовсе не в справочнике сотрудников, а в штатном расписании к примеру
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
25.10.2011, 15:53
Цитата Сообщение от MsGuns Посмотреть сообщение
Кому нужна старая фамилия ?
Иногда нужна! Напрмер, если это фамилия судьи и дело рассмотривала судья Пертова, то при смене фамилии на Тяпкина-Ляпкина в информации о деле должна быть старая фамилия.
0
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71
25.10.2011, 16:04  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Так...
Тогда я не понял, что такое журнал, и зачем там дублируется фамилия, которая уже есть в справочнике
Не дублируется. Вот журнал:

id | id_sotr | data | info
------------------------------
1 | 18 |28.09.2011 | AABBBB
2 | 9 |14.10.2011 | CCaaaaa
3 | 4 |16.10.2011 | FFFFggg
5 | 29 |22.10.2011 | DDDDSS

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

Цитата Сообщение от Страдалецъ Посмотреть сообщение
Если не ошибаюсь, автор уже подымал тему по структуре БД. И опять-же, если я не ошибаюсь, то там уже говорилось, что приведенную автором структуру надо переделывать т.к. она нерабочая.
Нет. Это было давно и уже неправда.

Цитата Сообщение от MsGuns Посмотреть сообщение
Кому нужна старая фамилия ?

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

Цитата Сообщение от SAMZ Посмотреть сообщение
Иногда нужна! Напрмер, если это фамилия судьи и дело рассмотривала судья Пертова, то при смене фамилии на Тяпкина-Ляпкина в информации о деле должна быть старая фамилия.
да да, именно так.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
25.10.2011, 16:16
Вот в деле пусть и хранится, а причем тут справочник текущих фамилий ?
1
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
25.10.2011, 16:42
Цитата Сообщение от Evgueny
Не дублируется. Вот журнал:

id | id_sotr | data | info
------------------------------
1 | 18 |28.09.2011 | AABBBB
2 | 9 |14.10.2011 | CCaaaaa
3 | 4 |16.10.2011 | FFFFggg
5 | 29 |22.10.2011 | DDDDSS

Запросом в грид выводится не id сотрудника, а его фамилия. Когда она в справочнике изменится, то изменится и когда будем просматривать журнал. А мне этого не нужно. Или например если его вообще удалить из справочника, то журнал осиротеет. Ну про удаление ладно, запретим. А с изменением что делать? Или лучше не id, а сразу name сотрудника в журнал кидать? Как вообще в таких ситуациях поступают?
Я уже сказал. Есть историческая таблица, где указано bdate, edate, Fio. Хранить ли там и текущую ФИО - можно по разному, как удобнее. При выборке ты указываешь не только ссылку на Id, но и дату, за которую делается выборка. Соответственно, за любую дату ты можешь выбрать ту ФИО, которая была актуальна на тот момент. Если тебе трудно это соорудить в одном SQL, можно написать функцию для выборки ФИО на указанную дату.
А удаление - однозначно запретить, иначе получишь так называемые висящие ссылки
1
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71
25.10.2011, 23:05  [ТС]
т.е. мне нужно создать доп. таблицу, в которую будут записываться значения из справочника, после события редактирования так? А из какой тогда таблицы делать выборку для журнала?
Как же всё-таки оптимальнее будет, записывать в журнал сразу фамилию или же id, но с созданием таблицы истории?
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
26.10.2011, 11:51
Цитата Сообщение от MsGuns Посмотреть сообщение
Вот в деле пусть и хранится
Тут тоже может быть много вариантов решений. Можно хранить историю смен фамилий с датами изменений. Можно в таблице дела вместе с кодом судьи хранить актуальную на момент рассмотрения дела фамилию. То есть, проблема (если это можно назвать проблемой) решается тривиально. Разработчику просто - напросто нужно слегка наморщить мозг и остановиться на определенном варианте.
1
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71
26.10.2011, 12:28  [ТС]
Цитата Сообщение от SAMZ Посмотреть сообщение
Тут тоже может быть много вариантов решений. Можно хранить историю смен фамилий с датами изменений. Можно в таблице дела вместе с кодом судьи хранить актуальную на момент рассмотрения дела фамилию. То есть, проблема (если это можно назвать проблемой) решается тривиально. Разработчику просто - напросто нужно слегка наморщить мозг и остановиться на определенном варианте.
Просто я никак не мог решиться, как лучше сделать, чтоб потом не пришлось многое переделывать. Да и чтоб сейчас не нужно было сильно переделывать. А сколько примеров пересматривал, на подобное не натыкался. Думаю, ну как же поступают в таких случаях? Не хочется грабли собирать.

Спасибо большое всем за советы.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
26.10.2011, 15:09
Не зная предметной области и не имея понятия о Вашей модели БД, никто Вам тут ничего конкретного не подскажет, а вот просто совет дат смогут и уже давали. Я просто добавлю из собственного опыта.
В предметных областях существует несколько способов идентификации людей:
- по некоторому реально существующему внутреннему номеру (Например, табельному номеру),
- по суррогатному номеру (уник.идентификатору)
- по некоторому реально существующему внешнему номеру (Например, инд.налоговому номеру ИНН),
- по совокупности реальных сущностных реквизитов: Фимилия, Имя, Отчество, год рождения, место рождения и т.д.
Ни один из перечисленных способов не является абсолютно лучшим, каждый имеет недостатки и достоинства. Выбор поэтому зависит от конкретной предметной области.

Если решаемая задача из области "глобальных", т.е. нет и не может быть единого хранилища всех данных, т.е. данные собираются по мере надобности с разных мест (сетей, баз данных, ПК и т.д.) для получения некоторой сводной аналитичесчкой информации (по типу OLAP например), то конечно, лучше для идентификации следует выбирать реально существующий внешний номер.
Если данные в одном месте и их целостность обеспечивается аппаратно-программными средствами (например СУБД), то часто подходит один из "внутренних" вариантов.

Это "человеческий" аспект.

Далее. В любой уважающей себя БД есть средства отслеживания изменений в БД, как в части метаданных, так и в части информации. Чаще всего скл-сервера используют для этого технологию журнального типа, куда автоматически заносят ЛЮБЫЕ изменения, вносимые в БД. А если таких средств нет (например в интербэйзе, ЕМНИП), то проектировщик "базовик" может таки заставить сервер выполнять подобную работу, создав "ручками" соотв. таблицы-журналы и задействовав триггеры или другие подручные тулзы.
В принципе можно, имея такие журналы, вытащить на свет божий все изменения в любых таблицах и обработав их таким оразом, чтобы предоставить пользователю некоторый доп.сервис, приложив, конечно некоторые усилия (иногда неимоверные, например в мсскл)
А можно самому спроектировать собственную схему журналирования, куда более экоиномную, прозрачную и "годную к употреблению" нежели "лог" скл сервера. Но это, естественно, приведет к "накладным" (т.е. непосредственно не относящимся собственно к решениею поставленной задачи и, след-но, не финансируемым) расходам мозгов и рук, зачастую весьма немалым.

И, наконец, последний аспект - резервные копии. Все нормальные базы данных периодически сохраняются в архивах (бэкапах), а также очищаются от устаревшей информации (переодичность "чисток" определяется требованиям в временнОму диапазону актуальности данных и может варьировать от суток (системы видеонаблюдения, тест-регулировочные программы), до нескольких лет (системы управления предприятием, логистика, торговля..) и даже десятилетий (архивное дело). Имея архивы можно поиметь (написать, заказать профи) и систему поиска в архивах нужной информации. Либо же просто методом последовательного восстановления (Restore) и просмотра старых данных с поиском интересующий инф-ции.

Резюмируя все вышенаписанное, делайте выводы и определяйте способ решения - хранение изменений как сущностей реальных объектов, журналирование либо работа с архивами БД.
Либо их комбинацию
1
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71
26.10.2011, 15:42  [ТС]
спасибо. Очень полезная инфа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2011, 15:42
Помогаю со студенческими работами здесь

Файл Справочная Аэропорта
Добрый вечер это звучит забавно, но суть такова у меня есть условие: В справочной аэропорта хранится расписание вылета самолетов на...

Справочная система учёных. Курсовая
Нужно сделать программу Справочная система с БД Access. Чтобы были разделы в которых будут учёные и дальше данные о них. Так же поиск...

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

Справочная информационная система
Справочная информационная система Вузы нужно создать ее так что можно было выбрат город а потом чтоб программа выдала какие вузы в...

ПодТаблицы с данными(Таблица-Таблица-Таблица-Таблица) и наследованием
Имеется такая база с таблицами Район-МО-Цель-Зачача. Несколько вариантов связей передумал уже, но не понимаю как сделать, чтоб данные не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru