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ó.
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ộtpb_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
Mục lục
Chương trình học
- Giới thiệu, cài đặt môi trường thực hành 1
- Tổng quan, khái niệm về database 2
-
Các lệnh tạo cấu trúc (schema database)
7
- Mô hình thực thể ER của cơ sở dữ liệu (database) NetaShop #2448
- Tạo cơ sở dữ liệu (database) NetaShop - Sử dụng HeidiSQL #8587
- Tạo bảng (table) Danh mục phẳng - Sử dụng HeidiSQL #8582
- Tạo bảng (table) Danh mục có liên kết khóa ngoại (có quan hệ) - Sử dụng HeidiSQL #8597
- Tạo bảng (table) theo quan hệ Nhiều - Nhiều (N-N) - Sử dụng HeidiSQL #8619
- Tạo bảng (table) có Quan hệ Tự thân (self foreign key) - Sử dụng HeidiSQL #8664
- Cơ sở dữ liệu mẫu salomon #11820
- Các lệnh cập nhật dữ liệu (Insert - Update - Delete) 3
-
Các lệnh truy vấn dữ liệu (query data)
6
- Câu lệnh Truy vấn dữ liệu SELECT Đơn giản #2666
- Câu lệnh Truy vấn dữ liệu SELECT với bộ lọc dữ liệu WHERE #2668
- Câu lệnh Truy vấn dữ liệu SELECT với sắp xếp dữ liệu ORDER BY #2669
- Câu lệnh Truy vấn dữ liệu SELECT với mệnh đề giới hạn dữ liệu LIMIT OFFSET #8693
- Tìm hiểu cơ chế phân trang (Pagination) và cách viết câu lệnh truy vấn dữ liệu SELECT áp dụng cơ chế phân trang (Pagination) với LIMIT OFFSET #12249
- Bài tập Truy vấn CSDL #2457
- Các lệnh truy vấn dữ liệu (query data) - Nâng cao 5
- Bài tập Tổng hợp 1
-
Phân tích, thiết kế Hệ thống
8
- Các mối quan hệ giữa các Thực thể (Entity) #8596
- Bài tập thiết kế Cơ sơ dữ liệu quản lý Nhân viên và Phòng ban #8600
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Giảng viên và Sinh viên #8601
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Chấm công Tiền lương #8620
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Nhân sự #8629
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Bán hàng Thương mại điện tử (Có quản lý Nhập, Xuất, Kho hàng) #9352
- Kho sách, nguồn tài liệu tham khảo Cơ sở dữ liệu MySQL #9001
- Plugin tự động sinh tài liệu mô tả cấu trúc của các bảng cho MySQL Workbench #9356
- Quản trị người dùng và cấp quyền trong MySQL 1
- Tham khảo 1
Các bài học
Bài học trước Bài học tiếp theo
Chương trình học
Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...Chương trình học
- Giới thiệu, cài đặt môi trường thực hành 1
- Tổng quan, khái niệm về database 2
-
Các lệnh tạo cấu trúc (schema database)
7
- Mô hình thực thể ER của cơ sở dữ liệu (database) NetaShop #2448
- Tạo cơ sở dữ liệu (database) NetaShop - Sử dụng HeidiSQL #8587
- Tạo bảng (table) Danh mục phẳng - Sử dụng HeidiSQL #8582
- Tạo bảng (table) Danh mục có liên kết khóa ngoại (có quan hệ) - Sử dụng HeidiSQL #8597
- Tạo bảng (table) theo quan hệ Nhiều - Nhiều (N-N) - Sử dụng HeidiSQL #8619
- Tạo bảng (table) có Quan hệ Tự thân (self foreign key) - Sử dụng HeidiSQL #8664
- Cơ sở dữ liệu mẫu salomon #11820
- Các lệnh cập nhật dữ liệu (Insert - Update - Delete) 3
-
Các lệnh truy vấn dữ liệu (query data)
6
- Câu lệnh Truy vấn dữ liệu SELECT Đơn giản #2666
- Câu lệnh Truy vấn dữ liệu SELECT với bộ lọc dữ liệu WHERE #2668
- Câu lệnh Truy vấn dữ liệu SELECT với sắp xếp dữ liệu ORDER BY #2669
- Câu lệnh Truy vấn dữ liệu SELECT với mệnh đề giới hạn dữ liệu LIMIT OFFSET #8693
- Tìm hiểu cơ chế phân trang (Pagination) và cách viết câu lệnh truy vấn dữ liệu SELECT áp dụng cơ chế phân trang (Pagination) với LIMIT OFFSET #12249
- Bài tập Truy vấn CSDL #2457
- Các lệnh truy vấn dữ liệu (query data) - Nâng cao 5
- Bài tập Tổng hợp 1
-
Phân tích, thiết kế Hệ thống
8
- Các mối quan hệ giữa các Thực thể (Entity) #8596
- Bài tập thiết kế Cơ sơ dữ liệu quản lý Nhân viên và Phòng ban #8600
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Giảng viên và Sinh viên #8601
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Chấm công Tiền lương #8620
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Nhân sự #8629
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Bán hàng Thương mại điện tử (Có quản lý Nhập, Xuất, Kho hàng) #9352
- Kho sách, nguồn tài liệu tham khảo Cơ sở dữ liệu MySQL #9001
- Plugin tự động sinh tài liệu mô tả cấu trúc của các bảng cho MySQL Workbench #9356
- Quản trị người dùng và cấp quyền trong MySQL 1
- Tham khảo 1
Bài học trước Bài học tiếp theo
Menu Tiện ích
Menu Hướng dẫn Học tập
❤🧡💛💚💙💜 Học là phải THỰC HÀNH ❤🧡💛💚💙💜
Thực hiện các bước tuần tự theo nội dung Bài học nhé!