Основываясь на обновленном сообщении и делая некоторые (довольно очевидные) предположения, основанные на используемых именах, я придумываю следующее.Существует четыре объекта:
- Отделы
- Отделы
- Функции
- Объекты
Существует много взаимосвязей междуэти лица.Немногие из них являются иерархическими, большинство представляют собой простые ассоциации:
- Опция A1: существует основной список функций.Каждый отдел может выполнять (или выполнять) одну или несколько функций, и эту функцию может выполнять не только отдел.
Опция A2: Функции «принадлежат» департаментам.Никакая функция не может выполняться двумя или более отделами.(Похоже, что это так, поскольку в отделе кадров есть отдел расчета и найма, а в отделе финансов - аудит, налоги и счета.)
Функции выполняются отделами для (вкл.от имени) подразделения.(Отдел кадров занимается расчетами заработной платы и наймом для текстильных и маркетинговых подразделений; отдел финансов занимается аудитом и налогами - но не для счетов - для текстильного отдела, а для аудита и счетов - но не для налогов - для отдела маркетинга.) Возможно, немногоболее точно, отделы выполняют выбранные функции для выбранных подразделений, с которыми они связаны, и эта связь определяется их выполнением этой функции.
Помимо выполнения функций, появляетсяне будет никаких отношений между отделами и отделами.Между ними нет иерархических отношений, так как одно не «владеет» или не содержит другого.
Это приводит к следующим примерным таблицам:
-- Division -----
DivisionId (primary key)
-- Department ---
DepartmentId (primary key)
-- Function ----- (assumes option A2)
FunctionId (primary key)
DepartmentId (foreign key, references Department)
-- DivisionFunctions ----
DivisionId (First column of compound primary key)
FunctionId (Second column of compound primary key)
(При желании можно добавить суррогатный ключ для уникальной идентификации каждой строки, но DivisionId + FunctionId будет работать.)
Здесь недостаточно материала, чтобы полностью описать, как "сотрудники" вписываются вмодель.Учитывая, что сотрудники выполняют работу функций: может ли сотрудник выполнять работу более чем одной функции или они выполняют только одну функцию?Выполняет ли сотрудник работу функции независимо от подразделения, для которого он выполняется, или ему поручено выполнять работу для одного или нескольких подразделений?Здесь есть два очевидных варианта, хотя возможны и более сложные варианты:
- Вариант B1: сотрудники выполняют работу по одной или нескольким функциям в отделах и выполняют эту работу для всех подразделений, которым требуется эта функция этого отдела.
- Опция B2: сотрудникам назначается выполнять определенную функцию для определенного подразделения.
С учетом этого таблицы могут выглядеть следующим образом:
-- Employee ----- (assumes option B1)
EmployeeId (primary key)
DepartmentId (foreign key, references Department)
-- EmployeeFunction ----- (assumes option B1)
EmployeeId (First column of compound primary key)
FunctionId (Second column of compound primary key)
... и, следовательно, все сотрудники, которые могут выполнять функцию, будут выполнять ее для всех подразделений, которым она требуется.Или
-- Employee ----- (assumes option B2)
EmployeeId (primary key)
DepartmentId (foreign key, references Department)
-- EmployeeAssignment ----- (assumes option B2)
EmployeeId (foreign key, references Employee)
DivisionId (first of two-column foreign key referencing DivisionFunctions)
FunctionId (second of two-column foreign key referencing DivisionFunctions)
(Или вместо DivisionId и FunctionId включите необязательный суррогатный ключ из DivisionFunctions.) ... и, таким образом, сотрудники назначаются индивидуально для функций, выполняемых отделом для подразделения.
Но это все еще оставляет много вопросов «что если / когда»: сотрудники «принадлежат» к департаментам?Могут ли сотрудники принадлежать (работать) к нескольким отделам?Возможно, сотрудники относятся к подразделениям?Отслеживаете ли вы, какие функции может выполнять сотрудник, даже если он в настоящее время не выполняет его?Точно так же вы отслеживаете, в каком отделе работает сотрудник, даже если он в настоящее время находится «между функциями»?Если сотрудник может выполнять функции A и B, а подразделению требуются обе эти функции, может ли сотрудник назначаться для выполнения только A, а не B для этого подразделения?
Здесь необходимо провести дополнительное исследование требований,но я хотел бы думать, что это хорошее начало.