Таблица сотрудников (таблица основных и подробных данных)

Мне интересно, хорошо ли иметь мастер и таблицу подробностей для сотрудников?

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

Если изменится код сотрудника или код страны, изменения будут внесены в подробную таблицу, а для старой записи будет установлено значение IS_ACTIVE = 'T'.

——————— Мастер-таблица ————————— ———–

**EMPLOYEE_CODE** VARCHAR2(20 BYTE) NOT NULL, EMAIL VARCHAR2(100 BYTE) FIRST_NAME VARCHAR2(50 BYTE) LAST_NAME VARCHAR2(50 BYTE) WORKING_HOURS NUMBER 

——————— Детальный стол ————————— ———–

 **PK_USER_DETAIL_ID** NUMBER, FK_EMPLOYEE_CODE VARCHAR2(20 BYTE), FK_GROUP NUMBER, FK_DEPARTMENT_CODE NUMBER, FK_EMPLOYER_COUNTRY_CODE VARCHAR2(5 BYTE), FK_MANAGER_ID VARCHAR2(20 BYTE), FK_ROLE_CODE VARCHAR2(6 BYTE), START_DATE DATE, END_DATE DATE, IS_ACTIVE VARCHAR2(1 BYTE), INACTIVE_DATE DATE 

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

ВАРИАНТ: I

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

-> Таким образом, мне не нужно искать таблицу сотрудников.

ВАРИАНТ: II

  • Имейте мастер и таблицу подробностей.
  • Добавьте код страны и отдела в таблицу расписаний.

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

ВАРИАНТ: НОВЫЙ

  • Имейте мастер и таблицу подробностей.
  • Таблица расписаний будет иметь EmpCode.
  • Если пользователь переместится в новое место или изменит отдел, то вставьте новую строку в таблицу подробностей с новым кодом отдела и тем же номером ЭМП.
  • Обновите старую строку и установите поле «Дата окончания», поэтому, если он изменит свое местоположение или отдел, тогда необходимо обновить поле «Дата окончания».

Какой из них является лучшим вариантом и есть ли другой лучший вариант?

Вариант 3 – Обратите внимание, что этот параметр полезен только для отчетов Point of View.

  1. Всякий раз, когда вы вставляете данные, создайте запись « De-Normalized в новой таблице.
  2. Всякий раз, когда запись будет обновлена, запись « De-Normalized будет обновляться в новой таблице.
  3. В новой таблице будут все столбцы De-Normalized Employee.
  4. Поэтому, выполняя поиск, это принесет пользу, поскольку результаты будут вычислены без использования Joins . Таким образом, время доступа будет уменьшено.
  5. Записи в новой таблице будут созданы / обновлены в триггере «Вставка / обновление».

Улучшения в Варианте – 2 и Вариант 1

Не создавайте избыточность, добавляя повторяющиеся столбцы.

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

Это важно, потому что большую часть времени вам понадобятся только текущие детали, причем запросы по истории являются относительно редким случаем. Следовательно, вы затрудняете реализацию своего наиболее распространенного варианта использования, чтобы упростить реализацию менее используемого. (Конечно, я делаю предположения о ваших бизнес-требованиях, и, возможно, ваш – не приложение для сотрудников)

Лучшим решением будет иметь две таблицы: таблицу EMPLOYEES со всеми подробными столбцами и таблицу EMPLOYEES_HISTORY с теми же столбцами плюс дата начала и окончания. Когда вы меняете запись сотрудника, вставьте копию старой записи в таблицу «История», возможно, с помощью триггера. У ваших стандартных процессов есть только одна таблица для запроса, и ваши потребности в истории удовлетворяются полностью.


Кстати, ваша модель данных неверна. Working_hours, email_address и last_name – это, безусловно, вещи, которые могут измениться и, возможно, даже имя (например, путем изменения личных обстоятельств, таких как женитьба). Поэтому все эти столбцы должны храниться в имени вашей информации

  • Префикс таблицы базы данных MS SQL от предыдущего владельца
  • Правильная схема таблиц
  • Interesting Posts

    Запрос с столбцом резервных слов, который использовался для работы в SQL Server 2008, больше не работает с SQL Server 2012

    Найдите латентный и длинный с радиусом 2 мили от заданного лат-длинного

    Как поместить список с разделителями-запятыми в список выбора инструкции insert @Tablevariable

    Выполните один и тот же запрос дважды, но с одним разным предложением WHERE

    Что происходит с уровнем изоляции в хранилище Proc, который не работает

    Удалить дубликаты данных в SQL, сохраняя самую старую запись

    сравнить 2 столбца из 2 разных таблиц и обновить столбец

    RODBC вытягивает float как символ в SQL Server

    C # SQL-инъекция

    Ускорение удалений, имеющих соединения

    Есть ли простой способ предоставить параметры для пакета SSIS?

    Если значение содержит эти буквы, тогда

    Создайте случайное 10-значное число как часть идентификатора и не получите дубликатов

    проблема синхронизации с SCOPE_IDENTITY ()

    Сценарий T-SQL не зависит от времени выполнения. Зачем?

    Давайте будем гением компьютера.