Biểu diễn một cấu trúc CSDL quan hệ sang lược đồ quan hệ:

Một phần của tài liệu Xây dựng chương trình hỗ trợ thiết kế cơ sở dữ liệu (Trang 49 - 52)

Chương 3 CÀI ĐẶT MỘT SỐ THUẬT TOÁN

2.Biểu diễn một cấu trúc CSDL quan hệ sang lược đồ quan hệ:

Ngơ Vũ Bình Tâm MSSV: 02ĐHTH197 Bước 1:

Biến C thành phân rã đồng nhất: • Qi, Qj có khóa là Ki, Kj.

Nếu Ki ↔ Kj thì gộp Qi, Qj lại thành 1 quan hệ.

• ∀ Qi, nếu Q+I có chứa 1 khóa Kj của Qj thì phải chứa tất cả các khóa

của của Qj. Bước 2:

Tạo nút và quan hệ nút:

Mỗi quan hệ Qi là một nút Ni. Bước 3:

Tạo nút bản lề và quan hệ nút bản lề (các thuộc tính xuấ hiện trên nhiều quan hệ):

∀ Qi, Qj: Qij = Qi ∩ Qj. Chừng nào: Q+ij ≠ ∅ thì:

• Xác định tất cả các khóa của Qij (ký hiệu KQ+ij)

• Nếu !∃ Qh ∈ C sao cho 1 khóa của Qh là một khóa của Qij thì tạo 1 nút bản lề Nbl với quan hệ Qbl = KQ+

ij

• Ngược lại: tính lại thuộc tính : Q+ij = Q+ij - KQ+ ij

Bước 4:

Tạo cung và quan hệ cung: chỉ tạo số khung tối thiểu xuất phát từ 1 nút. ∀ Ni ứng với quan hệ Qi, xác định:

• PTH (Ni) = {Nj với Qj sao cho Q+i ⊃ KQ+j}

• PTH-thừa (Ni) = {Nj ∈ PTH (Ni) : ∃ Nh ∈ PTH (Ni) với Qh sao cho KQ+h ⊃ KQ+j}

• Lồng khóa (Ni) = {Nj với Qj sao cho KQ+i ⊃ KQ+j}

• Lồng khóa thừa (Ni) = {Nj ∈ Lồng khóa (Ni) : ∃ Nh ∈ Lồng khóa(Ni) với Qh sao cho KQ+h ⊃ KQ+j}

• Cung (Ni) = { (PTH (Ni) - PTH-thừa (Ni)) ∪ (Lồng khóa (Ni) - Lồng khóa thừa (Ni))}

• Tạo 1 cung có hướng cij từ Ni → Nj. • Qij = Qi [KQ+i ∪ KQ+j]. Bước 5: Hủy những nút bản lề thừa: ∀ Nk sao cho: • Qk có 1 khóa duy nhất là Kk.

• Khơng có thuộc tính nào khác ngồi khóa • Chỉ có một cung vào Nk xuất phát từ nút Ni Thì :

• Nhập Nk vào Ni • Hủy cung cik. Bước 6:

Mịn hóa các quan hệ: ∀ Ni với Qi thì:

∀ Nj ∈ Cung (Ni) với Qj thì:

Hủy khỏi Q+i những thuộc tính khóa của Qj mà khơng phải là

thuộc tính khóa của Qi. Bước 7:

Tạo cung vơ hướng: nếu tồn những cung có hướng thì khơng làm bước này.

∀ Nk sao cho:

• Q+k = KQ+k (Qk khơng có thuộc tính khơng khóa)

• Chỉ có 2 cung ra khỏi Nk (khơng có cung vào), đến Ni, Nj với Qi, Qj sao cho KQk = KQi ∪ KQj. (adsbygoogle = window.adsbygoogle || []).push({});

Thì:

• Tạo 1 cung vơ hướng nối Ni, Nj với Qij = Qk. • Hủy nút Nk.

• Hủy 2 cung xuất phát từ Nk. Kết thúc.

Ngơ Vũ Bình Tâm MSSV: 02ĐHTH197

Một phần của tài liệu Xây dựng chương trình hỗ trợ thiết kế cơ sở dữ liệu (Trang 49 - 52)