sql >> Database teknologi >  >> RDS >> Database

Brug af konfigurationstabeller til at definere den faktiske arbejdsgang

Den første del af denne serie introducerede nogle grundlæggende trin til styring af livscyklussen for enhver enhed i en database. Vores anden og sidste del vil vise dig, hvordan du definerer den faktiske arbejdsgang ved hjælp af yderligere konfigurationstabeller. Det er her, brugeren præsenteres for tilladte muligheder hvert trin på vejen. Vi vil også demonstrere en teknik til at omgå den strenge genbrug af "samlinger" og "undersamlinger" i en styklistestruktur.

Definition af muligheder

Del 1 introducerede kernearbejdsgangstabellerne, og hvordan disse nemt kan inkorporeres i din database. Det, vi har brug for nu, er noget til at guide brugeren til at vælge den næste logiske tilstand – noget, der definerer en logisk arbejdsgang .

Diagrammet nedenfor definerer alle komponenterne i en workflow-databasemodel:




To konfigurationstabeller, workflow_state_option og workflow_state_context , er blevet tilføjet til modellen. Vi starter med indstillingstabellen, som definerer de tilladelige næste tilstande . Når dens funktion er forstået, vender vi tilbage til konteksttabellen og forklarer den rolle, den spiller.

Tilladte næste stater

Tabellerne, der følger, ligner lidt en SQL-visning på tværs af vores konfigurationstabeller. Her har vi skjult tabelsammenføjningerne, og vi ser bare på kombinationerne af type_keys . Så lad os overveje hvert STATE.OUTCOME kombination og definer indstillingerne tilgængelig for brugeren:


STATE.OUTCOME-kombination (fra statshierarki) Statskontekst Barn deaktiveret Mulighed 1 Mulighed 2
APPLICATION_RECEIVED
.ACCEPTERET
STANDARD_JOB
_APPLICATION
N APPLICATION_REVIEW
APPLICATION_RECEIVED
.REJECTED
STANDARD_JOB
_APPLICATION
N APPLICATION_CLOSED .NOT_HIRED
APPLICATION_REVIEW
.BESTÅET
STANDARD_JOB
_APPLICATION
N INVITED_TO_INTERVIEW
APPLICATION_REVIEW
.FAILED
STANDARD_JOB
_APPLICATION
N APPLICATION_CLOSED .NOT_HIRED
INVITED_TO_INTERVIEW
.ACCEPTERET
STANDARD_JOB
_APPLICATION
N INTERVIEW
INVITED_TO_INTERVIEW
.AFVISET
STANDARD_JOB
_APPLICATION
N APPLICATION_CLOSED .NOT_HIRED
INTERVIEW
.Bestået
STANDARD_JOB
_APPLICATION
N MAKE_OFFER SEEK_REFERENCES
INTERVIEW.FAILED STANDARD_JOB
_APPLICATION
N APPLICATION_CLOSED
INTERVIEW
.CANDIDATE_CANCELLED
STANDARD_JOB
_APPLICATION
N APPLICATION_CLOSED INVITED_TO_INTERVIEW
INTERVIEW
.NO_SHOW
STANDARD_JOB
_APPLICATION
N APPLICATION_CLOSED
MAKE_OFFER.ACCEPTED STANDARD_JOB
_APPLICATION
N SEEK_REFERENCES
MAKE_OFFER.DECLINED STANDARD_JOB
_APPLICATION
N APPLICATION_CLOSED
SEEK_REFERENCES
.PASSED
STANDARD_JOB
_APPLICATION
N APPLICATION_CLOSED .HIRED
SEEK_REFERENCES
.FAILED
STANDARD_JOB
_APPLICATION
N APPLICATION_CLOSED
APPLICATION_CLOSED
.UDLEJET
STANDARD_JOB
_APPLICATION
N
APPLICATION_CLOSED
.NOT_HIRED
STANDARD_JOB
_APPLICATION
N


Fordi vi ignorerer kontekst for nu, Statskontekst og Børn deaktiveret? er nedtonede. Jeg har også begrænset antallet af muligheder i dette eksempel til to for korthedens skyld, selvom der i praksis ikke er nogen grænse.

Så hvordan virker dette?

Forestil dig, at interviewet netop er blevet gennemført, og at intervieweren optager resultatet. Den underliggende tabel, der opdateres, er managed_entity_state . Der er to logiske udfald:BESTÅET og IKKE. Så den nuværende managed_entity_state er opdateret med det valgte resultat (wf_state_type_outcome_id ). I eksempelmodellen kan intervieweren også inkludere nogle noter om interviewet.

Hvis intervieweren vælger PASSED, præsenteres de for yderligere to muligheder:MAKE_OFFER og SEEK_REFERENCES. Dette er de næste stater i vores arbejdsgang. De ligner go to udsagn i programmering. For begge muligheder indsættes en ny række i managed_entity_state , flytte jobansøgningen til den næste tilstand i workflow-processen. Brugeren kan sætte en deadline for dette ved at indtaste en due_date .

