Database
 sql >> база данни >  >> RDS >> Database

Модел на партийни взаимоотношения. Как да моделирам взаимоотношения

Отношенията са навсякъде:между хора, между организации, между организации и хора. Помислете за това да сте служител на компания, да сте член на проектен екип или да сте дъщерно дружество на друга компания. Има ли лесен начин за точно моделиране и управление на всички тези взаимоотношения? Можем ли лесно да отговорим на въпроса „Кой знае кой?“

Бърз преглед на взаимоотношенията

Как точно е получен този основен модел е описано в предишната ми статия, Гъвкави и управляеми дизайни на материалите (BOM).




В този модел и в конвенционалния дизайн на спецификацията, 1st interactor има тенденция да бъде най-добрата Party в Relationship – работодател, а не служител, ръководител на екип, а не член на екипа и т.н.

Ето как могат да изглеждат данните (с ролята, която всяка страна играе в скоби):


1 интерактор 2 интерактора
Widget Co. Inc. (работодател) Мениджър 1 (служител)
Widget Co. Inc. (работодател) Мениджър 2 (служител)
Widget Co. Inc. (работодател) Служител 1 (служител)
Widget Co. Inc. (работодател) Служител 2 (служител)
Widget Co. Inc. (работодател) Служител 3 (служител)
Widget Co. Inc. (работодател) Служител 4 (служител)
Мениджър 1 (отговорен за) Служител 1 (отчита се на)
Мениджър 1 (отговорен за) Служител 2 (отчита се на)
Мениджър 2 (отговорен за) Служител 3 (отчита се на)
Мениджър 2 (отговорен за) Служител 4 (отчита на)


По-усъвършенстван модел

Представете си, че искате да моделирате екип за разработка на проекти по следния начин:

Източник:https://www.edrawsoft.com/template-matrix -org-chart.php

Повечето от ролите в тази йерархия на екипа са реални – напр. анализаторът на изискванията докладва на системния анализатор. Друг начин на разглеждане е, че системният анализатор управлява анализатора на изискванията.

Отношенията между ролите могат да се четат от ляво на дясно (LTR) или от дясно на ляво (RTL). Обикновено е най-добре да се придържате към една или друга конвенция – LTR или RTL – но на практика може да откриете, че има изключения от това.

Също така имайте предвид, че тази диаграма показва различни начини за групиране на роли. Някои роли са реални, както обсъждахме; други са логични – напр. техническата група, групата за обучение, основният екип и екипът за поддръжка.

Можем да кажем, че тази диаграмадефинира екипната структура използвайки ролите, необходими за завършване на екипа за разработка на проекта. Това е различно от действителен екземпляр на екипа, който ще се състои от имена на истински хора срещу всяка от ролите.

Така че имаме нужда от модел на данни, който да е гъвкав и конфигурируем , като този:




Жълтите таблици съдържат метаданни , а сините таблици съдържат бизнес данни .

Задаване на основни метаданни

Ще започнем с попълване на party_type маса. Тази таблица прави разлика дали дадена страна е лице или организация.

Преди да направим много друго, трябва също да дефинираме роли в role_type таблица с метаданни:


Хубаво име Тип парти
HM Приходи и митници (HMRC) Организация
Служба за вътрешни приходи (IRS) Организация
Паспортна услуга Организация
Същото Организация
Дружество с ограничена отговорност Организация
Публично дружество с ограничена отговорност Организация
Кандидат Лице
Аз Лице
Инженерен технически директор Лице
Мениджър на проекти Лице
Специалист по проекти Лице
Системен анализатор Лице
Аналитик на изискванията Лице
Технически служител Лице
Системен администратор Лице
Старши хардуерен инженер Лице
Хардуерен инженер Лице
Старши софтуерен инженер Лице
Софтуерен инженер Лице
Инженер на база данни Лице
Техническа поддръжка Лице
QA мениджър Лице
Уеб дизайнер Лице
Софтуерен QA инженер Лице
Проектен офис Лице
Инженер по информационна сигурност Лице
Технически Организация
Обучение Организация
Основен екип Организация
Екип за поддръжка Организация


