#abap #database-table
#abap #таблица базы данных
Вопрос:
У меня есть 2 таблицы, т.е. Сведения о сотрудниках и история назначений сотрудников.
Employee details table - EMPID , Name , Age ,Gender. (EmpID - Primary Key)
Designation history table - EMPID , Startdate , Enddate , JobRole.
Я знаю, что в таблице истории назначений должен быть еще один ключ, чтобы добавить несколько записей для данного идентификатора сотрудника, который я должен использовать?
Чтобы я мог получить такой результат — Сумед был ассоциированным разработчиком SAP с 2021 по 2022 год, затем с 2022 по 2024 год он был старшим. Затем разработчика снова понизили до ассоциированного разработчика sap в 2024-25.
Комментарии:
1. Пожалуйста, предложите код, который вы пробовали, расскажите нам точно, какая у вас проблема. Переполнение стека не принимает вопросы с просьбой о рекомендациях.
2. извините за это, я действительно хотел получить рекомендации.
Ответ №1:
Я предполагаю, что вы просто опустили это MANDT
поле для краткости. Он должен быть первым из первичного ключа каждой таблицы, если вы хотите, чтобы ваша таблица была указана клиентом. Что следует дальше? Ну, есть несколько вариантов:
Вариант 1: используйте EMPID
и Startdate
в качестве первичного ключа. Вы видите, что многое используется в старых схемах баз данных SAP, таких как table ADRP
, например. Это, конечно, предполагает, что никто не будет переназначен более одного раза в день.
Вариант 2: добавьте еще один столбец, в котором подсчитываются назначения для этого сотрудника. Тогда первичным ключом будет EMPID
and ASSIGNMENT_NUM
.
Вариант 3: сделайте это так, как это делает BOPF. Вместо того, чтобы задаваться вопросом, каким должен быть первичный ключ, предоставьте каждой таблице одно поле первичного ключа DB_KEY
, которое является UUID, генерируемым в момент создания записи в базе данных (вы можете использовать класс cl_system_uuid
для их генерации). Тогда никогда больше не беспокойтесь о первичных ключах.
Какой из них является «лучшим» вариантом? Извините, но это скорее религиозный вопрос.
Комментарии:
1. Я думал о том, чтобы также использовать Startdate в качестве первичного ключа, но, кажется, я где-то читал, что не стоит делать даты в качестве первичного ключа? это правда?
2. @sumedhpatil В архитектуре программного обеспечения нет абсолютных истин. У каждого дизайна есть преимущества или недостатки, которые могут иметь или не иметь значения для вашего конкретного варианта использования.
3. Тогда я буду использовать startdate в качестве первичного ключа. Большое вам спасибо.