Hướng dẫn thực hiện dạng chuẩn 3NF

18 3.3K 6
Hướng dẫn thực hiện dạng chuẩn 3NF

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Hướng dẫn thực hiện dạng chuẩn 3NF

1 Hư ng d n th c hi n d ng chu n 3NF Tác gi : Fred Coulson Copyright © Fred Coulson 2007 (last revised November 18, 2007) This tutorial may be freely copied and distributed, providing appropriate attribution to the author is given Inquiries may be directed to http://phlonx.com/contact http://phlonx.com/resources/nf3/ Mục lục Mục lục Về dịch Giới thiệu Bài tốn: Quản lí Hóa đơn Dạng chuẩn thứ (1NF): Khơng có phần tử/nhóm phần tử lặp Dạng chuẩn thứ (2NF): Khơng có phụ thuộc hàm khơng đầy đủ vào khóa Dạng chuẩn thứ (2NF): Pha thứ II 13 Dạng chuẩn thứ (3NF): Khơng có phụ thuộc hàm vào thuộc tính khơng khóa 16 Tham khảo 18 Về dịch Ngư i d ch: Phan Anh Vũ L p ĐT12.K49 Trư ng ĐH Bách Khoa HN Email: virces931511@yahoo.com Website: http://cntt.tv Xin giành b n d ch t ng anh em l p ĐT12.K49 nói riêng, bà khoa Đi n t Vi n thông K49 trư ng ĐH Bách Khoa HN nói riêng v i l i chúc anh em thi t t môn K thu t ph n m m (thi l i t n 5k đ y) V i không ôn thi môn KTPM quan tâm bư c đ u tìm cách chu n hóa CSDL c a riêng mình, có l s tài li u b t đ u t t nh t Theo quan m c a tơi m t tutorial r t thú v , đ c p đ n nhi u khía c nh l t léo q trình chu n hóa Tuy nhiên b n d ch nhi u lí (tơi ơn thi Tư tư ng HCM l n ch ng h n) nên ch t lư ng h n ch , mong nh n đư c góp ý đ hồn thi n d n C m ơn đ i ca Fred Coulson t t b ng đ ng ý cho d ch phát tán tài li u v i l i h a s host b n d ch trang c a đ i ca Chúc đ i ca s c kh e, ch p nhi u nh đ p vi t nhi u tutorial hay Còn bây gi , xe buýt, thi … Giới thiệu Đây m t hư ng d n r t ng n g n giành cho nh ng ngư i m i b t đ u bư c vào lĩnh v c chu n hóa s d li u Vì r t khó đ di n t b ng l i nên tơi dùng nhi u nh t có th hình nh, bi u đ Đ trình bày qui t c q trình chu n hóa, tơi d a theo ví d c n v Hóa đơn (Invoice) chu n hóa v d ng 3NF (Third Normal Form) Trong q trình đó, s hình thành Sơ đ liên k t th c th (Entity Relationship Diagram - ERD) cho s d li u Chú ý: Đây không ph i hư ng d n chi ti t đ thi t k th c thi m t s d li u th c t B n không ph i làm theo t đ i hình minh h a ch minh h a cho vi c d li u thô đư c s p x p l i th trình chu n hóa Có th có ngư i khơng thích cách Tơi khơng trình bày v n đ liên quan đ n m l i, h i c a vi c chu n hóa Ai quan tâm đ n ch đ đó, xin xem danh sách tham kh o cu i tài li u Thư ng b t tay vào thi t k CSDL, đ u anh/cô ta có m t mơ hình chu n hóa ph n r i – chu n hóa m t cách t nhiên đ nh n m i quan h c a d li u không c n ki n th c đ c bi t v toán h c, t p h p … Trong th c t , nhi u ph i “phi chu n hóa” (de-normalize) CSDL – v n đ n m n i dung vi t Đ b t đ u: Trư c tiên, xin nh n m lòng qui t c sau v d ng chu n Nh trư c, b n s hi u sau: Khơng có ph n t /nhóm ph n t l p Khơng có ph thu c hàm khơng đ y đ vào khóa ng c Khơng có ph thu c hàm vào thu c tính khơng khóa 5 Bài tốn: Quản lí Hóa đơn Cho m u hóa đơn Hình A) Hình A: Hóa đơn Đây m u hóa đơn quen thu c kinh doanh T t c thơng tin đ u quan tr ng Chúng ta đưa thơng tin vào CSDL th đây? Ai chưa bi t v CSDL quan h có th đưa thơng tin vào spreadsheet Excel sau: Hình A-1: B ng hóa đơn Không t i! Bàng ghi l i t t c đơn hàng đư c mua b i t t c khách hàng Nhưng u x y n u ta mu n l y thơng tin ph c t p như: • Có 3" Red Freens mà Freens R Us đ t năm 2002? • • T ng s 56" Blue Freens đư c bán Texas? Nh ng s n ph m đư c bán vào ngày 14 tháng năm 2003? B ng nhi u thơng tin vi c tr l i câu h i khó khăn Trong n l c đưa d li u v tr ng thái mong mu n đ tr l i câu h i ki u trên, b t đ u vi c chu n hóa CSDL (normalization) 7 Dạng chu n thứ (1NF): Khơng có phần tử/nhóm phần tử lặp Nhìn vào hàng 2, 3, c a b ng Hình A-1, ta th y t t c d li u liên quan đ n m t hóa đơn (Invoice #125) Theo thu t ng CSDL, nhóm hàng đư c g i m t hàng đơn CSDL (a single database row) M t hàng đơn CSDL đư c t o b i ba hàng b ng Hình A-1 D ng chu n 1NF mu n tri t tiêu ph n t l p Chúng ph n t nào? M t l n n a, đ ý hóa đơn đ u tiên (#125) Hình A-1 Ơ H2, H3, H4 ch a m t danh sách s Item ID Đây m t c t hàng CSDL đ u tiên c a Tương t , I2-I4 hình thành m t c t khác; tương t v i J2-J4, K2-K4, L2-L4, M2-M4 Các c t CSDL thư ng đư c g i thu c tính (attributes) (hàng/c t có cách g i khác b /thu c tính) Đ ý th y c t ch a danh sách giá tr Rõ ràng danh sách th vi ph m lu t chu n 1NF: 1NF không cho phép danh sách hay chu i giá tr v y t n t i m t c t CSDL 1NF địi h i tính ngun t - t c s không th phân chia m t thu c tính thành ph n nh Vì th c n ph i lo i b s l p l i thông tin v item hàng giành cho Hóa đơn #125 Trong Hình A-1, sau: • T H2 đ n M2 • T H3 đ n M3 • T H4 đ n M4 Tương t , th y hi n tư ng trùng l p d li u hàng giành cho Hóa đơn #126 Chúng ta có th chu n hóa sang d ng 1NF đ đ t đư c tính nguyên t m t cách d dàng sau – cho m i item m t hàng riêng bi t (thư ng g i cách làm ph ng) Hình A-2: làm ph ng b ng d li u Có th có ph n đ i: Chúng ta c g ng làm gi m s trùng l p d li u, th m chí làm ngư c l i! D li u v Khách hàng b trùng l p! Xin đ ng lo l ng v u S trùng l p s đư c gi i quy t t i d ng chu n 3NF Xin kiên nh n; m t bư c c n ph i qua đ đ n k t qu cu i 8 Đ n m i ch đư c m t n a ch ng đư ng đ đ t đư c d ng chu n 1NF D ng chu n 1NF gi i quy t v n đ : M i hàng ph i khơng ch a nhóm l p (Tính nguyên t ) M i hàng ph i có m t thu c tính nh n d ng nh t (Khóa chính) Chúng ta gi i quy t xong tính nguyên t Đ gi i quy t v n đ Khóa Chinh, c n ph i chuy n toàn b d li u sang m t h qu n tr CSDL quan h (RDBMS) đây, dùng Microsoft Access đ t o b ng orders Hình B: Hình B: B ng orders B ng gi ng b ng Excel m khác RDBMS, có th t o m t khóa Khóa m t c t (ho c nhóm c t) giúp xác đ nh nh t m t hàng Như nhìn th y hình B, khơng có m t c t đơn có th dùng đ xác đ nh nh t hàng Tuy nhiên, n u k t h p c t order_id item_id đư c: khơng có hai hàng có giá tr order_id item_id gi ng Vì th , k h p hai c t v i nhau, có khóa c a b ng Orders Chúng ta g i hai c t khóa g p (concatened key) M t giá tr , giúp xác đ nh nh t m t hàng g i khóa Khi giá tr đư c t o b i m t c t ta g i chúng concatenated primary key C u trúc c a b ng Order có th đư c bi u di n Hình C bên: Hai thu c tính hình thành nên khóa đư c kí hi u PK Hình C Lư c đ liên k t th c th (Entity Relationship Diagram - or ERD) CSDL c a bây gi th a mãn hai yêu c u c a 1NF: tính nguyên t tính nh t Đó hai u ki n b n nh t c a CSDL quan h Ti p theo gì? Dạng chu n thứ (2NF): Khơng có phụ thuộc hàm khơng đầy đủ vào khóa B y gi , tìm ph thu c hàm khơng đ y đ vào khóa đ lo i b chúng V i b ng có khóa đư c t o b i m t thu c tính, thu c tính khơng n m khóa ph i ph thu c hàm đ y đ vào khóa mà khơng đư c phép t n t i thu c tính ch ph thu c vào m t ph n c a khóa N u có thu c tính ch ph thu c m t ph n vào khóa b ng chưa đ t d ng chu n 2NF Đ hi u rõ, xem xét t ng thu c tính c a b ng Orders V i m i thu c tính, s đ t câu h i: Li u thu c tính có th t n t i mà không c n m t hay nhi u thu c tính n m khóa khơng? N u câu tr l i “có” – dù ch m t – b ng chưa đ t chu n 2NF Xem l i Hình C bên đ nh l i c u trúc b ng Đ u tiên, nh c l i ý nghĩa c a hai thu c tính làm nên khóa chính: • order_id xác đ nh nh t m t hóa đơn • item_id xác đ nh nh t m t item kho Đây có th mã s c a linh ki n, mã s hàng kho, s SKU, sô UPC, … Chúng ta s khơng phân tích hai thu c tính (vì chúng thành ph n c a khóa chính) Bây gi , ta s xem xét thu c tính cịn l i order_date ngày l p hóa đơn Rõ ràng thu c tính ph thu c vào order_id; ngày l p hóa đơn ph i liên quan đ n hóa đơn, n u khơng ch m t ngày bình thư ng Nhưng ngày l p hóa đơn có th t n t i mà không c n item_id? Câu tr l i đơn gi n có th : ngày hóa đơn ch ph thu c vào order_id, khơng ph thu c vào item_id M t s có th ph n đ i, cho r ng làm th t c có th t o m t hóa đơn mà khơng có item (m t hóa đơn r ng) Nhưng khơng ph i v n đ c a Chúng ta xem xét li u m t hóa đơn đó, l p vào m t ngày có ph thu c vào m t item khơng? Rõ ràng không V n đ đ khơng t n t i hóa đơn r ng m t “qui t c nghi p v ” (business rule) đư c th c hi n, ki m tra m chương trình; khơng ph i v n đ mà chu n hóa gi i quy t Như v y, order_date không th a mãn d ng chu n 2NF Do đó, b ng Orders khơng đ t 2NF Bây gi xem xét thu c tính cịn l i Chúng ta c n tìm t t c thu c tính khơng th a mãn 2NF đ x lí 10 customer_id s ID c a khách hàng Nó có ph thu c vào order_id? Khơng: m t khách hàng có th t n t i mà khơng c n mua hàng Nó có ph thu c vào item_id? Khơng: v i lí Đây m t u thú v : customer_id (cùng v i thu c tính customer_* khác) khơng ph thu c vào customer_id l n order_id, t c không ph thu c vào b t c thu c tính c a khóa chính) Chúng ta s làm v i chúng? Chúng ta ch quan tâm t i chúng xem xét d ng chu n 3NF Bây gi đánh d u chúng “không rõ ràng” (unknown) ? item_description miêu t v hàng hóa Rõ rang ph thu c vào item_id Nhưng có th t n t i mà khơng c n order_id? Có! M t item có th t n t i kho mãi, mà không bao gi đư c bán … Nó đ c l p v i hóa đơn Như v y, item_description khơng th a u ki n c a 2NF item_qty s lư ng m t m t hàng đư c yêu c u m t hóa đơn Rõ rang thu c tính ph thu c vào c hai thu c tính c a khóa Chúng ta ch có th nói “5 máy tính” hay “6 TV” ch khơng th nói “10 khơng c ” (ít nh t thi t k CSDL) S lư ng m t hàng hóa đư c yêu c u m t hóa đơn khơng th t n t i khơng có hóa đơn Như v y thu c tính th a mãn 2NF item_price tương t item_description Nó ch ph thu c vào item_id mà khơng ph thu c vào order_id, nên khơng th a mãn 2NF item_total_price đ c bi t M t m t, có v ph thu c vào c order_id l n item_id, t c th a mãn 2NF M t khác, m t giá tr rút t item_qty item_price Chúng ta s x lí th nào? Trong th c t , trư ng không liên quan đ n CSDL c a Nó có th d dàng đư c t o ben ngồi CSDL; thêm vào CSDL s gây dư th a Do s b order_total_price, t ng t t c item_total_price l i m t giá tr rút n a nên s b thu c tính Đây b ng phân tích 2NF c a chúng ta: Chúng ta s làm v i m t b ng không th a mãn 2NF th ? Trư c tiên, l y n a sau c a khóa (item_id) đưa vào m t b ng khác Các thu c tính khác ph thu c vào item_id – đ y đ ho c không đ y đ - đưa vào b ng m i Chúng ta s g i b ng m i order_items (xem Hình D) Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For 11 Evaluation Only Các thu c tính cịn l i – g m thu c tính ch ph thu c vào n a đ u c a khóa (order_id) thu c tính chưa xác đ nh – gi nguyên Hình D: Bàng orders b ng m i: order_items Có m t vài m c n ý: Chúng ta ph i đưa thu c tính order_id vào b ng order_items (đ xác đ nh xem m i order_item thu c v order B ng orders có thu c tính trư c Khóa c a b ng orders ch g m m t thu c tính: order_id Khóa c a b ng order_items g m hai thu c tính Sau c u trúc b ng (Hình E): Hình E: C u trúc b ng orders order_items table N u b n chưa quen đ c Lư c đ liên k t th c th xin đ ý vào đư ng n i gi a hai b ng Đư ng n i 12 có nghĩa là: • M i order có th có m t ho c nhi u order-item, ph i có nh t m t; • M i order-item có th thu c v m t ch m t order 13 Dạng chu n thứ (2NF): Pha thứ II N u b n nghĩ r ng đ t chu n 2NF ch đã, v n còn! Nh r ng d ng chu n 2NF áp d ng cho b ng có khóa h p thành b i m t thu c tính Bây gi b ng orders có khóa khóa đơn, b ng d t d ng chu n 2NF Xin chúc m ng! Tuy nhiên, bây gi , b ng order_items l i có khóa t o b i hai thu c tính Chúng ta l i ph i phân tích xem đ t 2NF chưa Chúng ta l i làm theo cách cũ, v i m i thu c tính, đ t câu h i: Li u thu c tính có th t n t i mà không c n m t hay nhi u thu c tính n m khóa khơng? Bên c nh Hình F, bi u di n c u trúc c a b ng order_items Bây gi l n lư t xem xét thu c tính khơng khóa item_description ph thu c vào item_id, khơng ph thu c vào order_id Do đó, thu c tính khơng đ t chu n 2NF (ng c nhiên?) item_qty ph thu c vào c hai thu c tính c a khóa nên thu c tính th a mãn chu n 2NF item_price ch ph thu c vào item_id mà không ph thu c vào order_id, nên vi ph m u ki n c a chu n 2NF Chúng ta có b ng phân tích sau: Bây gi , l y thu c tính khơng th a mãn u ki n c a chu n 2NF đưa vào m t b ng m i Chúng ta g i b ng m i b ng items: Hình G: B ng order_items b ng items 14 Khoan đã, có khơng n Lúc trư c, sau ki m tra u ki n c a chu n 2NF, l y t t c thu c tính ph thu c vào item_id đưa vào m t b ng m i L n này, l i l y thu c tính khơng đ t chu n 2NF: nói cách khác, gi a nguyên item_qty T i sao? L n có khác mà l i làm v y? Đi m khác ch : l n trư c, đưa thu c tính khóa item_id kh i b ng orders, quan h m t-nhi u gi a orders order-items Do đó, thu c tính item_qty ph i item_id vào b ng m i L n này, item_id không đư c đưa kh i b ng order_items quan h nhi u-m t gi a order-items items Do đó, item_qty khơng vi ph m chu n 2NF nên đư c gi l i b ng có khóa g m hai thu c tính Đ hi u rõ hơn, có th xem ERD m i: Hình H: Đư ng n i gi a b ng items b ng order_items nghĩa là: • M i item có th n m m t s hóa đơn ho c khơng n m hóa đơn • M i order-item có th liên quan đ n m t ch m t item Hai quan h ví d cho quan h m t-nhi u Ba b ng này, xem xét m t cách toàn di n, cách bi u di n quan h nhi u-nhi u: M t order có th có nhi u item; m t item có th thu c v nhi u order Nh r ng l n này, khơng đưa thu c tính khóa order_id vào b ng m i Lí m i item c th , khơng c n ph i bi t thu c v order B ng order_items lưu tr 15 nh ng thơng tin dó thơng qua hai thu c tính order_id item_id Hai thu c tính đ ng k t h p v i t o thành khóa cho b ng order_items, đ ng riêng r , chúng khóa ngo i (foreign keys) tr t i hàng b ng khác Chúng ta s nói nhi u v khóa ngo i ph n 3NF Cũng ý r ng, b ng m i khóa h p thành b i nhi u thu c tính nên th a mãn u ki n c a d ng chu n 2NF Đ n đây, CSDL c a đ t d ng chu n 2NF! 16 Dạng chu n thứ (3NF): Khơng có phụ thuộc hàm vào thuộc tính khơng khóa Cu i cùng, tr l i v n đ liên quan đ n thông tin v Khách hàng V i CSDL hi n t i, n u m t khách hàng có m t order, s ph i nh p thông tin v khách hàng nhi u l n X y hi n tư ng b ng order có t n t i thu c tính ph thu c vào m t thu c tính khơng khóa Đ hi u rõ khái ni m này, xem xét thu c tính order_date Nó có th t n t i đ c l p v i thu c tính order_id? Khơng: m t "order date" s vơ nghĩa n u khơng có order Khi đó, order_date đư c g i ph thu c vào thu c tính khóa (vì order_id m t thu c tính khóa) Cịn thu c tính customer_name sao— li u có th t n t i m t bên ngồi b ng orders? Có V n có nghĩa nói v m t khách hàng mà khơng đ c p t i yêu c u mua hàng hay hóa đơn Tương t v i thu c tính customer_address, customer_city, customer_state B n thu c tính ch ph thu c vào customer_id – m t thu c tính khơng khóa Các trư ng s thu c v m t b ng khác, c a riêng chúng, v i customer_id làm khóa (xem Hình I) Hình I: Tuy nhiên, đ ý Hình I, c t đ t m i quan h gi a b ng Orders v i thông tin v khách hàng Do v y, ph i khôi ph c m i quan h b ng cách t o m t khóa ngo i (Foreign key - FK) b ng Orders Khóa ngo i v b n ch t m t thu c tính tr t i khóa c a m t b ng khác Hình J ERD hồn thi n c a chúng ta: 17 Hình J: ERD hồn ch nh Quan h gi a orders customers có th đư c di n gi i sau: • M t order đư c t o b i m t ch m t customer; • M t customer có th có nhi u order ho c khơng có order c Cu i cung, d li u b n b ng c a Nh khơng ph i tách hàng Hình K: r ng, 3NF tách c t, 18 Tham khảo Sau m t s tài li u tham kh o h u ích: • • • The Art of Analysis, by Dr Art Langer, devotes considerable space to normalization Springer-Verlag Telos (January 15, 1997) ISBN: 0387949720 Báo cáo khoa h c năm 1969 c a Dr Codd's v chu n hóa CSDL: www.acm.org/classics/nov95 The Wikipedia article on normalization bàn v d ng chu n hóa: en.wikipedia.org/wiki/Database_normalization ... Dạng chuẩn thứ (1NF): Khơng có phần tử/nhóm phần tử lặp Dạng chuẩn thứ (2NF): Khơng có phụ thuộc hàm khơng đầy đủ vào khóa Dạng chuẩn thứ (2NF): Pha thứ II 13 Dạng chuẩn. .. khóa ngo i ph n 3NF Cũng ý r ng, b ng m i khơng có khóa h p thành b i nhi u thu c tính nên th a mãn u ki n c a d ng chu n 2NF Đ n đây, CSDL c a đ t d ng chu n 2NF! 16 Dạng chu n thứ (3NF) : Khơng... trình bày qui t c q trình chu n hóa, tơi d a theo ví d c n v Hóa đơn (Invoice) chu n hóa v d ng 3NF (Third Normal Form) Trong q trình đó, s hình thành Sơ đ liên k t th c th (Entity Relationship

Ngày đăng: 23/08/2012, 16:28

Hình ảnh liên quan

Cũng chú ý rằng, bảng mới không có khóa chính hợp thành bởi nhiều thuộc tính nên nó thỏa mãn điều kiện của dạng chuẩn 2NF - Hướng dẫn thực hiện dạng chuẩn 3NF

ng.

chú ý rằng, bảng mới không có khóa chính hợp thành bởi nhiều thuộc tính nên nó thỏa mãn điều kiện của dạng chuẩn 2NF Xem tại trang 14 của tài liệu.
Hình J: ERD hoàn chỉnh - Hướng dẫn thực hiện dạng chuẩn 3NF

nh.

J: ERD hoàn chỉnh Xem tại trang 16 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan