Quan hệ Tự thân (Self reference)

Thường dùng để mô tả các mối quan hệ Ràng buộc Phân cấp / Phụ thuộc / Trực thuộc giữa 1 Thực thể đến 1 Thực thể Cha của nó. Một số ví dụ thường gặp:
  • Cần thiết kế CSDL lưu trữ dạng Phân cấp Phòng Ban.
  • Cần thiết kế CSDL lưu trữ dạng Phân cấp Sếp trực thuộc của Nhân viên là ai?
  • ...

Các bước thiết kế Quan hệ Tự thân (Self reference)

Step 1: Xem xét dữ liệu cần thiết kế ngoài thực tế

Ví dụ: Ta có Mô hình Phân cấp giữa các Phòng ban trong Sơ đồ Tổ chức của công ty NenTang như sau:
  • 1 Phòng ban có thể có một hoặc nhiều Phòng trực thuộc nó (tức là có thể có một hoặc nhiều Phòng Con)
  • 1 Phòng ban có thể có một Phòng ban (Cha) dùng để Quản lý nó.
Mô hình Sơ đồ phân cấp cụ thể như sau:

Step 2: Xác định cấp (Level) cho mô hình Phân cấp

Dựa theo Mô hình Sơ đồ Tổ chức Phòng ban của Công ty NenTang như trên, chúng ta có thể xác định Cấp (Level) như sau:

Step 3: Xác định cấp (Level) cho mô hình Phân cấp

Sau khi xác định Cấp (Level), chúng ta có thể vẽ sơ đồ ER sử dụng mối Quan hệ Tự thân (self reference) như sau: Lưu ý:
  • Cột (column) dùng để chứa ID Cha (Parent ID) phải được cho phép nhập liệu rỗng (Allow NULL).
  • Dữ liệu phải được Nhập theo Thứ tự Cấp (Level), tức là:
    • Nhập liệu các dòng Level 1 trước -> sau đó đến nhập liệu các dòng Level 2 -> Level 3 -> ...
  • Các dòng (records) có Level 1 trong table phong_ban sẽ là nút Gốc (Root node), sẽ có dữ liệu của cột pb_quan_ly_id = null

Tạo cấu trúc (schema) table phong_ban trong HeidiSQL

Nhập dữ liệu (data) table phong_ban trong HeidiSQL

Script tạo table phong_ban ví dụ tham khảo: https://github.com/kellyfire611/learning.nentang.vn-mysql/blob/master/mysql/db/nentang_learning_mysql_example.sql