På den anden side, hvis intervieweren vælger FAILED, er der kun én mulighed:APPLICATION_CLOSED. Så en ny managed_entity_state række er indsat ved hjælp af APPLICATION_CLOSED-tilstanden (wf_state_type_state_id ).

Du vil se, at der ikke er nogen tilgængelige muligheder for tilstanden APPLICATION_CLOSED. Dette betyder, at slutningen af ​​workflow-processen er nået.

Konteksttabellen

Lad os se på konfigurationen for den tekniske jobansøgningsproces for at se, hvilken rolle konteksttabellen spiller:


STATE.OUTCOME-kombination (fra statshierarki) Statskontekst Barn deaktiveret Mulighed 1 Mulighed 2
APPLICATION_RECEIVED
.ACCEPTERET
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_REVIEW
APPLICATION_RECEIVED
.REJECTED
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_CLOSED
APPLICATION_REVIEW
.BESTÅET
TECHNICAL_JOB
_APPLICATION
N INVITERET_TIL
_INTERVIEW
APPLICATION_REVIEW
.FAILED
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_CLOSED
INVITED_TO_INTERVIEW
.ACCEPTERET
TECHNICAL_JOB
_APPLICATION
N TEST_APTITUDE
INVITED_TO_INTERVIEW
.AFVISET
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_CLOSED
TEST_APTITUDE
.PASSED
TECHNICAL_JOB
_APPLICATION
N INTERVIEW SØG
_REFERENCER
TEST_APTITUDE
.FAILED
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_CLOSED
INTERVIEW
. BESTAET
TECHNICAL_JOB
_APPLICATION
N MAKE_OFFER SØG
_REFERENCER
INTERVIEW
. MISLYKKES
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_CLOSED
INTERVIEW
.CANDIDATE_CANCELLED
TECHNICAL_JOB
_APPLICATION
Y - -
INTERVIEW
.NO_SHOW
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_CLOSED
INVITERET_TIL
_INTERVIEW
MAKE_OFFER
.ACCEPTERET
TECHNICAL_JOB
_APPLICATION
N SØG
_REFERENCER
MAKE_OFFER
.AFSLAG
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_CLOSED
SEEK_REFERENCES
.PASSED
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_CLOSED.SUCCESS
SEEK_REFERENCES
.FAILED
TECHNICAL_JOB
_APPLICATION
N APPLIKATION
_CLOSED
APPLICATION_CLOSED
.UDLEJET
TECHNICAL_JOB
_APPLICATION
N
APPLICATION_CLOSED
.NOT_HIRED
TECHNICAL_JOB
_APPLICATION
N UTSTRÆKKELIG
_ERFARING
OVER
_QUALIFIED


Her er konteksten TECHNICAL_JOB_APPLICATION. Hvorfor er dette vigtigt? Fordi det giver os mulighed for at tilsidesætte resultater. Husk, at vi tidligere har udtalt, at vi kan genbruge 'samlinger' og 'undersamlinger' i en styklistestruktur (Bom of Materials). Dette er nyttigt, når vi definerer noget én gang og genbruger det, men det kan også være for stift. Hvad hvis vi ikke vil genbruge alt?

Ved at indsætte workflow_state_context mellem workflow_state_hierarchy og workflow_state_option , kan vi både genbruge og tilsidesætte resultater. I denne model kan vi definere, om et resultat er aktiveret eller deaktiveret for forskellige processer.

I ovenstående eksempel er kombinationen INTERVIEW.CANDIDATE_CANCELLED deaktiveret. Med andre ord siger vi, at det simpelthen ikke er et tilladt resultat for tekniske jobansøgninger. Som følge heraf vil intervieweren ikke være i stand til at vælge det, når han optager resultatet af en teknisk jobsamtale, fordi vores forespørgsel kun vælger muligheder, hvor workflow_state_context.child_disabled = ‘N’ .

Fordi workflow_state_option er ikke et direkte underordnet workflow_state_hierarchy , er vi nødt til at definere et separat sæt af muligheder, hver gang en tilstand bruges. Men denne afvejning giver os mulighed for at finjustere mulighederne for hver proces.

Kvalificerende resultater

Vi har også mulighed for at definere mere detaljerede kvalifikationer for resultater. Der er to måder at gøre dette på:

  1. Du kan oprette et fjerde niveau i din stykliste for at definere kvalifikationer under resultater i hierarkiet. Due diligence bør tages med denne tilgang. For eksempel bruges FAILED-resultatet til forskellige tilstande. Vil du have de samme kvalifikationer for forskellige FAILED-tilstande? Måske ikke.
  2. Du kan definere dine kvalifikationer i workflow_state_type men ikke binde dem til noget hierarki; de er fritstående. Du bruger derefter workflow_state_option at liste kvalifikationerne for den specifikke resultatkontekst. Dette er, hvad ovenstående konfiguration viser, hvor OVER_QUALIFIED- og INSUFFICIENT_EXPERIENCE-kvalifikationerne er angivet som muligheder for APPLICATION_CLOSED.NOT_HIRED-resultatet.