Без съмнение сте забелязали, че всяка роля принадлежи или на човек, или на организация. За да дам представа какво е възможно, добавих някои външни организации, с които нашето фиктивно дружество с ограничена отговорност, ABC Software Inc, има взаимоотношения.

Добавяне на метаданни за заетостта

Следващата задача е да дефинирате валидните двойки роли между първия и втория интерактори. Това от своя страна определя видовете взаимоотношения, които страните могат да имат. Нека започнем да попълваме role_type_relationship таблица с метаданни с ролите на служителите на компанията. В крайна сметка не можем да създаваме екипи, без първо да имаме работници:


1-ви тип роля 2-ри тип роля Описание посока Описание Тип връзка
Дружество с ограничена отговорност Инженерен технически директор LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Мениджър на проекти LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Специалист по проекти LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Системен анализатор LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Аналитик на изискванията LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Технически служител LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Системен администратор LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Старши хардуерен инженер LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Хардуерен инженер LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Старши софтуерен инженер LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Софтуерен инженер LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Инженер на база данни LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Техническа поддръжка LTR наема ИСТИНСКИ
Дружество с ограничена отговорност QA мениджър LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Уеб дизайнер LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Софтуерен QA инженер LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Проектен офис LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Инженер по информационна сигурност LTR наема ИСТИНСКИ
Дружество с ограничена отговорност Кандидат LTR избира ИСТИНСКИ


Да предположим, че ABC Software Inc. ще наеме двама служители, Джейн Смит и Алекс Джоунс, за следните роли:


Връзка със страна Връзка тип роля
1-ви интерактор (организация) 2-ри интерактор (лице) 1-ви интерактор (роля) 2-ри интерактор (роля) Описание
ABC Software Inc. Джейн Смит Дружество с ограничена отговорност Инженерен технически директор наема
ABC Software Inc. Алекс Джоунс Дружество с ограничена отговорност Мениджър на проекти наема


Ако направите крачка назад във времето, ще видите, че тази връзка е започнала преди да бъдат наети Джейн Смит и Алекс Джоунс; те трябваше да кандидатстват за работа в ABC Software Inc. Връзката щеше да изглежда така:


Връзка със страна Връзка тип роля
1-ви интерактор (организация) 2-ри интерактор (лице) 1-ви интерактор (роля) 2-ри интерактор (роля) Описание
ABC Software Inc. Джейн Смит Дружество с ограничена отговорност Кандидат избира
ABC Software Inc. Алекс Джоунс Дружество с ограничена отговорност Кандидат избира


Започвате ли да виждате възможностите, които има моделът на партийни взаимоотношения поддържа?

Нямаме таблица, наречена applicant и друга таблица, наречена employee , както може да се намери в други модели. Ако се замислите, те биха споделяли много от същите атрибути – име, адрес, дата на раждане и т.н.; ще трябва да копирате стойностите от applicant на employee при успешно наемане. Но дали участващите хора са се трансформирали от едно нещо в друго? Разбира се, че не! Те са все същите хора!

Всъщност, само връзката е променена между ABC Software Inc. и Джейн Смит или Алекс Джоунс. И точно това моделира моделът на партийните взаимоотношения.

Продължаване:Метаданни на екипа по проекта

Преди да можем да създадем party_relationship таблица, за да определим факта, че Джейн Смит управлява Алекс Джоунс, трябва да определим структурата на екипа за разработка на проекта. Това е просто въпрос на сдвояване на родителски и дъщерни роли, за да се формира валидна йерархия:


1-ви тип роля 2-ри тип роля Описание посока Описание Тип връзка
Екип за разработка на проекти Инженерен технически директор RTL води ИСТИНСКИ
Инженерен технически директор Мениджър на проекти LTR управлява ИСТИНСКИ
Мениджър на проекти Системен анализатор LTR управлява ИСТИНСКИ
Мениджър на проекти Системен администратор LTR управлява ИСТИНСКИ
Мениджър на проекти Специалист по проекти LTR управлява ИСТИНСКИ
Мениджър на проекти Старши софтуерен инженер LTR управлява ИСТИНСКИ
Мениджър на проекти Техническа поддръжка LTR управлява ИСТИНСКИ
Мениджър на проекти Уеб дизайнер LTR управлява ИСТИНСКИ
Мениджър на проекти Софтуерен QA инженер LTR управлява ИСТИНСКИ
Мениджър на проекти Проектен офис LTR управлява ИСТИНСКИ
Мениджър на проекти Инженер по информационна сигурност LTR управлява ИСТИНСКИ
Мениджър на проекти Инженер на база данни LTR управлява ИСТИНСКИ
Мениджър на проекти Техническа поддръжка LTR управлява ИСТИНСКИ
Мениджър на проекти QA мениджър LTR управлява ИСТИНСКИ
Системен анализатор Аналитик на изискванията LTR управлява ИСТИНСКИ
Аналитик на изискванията Технически служител LTR управлява ИСТИНСКИ
Системен администратор Старши хардуерен инженер LTR управлява ИСТИНСКИ
Старши хардуерен инженер Хардуерен инженер LTR управлява ИСТИНСКИ
Старши софтуерен инженер Софтуерен инженер LTR управлява ИСТИНСКИ


За всички горепосочени роли връзката се чете отляво надясно – напр. ръководителят на проекта управлява инженера на базата данни. Като алтернатива можете да приемете формата отдясно наляво (инженерът на базата данни докладва на ръководителя на проекта), ако това е предпочитаната от вас конвенция.

И накрая, трябва да дефинираме връзката между нашите двама нови служители:


Връзка със страна Връзка тип роля
1-ви интерактор (организация) 2-ри интерактор (лице) 1-ви интерактор (роля) 2-ри интерактор (роля) Описание
Джейн Смит Алекс Джоунс Инженерен технически директор Мениджър на проекти управлява


Разбира се, можете да имате произволен брой екипи във формата на тази йерархия. Следователно в известен смисъл party_relationship е екземпляр на role_type_relationship . Това е подобно на начина, по който обектът е екземпляр на клас в OO програмирането.

Включително логически метаданни

По отношение на диаграмата на екипа за разработване на проекти можем също да дефинираме следните логически връзки между роли :


1-ви тип роля 2-ри тип роля Описание посока Описание Тип връзка
Основен екип Специалист по проекти RTL е член на ЛОГИЧЕСКИ
Основен екип Системен анализатор RTL е член на ЛОГИЧЕСКИ
Основен екип Аналитик на изискванията RTL е член на ЛОГИЧЕСКИ
Основен екип Технически служител RTL е член на ЛОГИЧЕСКИ
Основен екип Системен администратор RTL е член на ЛОГИЧЕСКИ
Основен екип Старши хардуерен инженер RTL е член на ЛОГИЧЕСКИ
Основен екип Хардуерен инженер RTL е член на ЛОГИЧЕСКИ
Основен екип Старши софтуерен инженер RTL е член на ЛОГИЧЕСКИ
Основен екип Софтуерен инженер RTL е член на ЛОГИЧЕСКИ
Основен екип Инженер на база данни RTL е член на ЛОГИЧЕСКИ
Основен екип Техническа поддръжка RTL е член на ЛОГИЧЕСКИ
Основен екип QA мениджър RTL е член на ЛОГИЧЕСКИ
Основен екип Уеб дизайнер RTL е член на ЛОГИЧЕСКИ
Основен екип Софтуерен QA инженер RTL е член на ЛОГИЧЕСКИ
Основен екип Проектен офис RTL е член на ЛОГИЧЕСКИ
Основен екип Инженер по информационна сигурност RTL е член на ЛОГИЧЕСКИ
Екип за поддръжка Уеб дизайнер RTL е член на ЛОГИЧЕСКИ
Екип за поддръжка Софтуерен QA инженер RTL е член на ЛОГИЧЕСКИ
Екип за поддръжка Проектен офис RTL е член на ЛОГИЧЕСКИ
Екип за поддръжка Инженер по информационна сигурност RTL е член на ЛОГИЧЕСКИ


