Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Sử dụng các mẫu quy trình làm việc để quản lý trạng thái của bất kỳ thực thể nào

Bạn đã bao giờ gặp tình huống cần quản lý trạng thái của một thực thể thay đổi theo thời gian chưa? Có rất nhiều ví dụ ra khỏi đó. Hãy bắt đầu với một việc dễ dàng:hợp nhất hồ sơ khách hàng.

Giả sử chúng ta đang hợp nhất danh sách khách hàng từ hai nguồn khác nhau. Chúng tôi có thể có bất kỳ trạng thái nào sau đây phát sinh: Đã xác định trùng lặp - hệ thống đã tìm thấy hai thực thể có khả năng trùng lặp; Bản sao đã xác nhận - người dùng xác nhận rằng hai thực thể thực sự là bản sao; hoặc Đã xác nhận duy nhất - người dùng quyết định hai thực thể là duy nhất. Trong bất kỳ tình huống nào trong số này, người dùng chỉ có quyết định có - không.

Nhưng những tình huống phức tạp hơn thì sao? Có cách nào để xác định quy trình làm việc thực tế giữa các trạng thái không? Đọc tiếp…

Mọi thứ có thể dễ dàng sai lầm như thế nào

Nhiều tổ chức cần quản lý các đơn xin việc. Trong một mô hình đơn giản, bạn có thể có một bảng được gọi là JOB_APPLICATION và bạn có thể theo dõi trạng thái của ứng dụng bằng bảng dữ liệu tham chiếu có chứa các giá trị như sau:


Trạng thái ứng dụng
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


Các giá trị này có thể được chọn theo thứ tự bất kỳ lúc nào. Nó dựa vào người dùng cuối để đảm bảo rằng lựa chọn hợp lý và chính xác được thực hiện ở mỗi giai đoạn. Không có gì ngăn cấm một chuỗi trạng thái phi logic.

Ví dụ:giả sử rằng một đơn đăng ký đã bị từ chối. Trạng thái hiện tại rõ ràng sẽ là APPLICATION_REJECTED . Không thể làm gì ở cấp ứng dụng để ngăn người dùng thiếu kinh nghiệm chọn INVITED_TO_INTERVIEW sau đó hoặc một số trạng thái phi logic khác.

Điều cần thiết là thứ để hướng dẫn người dùng chọn trạng thái logic tiếp theo, thứ xác định quy trình làm việc hợp lý .

Và điều gì sẽ xảy ra nếu bạn có các yêu cầu khác nhau cho các loại đơn xin việc khác nhau? Ví dụ, một số công việc có thể yêu cầu ứng viên phải làm bài kiểm tra năng khiếu. Chắc chắn, bạn có thể thêm nhiều giá trị hơn vào danh sách để bao gồm những giá trị này, nhưng không có gì trong thiết kế hiện tại ngăn người dùng cuối đưa ra lựa chọn không chính xác cho loại ứng dụng được đề cập. Thực tế là có quy trình làm việc khác nhau cho các ngữ cảnh khác nhau .

Một điểm khác cần suy nghĩ:các tùy chọn được liệt kê có thực sự là tất cả các trạng thái ? Hay trên thực tế là một số kết quả ? Ví dụ, lời đề nghị về một công việc có thể được người nộp đơn chấp nhận hoặc từ chối. Do đó, JOB_OFFER_MADE thực sự có hai kết quả:JOB_OFFER_ACCEPTEDJOB_OFFER_DECLINED .

Một kết quả khác có thể là lời mời làm việc bị rút lại. Bạn có thể muốn ghi lại lý do tại sao nó bị thu hồi bằng cách sử dụng một bộ định tính. Nếu bạn chỉ thêm những lý do này vào danh sách trên, không có gì hướng dẫn người dùng cuối đưa ra các lựa chọn hợp lý.

Vì vậy, thực sự, các trạng thái, kết quả và tiêu chuẩn càng trở nên phức tạp, bạn càng cần xác định quy trình làm việc của một quy trình .

Tổ chức các quá trình, trạng thái và kết quả

Điều quan trọng là phải hiểu điều gì đang xảy ra với dữ liệu của bạn trước khi bạn cố gắng lập mô hình dữ liệu đó. Thoạt đầu, bạn có thể có xu hướng nghĩ rằng có một hệ thống phân cấp nghiêm ngặt của các loại ở đây: process trạng thái kết quả .

Khi xem xét kỹ hơn ví dụ trên, chúng ta thấy rằng INVITED_TO_INTERVIEWJOB_OFFER_MADE các trạng thái có cùng kết quả có thể có, cụ thể là ACCEPTEDDECLINED . Điều này cho chúng ta biết rằng có một mối quan hệ nhiều-nhiều giữa các trạng thái và kết quả. Điều này thường đúng với các trạng thái, kết quả và vòng loại khác.

Vì vậy, ở cấp độ khái niệm, đây là những gì đang thực sự diễn ra với siêu dữ liệu của chúng tôi:

Nếu bạn chuyển đổi mô hình này sang thế giới vật lý bằng cách sử dụng phương pháp tiếp cận tiêu chuẩn, bạn sẽ có các bảng được gọi là PROCESS , STATE , OUTCOMEQUALIFIER; bạn cũng cần phải có bảng trung gian giữa chúng - PROCESS_STATE , STATE_OUTCOMEOUTCOME_QUALIFIER - để giải quyết các mối quan hệ nhiều-nhiều . Điều này làm phức tạp thiết kế.

Mặc dù phải duy trì hệ thống phân cấp hợp lý của các cấp (quá trình → trạng thái → kết quả → vòng loại), có một cách đơn giản hơn để tổ chức siêu dữ liệu của chúng tôi một cách vật lý.

Mẫu quy trình làm việc

Sơ đồ dưới đây xác định các thành phần chính của mô hình cơ sở dữ liệu quy trình làm việc:




Các bảng màu vàng ở bên trái chứa siêu dữ liệu quy trình làm việc và các bảng màu xanh lam ở bên phải chứa dữ liệu kinh doanh.

Điều đầu tiên cần chỉ ra là bất kỳ thực thể nào cũng có thể được quản lý mà không yêu cầu thay đổi lớn đối với mô hình này. YOUR_ENTITIY_TO_MANAGE bảng là một trong những quản lý quy trình làm việc. Theo ví dụ của chúng tôi, đây sẽ là JOB_APPLICATION bàn.

Tiếp theo, chúng ta chỉ cần thêm wf_state_type_process_id vào bất kỳ bảng nào chúng ta muốn quản lý. Cột này trỏ đến dòng công việc thực tế quy trình được sử dụng để quản lý thực thể. Đây không hoàn toàn là cột khóa ngoại, nhưng nó cho phép chúng tôi truy vấn nhanh WORKFLOW_STATE_TYPE cho đúng quy trình. Bảng sẽ chứa lịch sử trạng thái MANAGED_ENTITY_STATE . Một lần nữa, bạn sẽ chọn tên bảng cụ thể của riêng mình ở đây và sửa đổi nó theo yêu cầu của riêng bạn.

Siêu dữ liệu

Các cấp độ khác nhau của quy trình làm việc được xác định trong WORKFLOW_LEVEL_TYPE . Bảng này chứa những thứ sau:


Loại khóa Mô tả
QUY TRÌNH Quy trình quy trình làm việc cấp cao.
STATE Một trạng thái trong quá trình.
OUTCOME Cách một trạng thái kết thúc, kết quả của nó.
QUALIFIER Một điều kiện tùy chọn, chi tiết hơn cho một kết quả.


WORKFLOW_STATE_TYPEWORKFLOW_STATE_HIERARCHY tạo thành cấu trúc Hóa đơn nguyên vật liệu (BOM) cổ điển . Cấu trúc này, rất mô tả một hóa đơn nguyên vật liệu sản xuất thực tế, khá phổ biến trong mô hình dữ liệu. Nó có thể xác định cấu trúc phân cấp hoặc được áp dụng cho nhiều trường hợp đệ quy. Chúng tôi sẽ tận dụng nó ở đây để xác định hệ thống phân cấp hợp lý của chúng tôi về các quy trình, trạng thái, kết quả và các tiêu chí định tính tùy chọn.

Trước khi có thể xác định hệ thống phân cấp, chúng ta cần xác định các thành phần riêng lẻ. Đây là những khối xây dựng cơ bản của chúng tôi. Tôi chỉ tham khảo những điều này bằng TYPE_KEY (là duy nhất) vì mục đích ngắn gọn. Đối với ví dụ của chúng tôi, chúng tôi có:


Loại cấp quy trình làm việc Loại trạng thái dòng công việc. Khóa loại
OUTCOME ĐÃ ĐƯỢC CHUYỂN
OUTCOME THẤT BẠI
OUTCOME ĐƯỢC CHẤP NHẬN
OUTCOME ĐÃ TỪ CHỐI
OUTCOME CANDIDATE_CANCELLED
OUTCOME EMPLOYER_CANCELLED
OUTCOME BỊ TỪ CHỐI
OUTCOME EMPLOYER_WITHDRAWN
OUTCOME NO_SHOW
OUTCOME ĐÃ CÓ
OUTCOME NOT_HIRED
STATE APPLICATION_RECEIVED
STATE APPLICATION_REVIEW
STATE INVITED_TO_INTERVIEW
STATE PHỎNG VẤN
STATE TEST_APTITUDE
STATE XEMK_REFERENCES
STATE MAKE_OFFER
STATE APPLICATION_CLOSED
QUY TRÌNH STANDARD_JOB_APPLICATION
QUY TRÌNH TECHNICAL_JOB_APPLICATION


Bây giờ chúng ta có thể bắt đầu xác định hệ thống phân cấp của mình. Đây là nơi chúng tôi lấy các khối xây dựng của mình và xác định cấu trúc của chúng tôi. Đối với mỗi trạng thái, chúng tôi xác định các kết quả có thể xảy ra. Trên thực tế, một quy tắc của hệ thống quy trình làm việc này là mỗi trạng thái phải kết thúc với kết quả:


Loại chính - STATES Loại con - OUTCOMES
APPLICATION_RECEIVED ĐƯỢC CHẤP NHẬN
APPLICATION_RECEIVED BỊ TỪ CHỐI
APPLICATION_REVIEW ĐÃ ĐƯỢC CHUYỂN
APPLICATION_REVIEW THẤT BẠI
INVITED_TO_INTERVIEW ĐƯỢC CHẤP NHẬN
INVITED_TO_INTERVIEW ĐÃ TỪ CHỐI
PHỎNG VẤN ĐÃ ĐƯỢC CHUYỂN
PHỎNG VẤN THẤT BẠI
PHỎNG VẤN CANDIDATE_CANCELLED
PHỎNG VẤN NO_SHOW
MAKE_OFFER ĐƯỢC CHẤP NHẬN
MAKE_OFFER ĐÃ TỪ CHỐI
XEMK_REFERENCES ĐÃ ĐƯỢC CHUYỂN
XEMK_REFERENCES THẤT BẠI
APPLICATION_CLOSED ĐÃ CÓ
APPLICATION_CLOSED NOT_HIRED
TEST_APTITUDE ĐÃ ĐƯỢC CHUYỂN
TEST_APTITUDE THẤT BẠI


Các quy trình của chúng tôi chỉ đơn giản là một tập hợp các trạng thái mà mỗi trạng thái tồn tại trong một khoảng thời gian. Trong bảng dưới đây, chúng được trình bày theo thứ tự logic, nhưng điều này không xác định thứ tự xử lý thực tế.


Loại chính - QUY TRÌNH Loại con - STATES
STANDARD_JOB_APPLICATION APPLICATION_RECEIVED
STANDARD_JOB_APPLICATION APPLICATION_REVIEW
STANDARD_JOB_APPLICATION INVITED_TO_INTERVIEW
STANDARD_JOB_APPLICATION PHỎNG VẤN
STANDARD_JOB_APPLICATION MAKE_OFFER
STANDARD_JOB_APPLICATION XEMK_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 PHỎNG VẤN
TECHNICAL_JOB_APPLICATION MAKE_OFFER
TECHNICAL_JOB_APPLICATION XEMK_REFERENCES
TECHNICAL_JOB_APPLICATION APPLICATION_CLOSED


Có một điểm quan trọng cần thực hiện liên quan đến hệ thống phân cấp BOM. Cũng giống như một bảng nguyên vật liệu xác định các cụm và cụm phụ cho đến các thành phần nhỏ nhất, chúng ta có một cách sắp xếp tương tự trong hệ thống phân cấp của mình. Điều này có nghĩa là chúng ta có thể sử dụng lại các 'tập hợp' và 'tập hợp con'.

Ví dụ:Cả STANDARD_JOB_APPLICATIONTECHNICAL_JOB_APPLICATION quy trình INTERVIEW trạng thái . Đến lượt INTERVIEW trạng thái PASSED , FAILED , CANDIDATE_CANCELLEDNO_SHOW kết quả được xác định cho nó.

Khi bạn sử dụng một trạng thái trong một quy trình, bạn sẽ tự động nhận được kết quả con của nó với nó vì nó đã là một hợp ngữ. Điều này có nghĩa là các kết quả giống nhau tồn tại cho cả hai loại đơn xin việc tại INTERVIEW sân khấu. Nếu bạn muốn có các kết quả phỏng vấn khác nhau cho các loại đơn xin việc khác nhau, bạn cần phải xác định, chẳng hạn, TECHNICAL_INTERVIEWSTANDARD_INTERVIEW nói rằng mỗi người có kết quả cụ thể của riêng mình.

Trong ví dụ này, điểm khác biệt duy nhất giữa hai loại đơn xin việc là đơn xin việc kỹ thuật bao gồm một bài kiểm tra năng khiếu.

Trước khi bắt đầu

Phần 1 của bài viết gồm hai phần này đã giới thiệu mẫu cơ sở dữ liệu dòng công việc. Nó đã chỉ ra cách bạn có thể kết hợp nó để quản lý vòng đời của bất kỳ thực thể nào trong cơ sở dữ liệu của bạn.

Phần 2 sẽ chỉ cho bạn cách xác định quy trình làm việc thực tế sử dụng các bảng cấu hình bổ sung. Đây là nơi người dùng sẽ được trình bày các bước tiếp theo được phép. Chúng tôi cũng sẽ chứng minh một kỹ thuật để giải quyết vấn đề tái sử dụng nghiêm ngặt 'tập hợp' và 'tập hợp con' trong 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. Kiếm tiền với Nội dung không sử dụng:Mô hình Dữ liệu Nền kinh tế Chia sẻ

  2. Tham số hóa đơn giản và các kế hoạch tầm thường - Phần 3

  3. Cách định dạng ngày trong T-SQL

  4. Giới thiệu về Azure Serverless

  5. Cách tính căn bậc hai trong SQL