Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Menggunakan Pola Alur Kerja untuk Mengelola Status Entitas Apa Pun

Pernahkah Anda menemukan situasi di mana Anda perlu mengelola keadaan entitas yang berubah seiring waktu? Ada banyak contoh di luar sana. Mari kita mulai dengan yang mudah:menggabungkan catatan pelanggan.

Misalkan kita menggabungkan daftar pelanggan dari dua sumber yang berbeda. Kami dapat membuat salah satu dari status berikut muncul:Duplikat Teridentifikasi – sistem telah menemukan dua entitas yang berpotensi duplikat; Duplikat yang Dikonfirmasi – pengguna memvalidasi bahwa dua entitas memang duplikat; atau Dikonfirmasi Unik – pengguna memutuskan kedua entitas itu unik. Dalam salah satu situasi ini, pengguna hanya memiliki keputusan ya-tidak untuk dibuat.

Tapi bagaimana dengan situasi yang lebih kompleks? Apakah ada cara untuk menentukan alur kerja aktual antar negara? Baca terus…

Bagaimana Hal Dapat Dengan Mudah Salah

Banyak organisasi perlu mengelola lamaran pekerjaan. Dalam model sederhana, Anda dapat memiliki tabel bernama JOB_APPLICATION , dan Anda dapat melacak status aplikasi menggunakan tabel data referensi yang berisi nilai seperti ini:


Status Aplikasi
APPLICATION_RECEIVED
APPLICATION_UNDER_REVIEW
APPLICATION_REJECTED
INVITED_TO_INTERVIEW
INVITATION_DECLINED
INVITATION_ACCEPTED
INTERVIEW_PASSED
INTERVIEW_FAILED
REFERENCES_SOUGHT
REFERENCES_ACCEPTABLE
REFERENCES_UNACCEPTABLE
JOB_OFFER_MADE
JOB_OFFER_ACCEPTED
JOB_OFFER_DECLINED
APPLICATION_CLOSED


Nilai-nilai ini dapat dipilih dalam urutan apa pun kapan saja. Itu bergantung pada pengguna akhir untuk memastikan bahwa pilihan yang logis dan benar dibuat pada setiap tahap. Tidak ada yang melarang urutan negara yang tidak logis.

Misalnya, katakanlah aplikasi telah ditolak. Status saat ini jelas adalah APPLICATION_REJECTED . Tidak ada yang dapat dilakukan di tingkat aplikasi untuk mencegah pengguna yang tidak berpengalaman kemudian memilih INVITED_TO_INTERVIEW atau keadaan tidak logis lainnya.

Yang dibutuhkan adalah sesuatu untuk memandu pengguna memilih status logis berikutnya, sesuatu yang mendefinisikan alur kerja logis .

Dan bagaimana jika Anda memiliki persyaratan yang berbeda untuk berbagai jenis lamaran pekerjaan? Misalnya, beberapa pekerjaan mungkin mengharuskan pelamar untuk mengikuti tes bakat. Tentu, Anda dapat menambahkan lebih banyak nilai ke daftar untuk menutupi ini, tetapi tidak ada dalam desain saat ini yang mencegah pengguna akhir membuat pilihan yang salah untuk jenis aplikasi yang dimaksud. Kenyataannya adalah ada alur kerja yang berbeda untuk konteks yang berbeda .

Hal lain yang perlu dipikirkan:apakah opsi yang tercantum benar-benar semua status ? Atau beberapa sebenarnya hasil ? Misalnya, tawaran pekerjaan dapat diterima atau ditolak oleh pelamar. Oleh karena itu, JOB_OFFER_MADE benar-benar memiliki dua hasil:JOB_OFFER_ACCEPTED dan JOB_OFFER_DECLINED .

Hasil lain bisa jadi tawaran pekerjaan ditarik. Anda mungkin ingin mencatat alasan penarikannya menggunakan kualifikasi. Jika Anda hanya menambahkan alasan ini ke daftar di atas, tidak ada yang memandu pengguna akhir untuk membuat pilihan logis.

Jadi, semakin kompleks status, hasil, dan kualifikasi, semakin Anda perlu mendefinisikan alur kerja dari sebuah proses .

Mengatur Proses, Status, dan Hasil

Penting untuk memahami apa yang terjadi dengan data Anda sebelum Anda mencoba memodelkannya. Anda mungkin pada awalnya cenderung berpikir bahwa ada hierarki tipe yang ketat di sini:prosesnegara bagianhasil .

Ketika kita melihat lebih dekat pada contoh di atas, kita melihat bahwa INVITED_TO_INTERVIEW dan JOB_OFFER_MADE negara bagian memiliki kemungkinan hasil yang sama, yaitu ACCEPTED dan DECLINED . Ini memberi tahu kita bahwa ada hubungan banyak-ke-banyak antara negara dan hasil. Hal ini sering berlaku untuk negara bagian, hasil, dan kualifikasi lainnya.