I begge tilfælde skal applikationen genkende, at der er valgt en kvalifikation i stedet for en tilstand eller et resultat – workflow_level_type vil indikere dette – og opdatere managed_entity_state.wf_state_type_qual_id med den valgte værdi.

Nogle tabelkonfigurationsdata

Du vil måske gerne se de underliggende konfigurationsdata, tabel for tabel. Her har vi ids og type_keys de henviser til i parentes. For kortheds skyld præsenteres kun værdier relateret til artiklen.


workflow_level_type

id type_key
1 BEHANDLING
2 STAT
3 RESULTAT
4 QUALIFIER


workflow_state_type

id type_key workflow_level_type_id
1 STANDARD_JOB_APPLICATION 1 (BEHANDLING)
2 TECHNICAL_APPLICATION 1 (BEHANDLING)
3 INTERVIEW 2 (STATE)
4 Bestået 3 (RESULTAT)
5 FEJLDE 3 (RESULTAT)
6 MAKE_OFFER 2 (STATE)
7 SEEK_REFERENCES 2 (STATE)
8 APPLICATION_CLOSED 2 (STATE)
9 LEJET 3 (RESULTAT)
10 IKKE_LEJET 3 (RESULTAT)
11 UTRUSTIGT_ERFARING 4 (QUALIFIER)
12 OVER_QUALIFIED 4 (QUALIFIER)


workflow_state_hierarchy

id state_type_parent_id state_type_child_id
1 1 (STANDARD_JOB_APPLICATION) 3 (INTERVIEW)
2 2 (TECHNICAL_JOB_APPLICATION) 3 (INTERVIEW)
3 3 (INTERVIEW) 4 (Bestået)
4 3 (INTERVIEW) 5 (FEJLDE)
5 1 (STANDARD_JOB_APPLICATION) 8 (APPLICATION_CLOSED)
6 2 (TECHNICAL_JOB_APPLICATION) 8 (APPLICATION_CLOSED)
7 8 (APPLICATION_CLOSED) 9 (LEJET)
8 8 (APPLICATION_CLOSED) 10 (NOT_HIRED)


workflow_state_context

id state_type_id state_hierarchy_id barn_deaktiveret
1 1 (STANDARD_JOB_ APPLICATION) 3 (INTERVIEW.Bestået) N
2 1 (STANDARD_JOB_ APPLICATION) 4 (INTERVIEW.FAILED) N
3 1 (STANDARD_JOB_ APPLICATION) 7 (APPLICATION_CLOSED. LEJET) N
4 1 (STANDARD_JOB_ APPLICATION) 5 (APPLICATION_CLOSED. NOT_HIRED) N
5 2 (TECHNICAL_APPLICATION) 6 (APPLICATION_CLOSED. NOT_HIRED) N


workflow_state_option

id state_kontekst_id state_type_id
1 1 (STANDARD_JOB_ APPLICATION. INTERVIEW. BESTÅET) 6 (MAKE_OFFER)
2 1 (STANDARD_JOB_ APPLICATION. INTERVIEW. BESTÅET) 7 (SEEK_REFERENCES)
3 2 (STANDARD_JOB_ APPLICATION. INTERVIEW. FEJLLET) 8 (APPLICATION_CLOSED)
4 5 (TECHNICAL_JOB_ APPLICATION. APPLICATION_CLOSED. NOT_HIRED) 11 (INSUFFICIENT_EXPERIENCE)
5 5 (TEKNISK _JOB_ APPLICATION. APPLICATION_CLOSED. NOT_HIRED) 12 (OVER_QUALIFIED)


Det er klart, at det er ret vanskeligt at sætte dette op. Det skal helst administreres via en applikation med en brugervenlig grænseflade.

Alternative sekvenser

Du vil bemærke, at en række tabeller har en kolonne kaldet alt_sequence . Dette bruges til at bestille listen over værdier for de forskellige valg, der præsenteres for brugeren. Dette vil typisk være i faldende rækkefølge baseret på brug, med de mest brugte muligheder øverst.

Mens denne artikel beskrev jobansøgninger, kan modellen bruges til mange typer arbejdsgange, hvor en enheds tilstand skal styres over tid. Alternativt kan modellen fungere som et mønster til at tilpasse til dine egne særlige krav.


  1. Sådan rettes typiske WordPress-fejl

  2. PL/SQL Performance Tuning for LIKE '%...%' Wildcard-forespørgsler

  3. Ukendt kolonne i 'feltliste'-fejl på MySQL Update-forespørgsel

  4. Sådan fungerer current_time i PostgreSQL