Имайте предвид, че party_relationship никога не е екземпляр на логическа role_type_relationship . И така, какъв е смисълът от дефинирането на логически връзки?

Е, това вероятно е най-добре обяснено като пример. Представете си, че искате да изпратите писмо до всички служители, които логично са членове на екипа за поддръжка. За да създадете пощенски списък, трябва да напишете заявка, която връща всички роли на LOGICAL Support Team 2 на интерактори, присъединени към същите REAL 2 роли на интерактори, присъединени към party_relationship , се присъедини към party . Това ще ви позволи да получите имената и адресите на всички засегнати.

Специален случай

Може да сте забелязали няколко необичайни записа в role_type таблица с метаданни, а именно:


Тип роля Тип парти
Аз Лице
Същото Организация


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


1-ви тип роля 2-ри тип роля Описание посока Описание Тип връзка
Аз Системен анализатор LTR нает ИСТИНСКИ


Например, за самостоятелно зает системен анализатор, 1 и 2 интерактори в party_relationship се обърнете към същата party ред – т.е. и двете колони на външния ключ съдържат абсолютно същия party.ID стойност.

Важността на наличието на контекст

Представете си, че имаме малък аналитичен екип, който основно се формира от клона между ръководителя на проекта и техническия служител:


1-ви тип роля 2-ри тип роля Описание посока Описание Тип връзка
Малък екип за анализи Мениджър на проекти RTL води ИСТИНСКИ
Мениджър на проекти Системен анализатор LTR управлява ИСТИНСКИ
Системен анализатор Аналитик на изискванията LTR управлява ИСТИНСКИ
Аналитик на изискванията Технически служител LTR управлява ИСТИНСКИ


Всяка от връзките тук също съществува в структурата на екипа за разработка на проекти. И така, как да разграничим една връзка мениджър на проект → системен анализатор от друга?

Използваме незадължителния контекст външен ключ между role_type_relationship и role_type . За малкия аналитичен екип ние задаваме контекста на всички връзки към „малкия аналитичен екип“, елемента от най-високо ниво. И ние правим същото нещо за структурата на екипа за разработка на проекти. Когато преминаваме през структурата, правим това само за типа екип, който ни интересува.

Плюсове и минуси на модела на спецификацията на партийните взаимоотношения

Ако сте чели другите ми статии по темата, вероятно сте се досетили, че съм фен на модела за дизайн на Списък с материали. Това е просто, но много мощно. Предупреждението е, че трябва да се използва по подходящ начин и трябва да бъде пригодено така, че внедряването ви да остане управляемо.

В тази реализация на модела на спецификацията на взаимоотношенията със страни ние гарантираме, че нашите взаимоотношения остават точни, като първо дефинираме допустимите връзки между интеракторите, които съществуват в нашия домейн. Това например би попречило на Службата за вътрешни приходи да бъде „наета“ като уеб дизайнер в ABC Software Inc.

Какви възможности произтичат от дефинирането на взаимоотношенията по този начин? Е, вашата организация може да се наложи да знае за какви други организации са работили настоящите ви служители и изпълнители. Това помага да се избегнат възможни конфликти на интереси или дори измами. Пример за това е организация за награждаване. Той трябва да знае в кои училища са преподавали неговите оценители преди това, за да гарантира, че няма да оценяват изпитни работи от тези училища. В модела на взаимоотношения със страна е лесно да се направи запитване и да се получи тази информация.

От друга страна, вашата организация може да иска да съхранява същата информация, защото това би могло да предостави бизнес възможности. Просто зависи от вашия домейн.

Накратко, прозренията, които можете да получите от добре структурирани данни за взаимоотношенията между страните, могат да бъдат безценни.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да актуализирате колона въз основа на друга колона в SQL

  2. Модел на партийни взаимоотношения. Как да моделирам взаимоотношения

  3. Как да филтрирате редове без NULL в колона

  4. Свързване на SQuirreL SQL към Microsoft Excel

  5. Минимизиране на въздействието от разширяване на колона IDENTITY – част 2