a. Ràng buộc miền
Ràng buộc miền là ràng buộc trên miền của các thuộc tính khi miền bị giới hạn trong một tập giá trị xác định.
Ví dụ: ràng buộc miền của thuộc tính giới tính và hôn nhân sau đây:
<!ATTLIST author gender (male| female)# REQUIRED
Maried (yes|no) # IMPLIED>
Khi chuyển sang lược đồ quan hệ, ta chuyển ràng buộc này như sau:
CREATE DOMAIN gender VARCHAR (10) CHECK (VALUE IN)
(“male”, “female”))
CREATE DOMAIN married VARCHAR (10) CHECK (VALUE IN)
(“yes”, “no”))
Đối với thuộc tính bắt buộc có từ khoá REQUIRED, ta cần phải chuyển cả ràng buộc này sang lược đồ quan hệ thông qua khái niệm “X ” (thuộc tính X không nhận giá trị null)
Ví dụ <!ELEMENT person EMPTY>
<!ATTLIST person fn CDATA # IMPLIED In CDATA# REQUIRED>
Để giải quyết ràng buộc miền loại này ta dùng câu lệnh NOT NULL trong SQL như sau:
CREATE TABLE person (fn VARCHAR (20), In VARCHARR(20) NOT NULL)
b. Ràng buộc lực lƣợng:
Trong khai báo DTD có 4 dạng quan hệ giữa một phần từ và các phần tử con của nó như sau:
<! ELEMENT article (title, author+, refereance*, price?)>
(0,1): Phần tử không có hoặc có một phần tử con (price).
(1,1): Phần tử có một và chỉ một phần tử con (title).
(0,N): Phần tử có thể không có hoặc có nhiều phần tử con (refereance).
(1,N): Một phần tử có thể có một hoặc nhiều phần tử con (author).
Từ những quan hệ lực lượng này, ta xây dựng ba kiểu ràng buộc chính sau:
- Phần tử con không mang giá trị rỗng: X . Ràng buộc này được thực hiện bởi mệnh đề NULL hoặc NOT NULL.
- Phần tử không chứa nhiều hơn một phần tử con gọi là ràng buộc đơn và cũng là một loại của phụ thuộc sinh đồng nhất.
- Phần tử đã cho không chứa phần tử con, đây là phụ thuộc sinh bộ.
c. Phụ thuộc bao hàm (IDS – Inclusion dependencies)
Phụ thuộc bao hàm đảm bảo thống nhất về trị giữa các mảnh và được tổng quát hoá bằng khái niệm tham chiếu toàn vẹn.
Dạng phổ biến của phụ thuộc bao hàm trong DTD như sau: Nếu phần tử Y là con của phần tử X, thì Y phải được bao hàm trong X, (Y X). Xét VD 2.9, phần tử conf có 4 phần tử con, phụ thuộc bao hàm sau đây có thể được tìm thấy sao cho conf không mang giá trị NULL: { conf. Title conf, conf. Date Conf, conf.editor conf, conf.paper conf}. Một dạng khác của Ids có thể được tìm thấy trong phần định nghĩa thuộc tính của DTD là từ khoá IDREF. Xét contact và editor trong ví dụ sau:
Ví dụ: 2.11
<! ATTLIST person id ID # REQUIRED>
<!ELEMENT contact EMPTY>
<!ATTLIST contact aid IDREF # REQUIRED>
<!ELEMENT editor (person*)>
<!ATTLIST editor editor IDREFS # IMPLIED>
DTD bắt buộc thuộc tính aid của phần tử contact chỉ tham chiếu đến thuộc tính id của phần tử person và thuộc tính eids của phần tử editor chỉ tham chiếu đến thuộc tính id cuat phần tử person. Vì vậy phụ thuộc bao hàm có thể được xây dựng như sau: { editor. Eids person. Id, contact. Aid person. Id}. Đồng thời theo phu thuộc bao hàm, nếu thuộc tính đang được tham chiếu là khoá chính thì cách tốt nhất là nên đặt phụ thuộc bao hàm là khoá ngoại. Ngược lại cần sử dụng điều kiện CHECK, ASSRTION hay TRIGGERS của SQL.
d. Phụ thuộc sinh đồng nhất (EGDs – EQUALITY – Generating Dependencies).
Phụ thuộc sinh đồng nhất (EGDS) là một dạng phụ thuộc thoả tính chất sau: giả sử 1 phần tử kiểu X có phần tử con kiểu Y thoả mãn ràng buộc đơn. Nếu x X có hai con Y1,Y2Y thì Y1= Y2
Trong đó, ràng buộc đơn buộc mỗi phần tử có nhiều nhất một phần tử con.
Theo khái niệm của CSDL thì đây là phụ thuộc hàm X xác định Y (X- >Y). VD: 2.9 có EGDs {conf -> conf. Title, conf-> conf. Date}. Ta sử dụng cấu trúc UNIQUE trong SQL để biểu diễn ràng buộc EDGs. Một cách tổng quát, EDGs chỉ xảy ra đối với ánh xạ (0,1) và (1,1).
Phụ thuộc sinh bộ dùng ký hiệu “->>” và có hai dạng thường xuất hiện trong DTD là ràng buộc con (child constraint) và ràng buộc cha (parent constraint).
1). Ràng buộc con: “Parent ->> Child” nghĩa là mỗi phần tử kiểu Parent phải có ít nhất một phần tử con kiểu Child. Đây là các ánh xạ kiểu (1,1) và (1N) trong ràng buộc lực lượng. Ví dụ phần tử conf chứa các phần tử con là title và date nên ràng buộc con như sau: Conf ->> { title, date}.
2) Ràng buộc cha: “Child ->> Parent” nghĩa là mỗi phần tử kiểu Child phải có một phần tử cha kiểu Parent. Theo đặc tả XML, khi phần tử gốc không được xác định bởi <! DOCTYPE root> thì tài liệu XML có thể đặt gốc tại bất kỳ cấp phần tử nào và không cần phải xác định phần tử cha của nó. Trong ví dụ 2.9, phần tử editor và date có phần tử cha là conf. Nếu tất cả các tài liệu XML bắt đầu tại cấp phần tử conf nhiều hơn tại cấp phần tử con editor và date thì có thể áp dụng ràng buộc cha là {editor, date}->> conf, nhưng không có ràng buộc title ->> conf bởi vì phần tử title có thể là phần tử con của conf và cũng có thể là con của phần tử paper.