Hai khoá ngoại giữa ba bảng

Một phần của tài liệu Chuyển đổi dữ liệu giữa XML và cơ sở dữ liệu quan hệ (Trang 82)

Xét 3 bảng s, t1, t2 lần lượt có các cột X, Y1, Y2 sao cho s[] t1 [1] và s[]t2 [2]. Trong đó , X và không rỗng (non-nullable), 1 t1,

2 2 t

 . Nếu áp dụng quy tắc ánh xạ trong trường hợp một khóa ngoại cho hai bảng như phần 2.2.3.1 cho từng nhóm một thì chúng sẽ kết nối với nhau tuỳ thuộc vào tính duy nhất hay không duy nhất của ,: (1) M(t1) = {Y1, s? }, hoặc M(t1) {Y1, s*}; (2) M(t2) = {Y2, s? }, hoặc M(t2) = {Y2, s* }.

Ta nhận thấy, sự chuyển động ở trên là dư thừa, theo lý thuyết CSDL gọi là cập nhật dự thường đối với s. Để tránh sự di thường này thì một trong hai ràng buộc khoá ngoại phải sử dụng phụ thuộc bao hàm (INDs0 hoặc thuộc tính IDREF. Ví dụ, giả sử dàng buộc khoá ngoại đầu tiên là s[] t1[1] được biểu thị như sau: M(t1) {Y1, s*} và M(s)= {X-}, thì ràng buộc khoá ngoại thứ hai là s[]t2[2] có thể được biểu diễn bằng thuộc tính IDREF như sau:

A(t2) = {ID_t2) P(ID_t2) = (ID,  ,,) A(s) = {Ref_t2) } P(Ref_t2) = IDREF,  , ,) M(t2) = (Y2) M(s) = (X-)

Chẳng hạn biểu diễn khoá cũ và khoá mới của s tương ứng là ks và ks' thì ks' được xác định như sau:

1) Nếu ks =  thì ks' = ks

2) Nếu ks   thì ks' = (ks - )Ref_t2

Ví dụ 2.15: Xét lại hai quan hệ SinhVien(tenSV, gioiTinh, nguuoiHD, khoaHoc GiaoVien(tenGV, tuoi). Ta xét thêm quan hệ thứ ba là

Loop(tenLop, phong) có khoá ngoại là SinhVien[khoaHoc]Lop[tenLop].

Áp dụng quy tắc trên, lược đồ được ánh xạ sang lược đồ XML như sau:

<!ELEMENT GiaoVien (tenGV, tuoi, SinhVien*)>

<!ELEMENT SinhVien(ten SV, gioiTinh)>

<!ATTLIST SinhVien Ref_Lop IDREF>

<!ELEMENT Lop (tenLop, phong)>

<!ATTLIST Lop ID_Lop ID>

Ta thấy có hai thuộc tính mới được thêm vào là Ref_Lop kiểu IDREF và

ID_Lop kiểu ID. Lúc này, khoá mới của SinhVien {tenSV, Ref_Lopkey

SinhVien}nhưng ràng buộc này không mô tả được trong DTD.

Một phần của tài liệu Chuyển đổi dữ liệu giữa XML và cơ sở dữ liệu quan hệ (Trang 82)