Pada tingkat konseptual, inilah yang sebenarnya terjadi dengan metadata kami:

Jika Anda mengubah model ini ke dunia fisik menggunakan pendekatan standar, Anda akan memiliki tabel yang disebut PROCESS , STATE , OUTCOME , dan QUALIFIER; Anda juga perlu memiliki tabel perantara di antara mereka – PROCESS_STATE , STATE_OUTCOME , dan OUTCOME_QUALIFIERuntuk menyelesaikan hubungan banyak-ke-banyak . Ini memperumit desain.

Meskipun hierarki logis level (proses → status → hasil → kualifikasi) harus dipertahankan, ada cara yang lebih sederhana untuk mengatur metadata kami secara fisik.

Pola Alur Kerja

Diagram di bawah mendefinisikan komponen utama dari model database alur kerja:




Tabel kuning di sebelah kiri berisi metadata alur kerja, dan tabel biru di sebelah kanan berisi data bisnis.

Hal pertama yang harus ditunjukkan adalah bahwa entitas apa pun dapat dikelola tanpa memerlukan perubahan besar pada model ini. YOUR_ENTITIY_TO_MANAGE tabel adalah yang di bawah manajemen alur kerja. Dalam contoh kita, ini akan menjadi JOB_APPLICATION meja.

Selanjutnya, kita hanya perlu menambahkan wf_state_type_process_id kolom ke tabel apa pun yang ingin kita kelola. Kolom ini menunjuk ke proses alur kerja yang sebenarnya digunakan untuk mengelola entitas. Ini tidak sepenuhnya merupakan kolom kunci asing, tetapi memungkinkan kita untuk dengan cepat menanyakan WORKFLOW_STATE_TYPE untuk proses yang benar. Tabel yang akan berisi riwayat negara bagian adalah MANAGED_ENTITY_STATE . Sekali lagi, Anda akan memilih nama tabel spesifik Anda sendiri di sini dan memodifikasinya untuk kebutuhan Anda sendiri.

Metadata

Tingkat alur kerja yang berbeda ditentukan dalam WORKFLOW_LEVEL_TYPE . Tabel ini berisi berikut ini:


Ketik Kunci Deskripsi
PROSES Proses alur kerja tingkat tinggi.
NEGARA Status dalam proses.
HASIL Bagaimana sebuah negara berakhir, hasilnya.
KUALIFIKASI Sebuah kualifikasi opsional yang lebih mendetail untuk sebuah hasil.


WORKFLOW_STATE_TYPE dan WORKFLOW_STATE_HIERARCHY membentuk struktur Bill of Material (BOM) klasik . Struktur ini, yang sangat deskriptif dari tagihan bahan manufaktur yang sebenarnya, cukup umum dalam pemodelan data. Itu dapat mendefinisikan hierarki atau diterapkan pada banyak situasi rekursif. Kami akan menggunakannya di sini untuk menentukan hierarki logis dari proses, status, hasil, dan qualifier opsional.

Sebelum kita dapat mendefinisikan hierarki, kita perlu mendefinisikan komponen individu. Ini adalah blok bangunan dasar kami. Saya hanya akan merujuk ini dengan TYPE_KEY (yang unik) demi singkatnya. Untuk contoh kami, kami memiliki:


Jenis Tingkat Alur Kerja Jenis Status Alur Kerja.Ketik Kunci
HASIL LULUS
HASIL GAGAL
HASIL DITERIMA
HASIL DITOLAK
HASIL CANDIDATE_CANCELLED
HASIL EMPLOYER_CANCELLED
HASIL DITOLAK
HASIL EMPLOYER_WITHDRAWN
HASIL NO_SHOW
HASIL DIPEKERJAKAN
HASIL TIDAK_DIPERCAYA
NEGARA APPLICATION_RECEIVED
NEGARA APPLICATION_REVIEW
NEGARA INVITED_TO_INTERVIEW
NEGARA WAWANCARA
NEGARA TEST_APTITUDE
NEGARA SEEK_REFERENCES
NEGARA BUAT_TAWARKAN
NEGARA APPLICATION_CLOSED
PROSES STANDARD_JOB_APPLICATION
PROSES TECHNICAL_JOB_APPLICATION


Sekarang kita dapat mulai mendefinisikan hierarki kita. Di sinilah kami mengambil blok bangunan kami dan menentukan struktur kami. Untuk setiap negara bagian, kami menentukan hasil yang mungkin. Faktanya, ini adalah aturan sistem alur kerja bahwa setiap status harus diakhiri dengan hasil:


Jenis Induk – NEGARA Tipe Anak – HASIL
APPLICATION_RECEIVED DITERIMA
APPLICATION_RECEIVED DITOLAK
APPLICATION_REVIEW LULUS
APPLICATION_REVIEW GAGAL
INVITED_TO_INTERVIEW DITERIMA
INVITED_TO_INTERVIEW DITOLAK
WAWANCARA LULUS
WAWANCARA GAGAL
WAWANCARA CANDIDATE_CANCELLED
WAWANCARA NO_SHOW
MAKE_OFFER DITERIMA
MAKE_OFFER DITOLAK
SEEK_REFERENCES LULUS
SEEK_REFERENCES GAGAL
APPLICATION_CLOSED DIPEKERJAKAN
APPLICATION_CLOSED TIDAK_DIPERCAYA
TEST_APTITUDE LULUS
TEST_APTITUDE GAGAL


Proses kami hanyalah seperangkat keadaan yang masing-masing ada untuk jangka waktu tertentu. Pada tabel di bawah ini disajikan dalam urutan logis, tetapi ini tidak menentukan urutan pemrosesan yang sebenarnya.


Jenis Induk – PROSES Tipe Anak – STATES
STANDARD_JOB_APPLICATION APPLICATION_RECEIVED
STANDARD_JOB_APPLICATION APPLICATION_REVIEW
STANDARD_JOB_APPLICATION INVITED_TO_INTERVIEW
STANDARD_JOB_APPLICATION WAWANCARA
STANDARD_JOB_APPLICATION MAKE_OFFER
STANDARD_JOB_APPLICATION SEEK_REFERENCES
STANDARD_JOB_APPLICATION APPLICATION_CLOSED
TECHNICAL_JOB_APPLICATION APPLICATION_RECEIVED
TECHNICAL_JOB_APPLICATION APPLICATION_REVIEW
TECHNICAL_JOB_APPLICATION INVITED_TO_INTERVIEW
TECHNICAL_JOB_APPLICATION TEST_APTITUDE
TECHNICAL_JOB_APPLICATION WAWANCARA
TECHNICAL_JOB_APPLICATION MAKE_OFFER
TECHNICAL_JOB_APPLICATION SEEK_REFERENCES
TECHNICAL_JOB_APPLICATION APPLICATION_CLOSED


Ada poin penting yang harus dibuat mengenai hierarki BOM. Sama seperti bill of material fisik mendefinisikan rakitan dan sub-rakitan hingga komponen terkecil, kami memiliki pengaturan serupa dalam hierarki kami. Artinya, kita dapat menggunakan kembali 'rakitan' dan 'sub-rakitan'.

Sebagai contoh:Kedua STANDARD_JOB_APPLICATION dan TECHNICAL_JOB_APPLICATION proses memiliki INTERVIEW negara bagian . Selanjutnya, INTERVIEW negara bagian memiliki PASSED , FAILED , CANDIDATE_CANCELLED , dan NO_SHOW hasil ditentukan untuk itu.

Saat Anda menggunakan status dalam suatu proses, Anda secara otomatis mendapatkan hasil turunannya karena status tersebut sudah merupakan rakitan. Ini berarti bahwa hasil yang sama ada untuk kedua jenis lamaran pekerjaan di INTERVIEW panggung. Jika Anda menginginkan hasil wawancara yang berbeda untuk berbagai jenis lamaran pekerjaan, Anda perlu mendefinisikan, misalnya, TECHNICAL_INTERVIEW dan STANDARD_INTERVIEW menyatakan bahwa masing-masing memiliki hasil spesifiknya sendiri.

Dalam contoh ini, satu-satunya perbedaan antara kedua jenis lamaran pekerjaan adalah bahwa lamaran pekerjaan teknis mencakup tes bakat.

Sebelum Anda Pergi

Bagian 1 dari artikel dua bagian ini telah memperkenalkan pola database alur kerja. Ini telah menunjukkan bagaimana Anda dapat menggabungkannya untuk mengelola siklus hidup entitas apa pun di database Anda.

Bagian 2 akan menunjukkan kepada Anda cara mendefinisikan alur kerja yang sebenarnya menggunakan tabel konfigurasi tambahan. Di sinilah pengguna akan disajikan dengan langkah selanjutnya yang diizinkan. Kami juga akan mendemonstrasikan teknik untuk menyiasati penggunaan kembali 'rakitan' dan 'sub-rakitan' yang ketat di BOM.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memfilter Catatan dengan Fungsi Agregat COUNT

  2. Mantan Eksekutif Capgemini, Sunitha Ray, Bergabung dengan ScaleGrid DBaaS untuk Memperluas Penjualan Perusahaan

  3. Membangun Model Data untuk Sistem Manajemen Tempat Parkir

  4. Perintah RMAN gagal dengan ORA-00904:"BS"."GUID":pengenal tidak valid

  5. Bagaimana Pengindeksan Bekerja