– Biểu thức ĐSQH được xem như một quan hệ không có tên – Kết quả thực hiện các phép toán trên cũng là các quan hệ, do đó có thể kết hợp giữa các phép toán này để tạo nên các quan hệ mới!
Trang 1Cơ sở dữ liệu
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Giảng viên: ThS Nguyễn Thị Kim Phụng Email: phungntk@uit.edu.vn
Trang 2Nội dung
1 Đại số quan hệ
2 Ngôn ngữ truy vấn SQL 3.Ràng buộc toàn vẹn
Trang 31 Đại số quan hệ
Trang 41 ĐẠI SỐ QUAN HỆ
Trang 51 ĐSQH - Các phép toán ĐSQH, biểu thức ĐSQH
• Có năm phép toán cơ bản:
– Chọn ( ) Chọn ra các dòng (bộ) trong quan hệ thỏa điều kiện chọn
– Chiếu ( ) Chọn ra một số cột.
– Tích Descartes ( ) Kết hai quan hệ lại với nhau
– Trừ ( ) Chứa các bộ của quan hệ 1 nhưng không nằm trong quan hệ 2.
– Hội ( ) Chứa các bộ của quan hệ 1 và các bộ của quan hệ 2
• Các phép toán khác:
– Giao ( ∩ ), kết ( ), chia ( / hay ÷), đổi tên ( ): là các phép
toán không cơ bản (được suy từ 5 phép toán trên, trừ phép đổi tên)
• Biểu thức đại số quan hệ:
– Là một biểu thức gồm các phép toán ĐSQH
– Biểu thức ĐSQH được xem như một quan hệ (không có tên)
– Kết quả thực hiện các phép toán trên cũng là các quan hệ, do đó có thể kết hợp giữa các phép toán này để tạo nên các quan hệ mới!
Trang 6Cú pháp : (Quan hệ: điều kiện chọn)
Câu hỏi 1:
Phai=‘Nam’
(NhanVien: Phai=‘Nam’)NHANVIEN
MANV HOTEN NTNS PHAI
NV001 Nguyễn Tấn Đạt 10/12/1970 Nam
NV002 Trần Đông Anh 01/08/1981 Nữ
NV003 Lý Phước Mẫn 02/04/1969 Nam
NHANVIEN MANV HOTEN NTNS PHAI NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NV003 Lý Phước Mẫn 02/04/1969 Nam
Kết quả phép chọn
Câu hỏi 1: Cho biết các nhân viên nam ?
Trang 7NV001 Nguyễn Tấn Đạt 10/12/1970 Nam
NV002 Trần Đông Anh 01/08/1981 Nữ
NV003 Lý Phước Mẫn 02/04/1969 Nam
NHANVIEN MANV HOTEN NTNS PHAI
Kết quả phép chọn
Câu hỏi 2: Cho biết các nhân viên nam sinh sau năm 1975 ?
(không có bộ nào thỏa)
Câu hỏi 2:
Câu hỏi 2:
Trang 81 ĐSQH - Phép chiếu
Biểu diễn cách 1 : Cú pháp : Cột1, cột2, cột 3, ….(Quan hệ)
Ngoài ra, có thể biểu diễn cách 2:
(NhanVien)Câu hỏi 3 :
NV001 Nguyễn Tấn Đạt 10/12/1970 Nam
NV002 Trần Đông Anh 01/08/1981 Nữ
NV003 Lý Phước Mẫn 02/04/1969 Nam
Kết quả phép chiếu
Câu hỏi 3: Cho biết họ tên nhân viên và giới tính ?
π
π π
NHANVIEN HOTEN PHAI Nguyễn Tấn Đạt Nam Trần Đông Anh Nữ
Lý Phước Mẫn Nam
Trang 9NV001 Nguyễn Tấn Đạt 10/12/1970 Nam
NV002 Trần Đông Anh 01/08/1981 Nữ
NV003 Lý Phước Mẫn 02/04/1969 Nam
Kết quả phép chiếu
Câu hỏi 4: Cho biết họ tên và ngày tháng năm sinh của các nhân viên nam?
π
σ (NhanVien)
(Phai=‘Nam’)
Bước 1: Q Kết quả phép chọn (còn gọi là biểu thức
ĐSQH) được đổi tên thành quan hệ Q
HOTEN, NTNS
NHANVIEN HOTEN NTNS Nguyễn Tấn Đạt 10/12/1970
Lý Phước Mẫn 02/04/1969
Trang 1002/04/1969 01/08/1981 10/12/1970
NTNS HOTEN
MANV
Nguyễn Tấn Ðạt NV001
Lý Phước Mẫn NV003
Trần Ðông Anh NV002
NHANVIEN
PHAI PHONG
DH NC NC
NHANVIEN X PHONGBAN
NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NC NC Nghiên cứu NV001
NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NC DH Điều hành NV002
NV002 Trần Đông Anh 01/08/1981 Nữ DH NC Nghiên cứu NV001
NV002 Trần Đông Anh 01/08/1981 Nữ DH DH Điều hành NV002
NV003 Lý Phước Mẫn 02/04/1969 Nam NC NC Nghiên cứu NV001
NV003 Lý Phước Mẫn 02/04/1969 Nam NC DH Điều hành NV002
Trang 111 ĐSQH - Phép kết
Câu hỏi 6: Cho biết mã nhân viên, họ tên và tên phòng mà n/v trực thuộc.
((NHANVIEN X PHONGBAN) : NHANVIEN.PHONG=PHONGBAN.MAPH)
NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NC NC Nghiên cứu NV001 NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NC DH Điều hành NV002 NV002 Trần Đông Anh 01/08/1981 Nữ DH NC Nghiên cứu NV001 NV002 Trần Đông Anh 01/08/1981 Nữ DH DH Điều hành NV002 NV003 Lý Phước Mẫn 02/04/1969 Nam NC NC Nghiên cứu NV001 NV003 Lý Phước Mẫn 02/04/1969 Nam NC DH Điều hành NV002
-Đặt vấn đề: trở lại ví dụ 5, ta thấy nếu thực hiện phép tích Decartes
NHANVIEN X PHONGBAN thì mỗi nhân viên đều thuộc 2 phòng (vì có tổng cộng là 2 phòng ban, nếu có 3, 4,…phòng ban thì số dòng cho một nhân viên trong NHANVIEN X PHONGBAN sẽ là 3, 4, dòng
- Thực tế mỗi nhân viên chỉ thuộc duy nhất 1 phòng ban do ràng buộc khóa ngoại (PHONG), do đó để lấy được giá trị MAPH đúng của mỗi nhân viên phải có điều kiện chọn:
NHANVIEN.PHONG = PHONGBAN.MAPH
biểu diễn phép chọn theo cách
2
(Theta-Join)
Trang 12* Phép kết được định nghĩa là phép tích Decartes và có điều kiện
chọn liên quan đến các thuộc tính giữa 2 quan hệ, cú pháp :
Quan-hệ-2
(Phép kết với đk tổng quát được gọi là θ -kết, θ có thể là ≠ , =, >, <, >=, <= Nếu đk kết là phép so sánh = thì gọi là kết bằng)
Câu hỏi 6 viết lại cách 1:
πMANV,HOTEN,TENPH ( NHANVIEN PHONG=MAPH PHONGBAN )
Câu hỏi 6 viết lại cách 2:
(NHANVIEN PHONG=MAPH PHONGBAN) [MANV,HOTEN,TENPH]
Điều kiện kết
(Theta-Join)
Trang 131 ĐSQH - kết bằng, kết tự nhiên
( Kết bằng )
NHANVIEN PHONG=MAPH PHONGBAN
Nếu PHONG trong NHANVIEN được đổi thành MAPH thì
ta bỏ đi 1 cột MAPH thay vì phải để MAPH=MAPH, lúc
này gọi là phép kết tự nhiên (natural-join)
Trang 14Câu hỏi 7: Tìm họ tên các trưởng phòng của từng phòng ?
πHOTEN, TENPH ( PHONGBAN TRPH=MANV NHANVIEN )
Câu hỏi 8: Cho lược đồ CSDL như sau:
TAIXE (MaTX, HoTen, NgaySinh, GioiTinh, DiaChi)
CHUYENDI (SoCD, MaXe, MaTX, NgayDi, NgayVe, ChieuDai, SoNguoi)
Cho biết họ tên tài xế, ngày đi, ngày về của những chuyến đi có chiều dài
>=300km, chở từ12 người trở lên trong mỗi chuyến?
πHoTen, NgayDi, NgayVe (Q MATX TAIXE )
Trang 151 ĐSQH - Phép kết ngoài (outer join)
• Mở rộng phép kết để tránh mất thông tin
• Thực hiện phép kết và sau đó thêm vào kết quả của phép kết các bộ của quan hệ mà không phù hợp với các bộ trong quan hệ kia.
• Có 3 loại:
– Left outer join R S
– Right outer join R S
– Full outer join R S
• Ví dụ: In ra danh sách tất cả tài xế và số chuyến đi,
mã xe mà tài xế đó lái (nếu có)
Trang 161 ĐSQH – left outer join
• TAIXE CHUYENDImatx
TAIXE MaTX Hoten
TX01 Huynh Trong Tao TX02 Nguyen Sang TX03 Le Phuoc Long TX04 Nguyen Anh Tuan
CHUYENDI SoCD MaTX MaXe
CD01 TX01 8659 CD02 TX02 7715 CD03 TX01 8659 CD04 TX03 4573
Matx Hoten SoCD Matx Maxe
TX01 Huynh Trong Tao CD01 TX01 8659
TX01 Huynh Trong Tao CD03 TX01 8659
TX02 Nguyen Sang CD02 TX02 7715
TX03 Le Phuoc Long CD04 TX03 4573
TX04 Nguyen Anh Tuan Null Null Null
{
Bộ của quan hệ TAIXE được thêm
Vào dù không phù hợp với kết quả
của quan hệ CHUYENDI
Tương tự right outer join và full outer join (lấy cả 2)
(lấy hết tất cả bộ của quan hệ bên trái)
Trang 171 ĐSQH - Phép trừ, phép hội, phép giao tập hợp
• Tất cả các phép toán này đều cần hai quan hệ đầu vào
tương thích khả hợp , nghĩa là chúng phải thoả:
– Cùng số thuộc tính Ví dụ: R và S đều có 2 thuộc tính.
– Các thuộc tính `tương ứng ’ có cùng kiểu.
R
Vuong Quyen Nguyen Tung
S
Le Nhan Vuong Quyen Bui Vu
Phép trừ: R S −
Phép hội: R S ∪ Phép giao: R S ∩
NHANVIEN (MaNV, HoTen, Phai, Luong,NTNS, Ma_NQL, MaPH)
PHANCONG (MaNV, MaDA, ThoiGian)
Trang 181 ĐSQH - Phép trừ, phép hội, phép giao tập hợp
R
Vuong Quyen Nguyen Tung
S
Le Nhan Vuong Quyen Bui Vu
∪
∩
Kết quả phép trừ Q ={Nguyen Tung}
Kết quả phép hội Q ={Vuong Quyen, Nguyen Tung, Le Nhan, Bui Vu}
Kết quả phép giao Q ={Vuong Quyen}
Trang 19Câu hỏi 9: Cho biết nhân viên không làm việc ? (Phép trừ)
Trang 201 ĐSQH - Phép chia tập hợp ( / hay ÷ )
• Phép chia (R ÷ S) cần hai quan hệ đầu vào R, S thoả:
– Tập thuộc tính của R là tập cha của tập thuộc tính S
Ví dụ: R có m thuộc tính, S có n thuộc tính : n ⊆ m
Định nghĩa:
R và S là hai quan hệ, R+ và S+ lần lượt là tập thuộc
= R+ - S+
} )
, ( , /
{ t s S t s R S
R
2 1
1 2
1
) )
((
) (
T T
T
R T
S T
R T
S R
S R
+ +
−
−
π π
Trang 211 ĐSQH - Phép chia tập hợp (/ hay ÷ )
Q= PHANCONG/DEAN
MADA
TH001 TH002 DT001
÷
Hoặc viết Q= PHANCONG DEAN
Trang 221 ĐSQH - Phép chia tập hợp (/ hay ÷ )
Mahv
HV01 HV03
CSDL Co so du lieu CTRR Cau truc roi rac THDC Tin hoc dai cuong
KETQUATHI[Mahv,Mamh] /MONHOC[Mamh]
Q=KETQUA/MONHOC
] [
] ,
[
Mamh MONHOC
MONHOC
Mamh Mahv
Trang 231 ĐSQH – Hàm tính toán trên 1 nhóm và tính toán trên nhiều nhóm (gom nhóm – group by)
• Các hàm tính toán gồm 5 hàm: avg(giá-trị), min(giá-trị), max(giá-trị), sum(giá-trị), count(giá-trị).
• Phép toán gom nhóm: (Group by)
– E là biểu thức đại số quan hệ
– Gi là thuộc tính gom nhóm (nếu không có Gi nào=> không chia nhóm (1 nhóm), ngược lại (nhiều nhóm) => hàm F sẽ tính toán trên từng nhóm nhỏ được chia bởi tập thuộc tính này)
), , (
), (
, ,
n n
G G
G ℑ
Trang 241 ĐSQH – Hàm tính toán trên 1 nhóm và tính toán trên nhiều nhóm (gom nhóm – group by)
• Điểm thi cao nhất, thấp nhất, trung bình của
), min(
Mamh )
( ), min(
),
Trang 252 Ngôn ngữ truy vấn SQL
Trang 262 NGÔN NGỮ TRUY VẤN SQL
CSDL quan hệ
English Query Language, năm 1974)
• Các chuẩn SQL
Trang 272 NGÔN NGỮ TRUY VẤN SQL, BAO GỒM:
• Ngôn ngữ định nghĩa dữ liệu (Data Definition
Language - DDL): cho phép khai báo cấu trúc bảng,
các mối quan hệ và các ràng buộc
• Ngôn ngữ thao tác dữ liệu (Data Manipulation
Language - DML): cho phép thêm, xóa, sửa dữ liệu.
• Ngôn ngữ truy vấn dữ liệu (Structured Query
Language – SQL): cho phép truy vấn dữ liệu.
• Ngôn ngữ điều khiển dữ liệu (Data Control
Language – DCL): khai báo bảo mật thông tin, cấp
quyền và thu hồi quyền khai thác trên cơ sở dữ liệu.
Trang 282.1 Ngôn ngữ định nghĩa dữ liệu
1 Lệnh tạo bảng (CREATE)
3.1.1 Cú pháp 3.1.2 Một số kiểu dữ liệu
2 Lệnh sửa cấu trúc bảng (ALTER)
3.2.1 Thêm thuộc tính 3.2.2 Sửa kiểu dữ liệu của thuộc tính 3.2.3 Xoá thuộc tính
3.2.4 Thêm ràng buộc toàn vẹn 3.2.5 Xoá ràng buộc toàn vẹn
3 Lệnh xóa bảng (DROP)
Trang 292.1 Ngôn ngữ định nghĩa dữ liệu
Cú pháp
CREATE TABLE <tên_bảng>
(
<tên_cột1> <kiểu_dữ_liệu> [not null],
<tên_cột2> <kiểu_dữ_liệu> [not null],
…
<tên_cột1> <kiểu_dữ_liệu> [not null],
khai báo khóa chính, khóa ngoại, ràng buộc )
1 Lệnh tạo bảng
Trang 30Một số kiểu dữ liệu
Chuỗi ký tự varchar(n), char(n),nvarchar(n), nchar(n)
Trang 31Lược đồ CSDL quản lý bán hàng gồm có các quan hệ sau:
KHACHHANG (MAKH, HOTEN, DCHI, SODT, NGSINH,
DOANHSO, NGDK, CMND)
NHANVIEN (MANV,HOTEN, NGVL, SODT)
SANPHAM (MASP,TENSP, DVT, NUOCSX, GIA)
HOADON (SOHD, NGHD, MAKH, MANV, TRIGIA)
CTHD (SOHD,MASP,SL)
2.1 Ngôn ngữ định nghĩa dữ liệu
Trang 32Create table KHACHHANG (
MAKH char(4) primary key, HOTEN varchar(40),
DCHI varchar(50), SODT varchar(20), NGSINH smalldatetime, DOANHSO money,
NGDK smalldatetime, CMND varchar(10) )
2.1 Ngôn ngữ định nghĩa dữ liệu
Trang 342.1 Thêm thuộc tính
ALTER TABLE tênbảng ADD têncột kiểudữliệu
– Ví dụ: thêm cột Ghi_chu vào bảng khách hàng
ALTER TABLE KHACHHANG ADD GHI_CHU varchar(20)
2.2 Sửa kiểu dữ liệu thuộc tính
ALTER TABLE tênbảng ALTER COLUMN têncột
kiểudữliệu_mới
• Lưu ý:
Không phải sửa bất kỳ kiểu dữ liệu nào cũng được
2 Sửa cấu trúc bảng
Trang 352.1 Ngôn ngữ định nghĩa dữ liệu
– Ví dụ: Sửa Cột Ghi_chu thành kiểu dữ liệu varchar(50)
ALTER TABLE KHACHHANG ALTER COLUMN GHI_CHU varchar(50)
– Nếu sửa kiểu dữ liệu của cột Ghi_chu thành varchar(5), mà trước đó đã nhập giá trị cho cột Ghi_chu có độ dài hơn 5ký
tự thì không được phép.
– Hoặc sửa từ kiểu chuỗi ký tự sang kiểu số, …
2.3 Xóa thuộc tính
ALTER TABLE tên_bảng DROP COLUMN tên_cột
– Ví dụ: xóa cột Ghi_chu trong bảng KHACHHANG
ALTER TABLE NHANVIEN DROP COLUMN Ghi_chu
Trang 362.1 Ngôn ngữ định nghĩa dữ liệu
Khoa HTTT - Đại học CNTT 36
2.4 Thêm ràng buộc toàn vẹn
ALTER TABLE <tên_bảng>
ADD CONSTRAINT
<tên_ràng_buộc>
(cột_là_khóa_chính)
Trang 372.1 Ngôn ngữ định nghĩa dữ liệu
– ALTER TABLE SANPHAM ADD CONSTRAINT
CK_GIA CHECK (GIA >=500) – ALTER TABLE KHACHHANG ADD CONSTRAINT
UQ_KH UNIQUE (CMND)
Trang 382.1 Ngôn ngữ định nghĩa dữ liệu
2.5 Xóa ràng buộc toàn vẹn
ALTER TABLE tên_bảng DROP CONSTRAINT tên_ràng_buộc
– Ví dụ:
• Alter table CTHD drop constraint FK_CT_SP
• Alter table SANPHAM drop constraint ck_gia
• Lưu ý: đối với ràng buộc khóa chính, muốn xóa
ràng buộc này phải xóa hết các ràng buộc khóa ngoại tham chiếu tới nó
Trang 392.1 Ngôn ngữ định nghĩa dữ liệu
3 Lệnh xóa bảng (DROP)
• Cú pháp
DROP TABLE tên_bảng
• Ví dụ: xóa bảng KHACHHANG.
DROP TABLE KHACHHANG
• Lưu ý: khi muốn xóa một bảng phải xóa tất
cả những khóa ngoại tham chiếu tới bảng đó trước.
Trang 402.2 Ngôn ngữ thao tác dữ liệu (DML)
• Gồm các lệnh:
1 Lệnh thêm dữ liệu (INSERT)
2 Lệnh sửa dữ liệu (UPDATE)
3 Lệnh xóa dữ liệu (DELETE)
Trang 412.2 Ngôn ngữ thao tác dữ liệu – Lệnh Insert
- SELECT * INTO tên-bảng-mới from tên-bảng-có-sẵn
- INSERT INTO bảng-tạo-trước select * from bảng-có-sẵn
Trang 422.2 Ngôn ngữ thao tác dữ liệu – Lệnh Update
• Cú pháp
SET cột_1 = giá_trị_1, cột_2 = giá_trị_2 …
[WHERE điều_kiện]
• Lưu ý: cẩn thận với các lệnh xóa và sửa, nếu không
có điều kiện ở WHERE nghĩa là xóa hoặc sửa tất cả.
• Ví dụ: Tăng giá 10% đối với những sản phẩm do
“Trung Quoc” sản xuất
UPDATE SANPHAM
SET Gia = Gia*1.1 WHERE Nuocsx=‘Trung Quoc’
Trang 432.2 Ngôn ngữ thao tác dữ liệu – Lệnh Delete
• Cú pháp
DELETE FROM tên_bảng [WHERE điều_kiện]
• Ví dụ:
– Xóa toàn bộ nhân viên
DELETE FROM NHANVIEN
– Xóa những sản phẩm do Trung Quốc sản xuất có giá thấp hơn 10000
DELETE FROM SANPHAM WHERE (Gia <10000) and (Nuocsx=‘Trung Quoc’)
Trang 442.3 NGÔN NGỮ TRUY VẤN SQL
và thao tác trên CSDL quan hệ
Câu truy vấn tổng quát:
SELECT [DISTINCT] danh_sách_cột | hàm
FROM danh sách các quan hệ (hay bảng, table)
Trang 45 Toán tử logic: AND, OR
Các phép toán: +, - ,* , /
Các hàm xử lý ngày ( DAY( ) ), tháng ( MONTH( ) ), năm
Trang 462.3 SQL
mệnh đề ORDER BY, SELECT lồng (câu SELECT lồng câu SELECT khác), SELECT gom nhóm (GROUP BY),
NHANVIEN (MaNV, HoTen, Phai, Luong,NTNS,
Ma_NQL, MaPH)
PHONGBAN (MaPH, TenPH, TRPH)
PHANCONG (MaNV, MaDA, ThoiGian)
Bài tập: Cho lược đồ CSDL “quản lý đề án công ty” như sau
Trang 47MANV HOTEN NTNS PHAI MA_NQL MaPH LUONG
001 Vuong Ngoc Quyen 22/10/1957 Nu QL 3.000.000
002 Nguyen Thanh Tung 09/01/1955 Nam 001 NC 2.500.000
003 Le Thi Nhan 18/12/1960 Nu 001 DH 2.500.000
004 Dinh Ba Tien 09/01/1968 Nam 002 NC 2.200.000
005 Bui Thuy Vu 19/07/1972 Nam 003 DH 2.200.000
006 Nguyen Manh Hung 15/09/1973 Nam 002 NC 2.000.000
007 Tran Thanh Tam 31/07/1975 Nu 002 NC 2.200.000
008 Tran Hong Minh 04/07/1976 Nu 004 NC 1.800.000
TH001 Tin hoc hoa 1 NC 2002
TH002 Tin hoc hoa 2 NC 2003
DEAN
PHONGBAN
Trang 482.3 SQL – BETWEEN, ORDER BY, IS NULL
Câu hỏi 13: Sử dụng =,>,>=,… Danh sách các nhân viên sinh trong khoảng
từ năm 1978 đến 1983?
Select MaNV, HoTen From NhanVien
where Year(NTNS)>=1978 AND Year(NTNS)<=1983
Câu hỏi 14: Sử dụng BETWEEN, ORDER BY Danh sách các nhân viên sinh trong khoảng từ năm 1978 đến 1983? Sắp xếp theo mức lương giảm dần
Select * From NhanVien where Year(NTNS) BETWEEN 1978 and
1983 ORDER BY Luong DESC
Câu hỏi 15: Sử dụng IS NULL Cho biết những nhân viên không có người quản lý trực tiếp? (không chịu sự quản lý trực tiếp của người nào)
Select MaNV, HoTen, NTNS, Ma_NQL from NhanVien where
Ma_NQL is Null
Trang 492.3 SQL - SO SÁNH IN & NOT IN
Câu hỏi 16: Sử dụng Is Not Null Cho biết những nhân viên có người quản
lý trực tiếp?Thông tin hiển thị gồm: mã nhân viên, họ tên, mã người quản lý
Select MaNV, HoTen, Ma_NQL from NhanVien
where Ma_NQL is not Null
Câu hỏi 17: Sử dụng IN (so sánh với một tập hợp giá trị cụ thể) Cho biết
họ tên nhân viên thuộc phòng ‘NC’ hoặc phòng ‘DH’?
Select DISTINCT Hoten From NhanVien where MaPH in (‘NC’,’DH’)
Câu hỏi 18: Sử dụng IN (so sánh với một tập hợp giá trị chọn từ câu
SELECT khác) Cho biết họ tên nhân viên thuộc phòng ‘NC’ hoặc phòng
‘DH’?
Select Hoten from NhanVien where MaPH in (Select MaPH from
PHONGBAN where MaPH=‘NC’ OR MaPH=‘DH’)