Thiết kế cơ sở dữ liệu
Trang 1Bài 1 Thiết Kế CSDL
Mục tiêu bài học:
Tìm hiểu các khái niệm thiết kế CSDL và mô hình hóa dữ liệu
Mô tả mô hình E-R và sơ đồ E-R trong thiết kế CSDL
Liệt kê các thành phần của sơ đồ E-R
Tìm hiểu quá trình chuẩn hóa
Liệt kê các dạng chuẩn
Tìm hiểu các quy tắc chuẩn hóa
Giới thiệu
CSDL dùng để lưu trữ dữ liệu một cách có tổ chức và hiệu quả CSDL giúp ta quản lý dữ liệu một cách dễ dàng và nhanh chóng SQL Server 2000 cung cấp một nền tảng quản lý dữ liệu cấp doanh nghiệp SQL Server 2000 là phiên bản mới nhất của CSDL SQL Server
Trong kỳ học trước chúng ta đã nghiên cứu các khái niệm cơ bản của CSDL quan hệ cũng như SQL Server 2000
Trong kỳ học này chúng ta sẽ đi tìm hiểu tiếp một số chủ đề nâng cao hơn về SQL Server 2000 Các chủ đề này bao gồm: mô hình hóa CSDL, xử lý theo lô, khóa, truy vấn con/liên kết, chỉ mục, các thủ tục lưu trữ (stored procedure), trigger và các cơ chế bảo mật
1.1 Thiết kế và mô hình hóa CSDL
CSDL là một tập hợp dữ liệu có tổ chức và có mối quan hệ giúp ta có thể dễ dàng truy xuất, quan
lý và cập nhật Trong bài này chúng ta sẽ tìm hiểu cách thiết kế CSDL Hãy xem ví dụ về một công ty đã hưởng lợi từ việc thiết kế CSDL để lưu trữ các thông tin của mình
Trong thế giới kinh doanh hiện nay, việc dữ đoán các sự kiện và chuẩn bị cho các sự kiện đó có thể tiết kiệm tiền bạc và thời gian cho doanh nghiệp Chúng ta cùng tìm hiểu ví dụ sau Một công
ty sản xuất đồ hộp nhựa chất lượng cao đang lên kế hoạch nhập nguyên liệu thô hàng năm Với
dữ liệu bán hàng trong 10 năm qua, ban lãnh đạo công ty có thể tính ra tỷ lệ tăng trưởng của lượng hàng tiêu thụ được Giá sử họ tính ra tỷ lệ tăng trưởng hàng năm từ 22% đến 27% Dựa vào tính toán này, họ có thể lên kế hoạch sản xuất với sản lượng tăng khoảng 30%
Lúc này công ty sẽ chỉ đặt số lượng nguyên liệu phù hợp, nhờ đó tiết kiệm được ngoại tệ, nhà xưởng và các tài nguyên liên quan khác Kết quả là nhờ sự phân tích trên công ty có thể giao hàng đúng hạn cho khách hàng
Ví dụ này đã cho ta thấy một công ty có thể lập kế hoạch và lên lịch mua nguyên liệu dựa trên các thông tin đúc kết từ dữ liệu và khách hàng của họ cũng hưởng lợi Đây chỉ là một ví dụ nhỏ cho
chúng ta thấy việc phân tích dữ liệu một cách thông minh cho ta những thông tin có giá trị.
1.1.1 Mục đích thiết kế CSDL
Trang 2Để phấn tích được dữ liệu ta cần có một CSDL tốt, muốn vậy cần phải thiết kế CSDL một cách hiệu quả
Thiết kế CSDL là gì ?
Thiết kế CSDL là quá trình lập kế hoạch và cấu trúc các đối tượng dữ liệu cùng với các quan hệ giữa chúng (nếu có) trong CSDL
Hình 1.1: CSDL thông tin học viên
Hình 1.1 là ví dụ về CSDL thông tin và điểm thi của học viên Sơ đồ trên cũng chỉ ra mối quan hệ
giữa các đối tượng dữ liệu Student, Test và Marks.
Tại sao lại phải thiết kế CSDL?
Các đối tượng dữ liệu được tạo ra trong CSDL và các mối quan hệ phức tạp được xây dựng quanh các đối tượng dữ liệu này đóng vai trò hết sức quan trọng quyết định đến hiệu quả của CSDL
Một CSDL thiết kế tồi có thể dẫn tới:
1 Hiệu quả thấp
2 Sai sót trong cập nhật và truy xuất dữ liệu
Ngược lại, một CSDL thiết kế tốt mang lại:
1 Hiệu quả cao
2 Dễ dàng mở rộng CSDL
3 Dễ phát triển ứng dụng
Thiết kế CSDL có khó không?
Thiết kế bất kỳ một file hay một CSDL không phải là một công việc đơn giản Có một số vấn đề liên quan đến thiết kế CSDL Do vậy chúng ta phải nắm vững cách thiết kế CSDL Một trong những biện pháp tốt và hiệu quả là mô hình hóa CSDL Chúng ta sẽ nghiên cứu mô hình hóa CSDL ở phần sau của bài
1.1.2 Quá trình thiết kế CSDL
Trang 3Bước đầu tiên của thiết kế CSDL là lập kế hoạch cho CSDL, kế hoạch này đóng vai trò là bản hướng dẫn khi thực hiện thiết kế đồng thời làm tài liệu kỹ thuật cho CSDL khi đã hoàn thành thiết
kế Chi tiết và độ phức tạp của CSDL được quyết định bởi một số yếu tố như sự phức tạp và độ lớn của ứng dụng, số lượng người sử dụng
Độ phức tạp của CSDL và tiến trình lập kế hoạch có thể biến đổi Một CSDL có thể được thiết kế bởi một người và có thể khá đơn giản hoặc cũng có thể rất lớn và phức tạp, ví dụ, CSDL xử lý hàng trăm nghìn giao dịch ngân hàng Với trường hợp đầu, việc thiết kế CSDL đơn giản chỉ cần một vài chi chú lên giấy Trong trường hợp sau ta cần phải có tài liệu chính thức hàng trăm trang chứa tất cả các thông tin chi tiết có thể có trong CSDL
Một số bước cơ bản sau có thể được sử dụng khi thiết kế CSDL bất kể độ lớn và độ phức tạp của CSDL:
1 Thu thập thông tin
2 Xác định các đối tượng
3 Thiết kế mô hình
4 Xác định loại thông tin cho mỗi đối tượng
5 Xác định quan hệ giữa các đối tượng
Chúng ta đi nghiên cứu chi tiết của từng bước trên
1 Thu thập thông tin
Trước khi thiết kế CSDL ta cần nắm vững những yêu cầu của một CSDL và vai trò của nó
Nếu CSDL được tạo ra để thay thế cho hệ thông dữ liệu giấy hay hệ thống quản lý thông tin thủ công thì các hệ thống cũ sẽ là nguồn thông tin chính cần thu thập
Việc phỏng vấn những người dùng hệ thống để tìm hiểu công việc và yêu cầu của họ cũng rất quan trọng
Cũng cần thiết phải xác định được chức năng của hệ thống mới cũng như xác định các vấn đề, hạn chế và điểm tắc của hệ thống cũ
Cần thu thập các bản sao của các giấy tờ liên quan đến khách hàng, danh sách hàng trong kho và bất kỳ tài liệu nào liên quan đến hệ thống cũ, bởi vì các tài liệu này rất có ích trong thiết kế CSDL và giao diện
2 Xác định các đối tượng
Trong quá trình thu thập thông tin, chúng ta phải xác định các đối tượng hay thực thể chính cần quản lý trong CSDL Các đối tượng này có thể là những vật hữu hình như người hay sản phẩm hay những vật vô hình như một giao dịch kinh doanh, một phòng ban của côngt y hay một kỳ lương Thông thường ta sẽ xác định một số đối tượng chính sau đó các đối tượng liên quan sẽ dần định hình Mỗi đối tượng xác định được sẽ tương ứng với một bảng dữ liệu trong CSDL
3 Mô hình hóa các đối tượng
Trang 4Khi các đối tượng trong hệ thống được xác định, ta cần đưa chúng vào mô hình sao cho có thể thể hiện một cách trực quan toàn bộ hệ thống Mô hình CSDL này sau đó có thể được sử dụng để tham khảo trong quá trình thực thi CSDL
Chú ý: SQL Server 2000 Enterprise Manager là công cụ thiết kế trực quan giúp thiết kế và tạo
các đối tượng trong CSDL
4 Xác định các loại thông tin cho mỗi đối tượng
Sau khi các đối tượng chính của CSDL được xác định, bước tiếp theo là xác định các thông tin được lưu trữ cho mỗi đối tượng Các thông tin này thường được thể hiện dưới dạng các trường dữ liệu trong bảng đối tượng và có thể được phân loại như sau:
Các trường dữ liệu Mô tả
Các trường dữ liệu
thô Các trường này chứa các thông tin hữu hình như tên, được quyếtđịnh bởi các nguồn ngoài CSDL Các trường dữ liệu
phân loại
Các trường này phân loại hay nhóm dữ liệu, chúng chứa những dữ liệu đơn giản như true/false, married/single, VP/Director/Group Manager, v.v
Các trường xác thực
(ID)
Các trường này giúp xác định mỗi thực thể lưu trong bảng Chúng
thường có những từ id hay number (ví dụ, employee_id,
invoice_number) Trường xác thực là thành phần chính được sử dụng bởi cả người dùng và các cơ chế sử lý bên trong CSDL để truy xuất một bản ghi dữ liệu trong bảng
Các trường quan hệ
tham chiếu Các trường này thiết lập kết nối giữa thông tin trong một bảng vớithông tin trong bảng khác Ví dụ, bảng lưu thông tin về các giao
dịch bán hàng thường có liên kết với bảng customers giúp truy xuất
toàn bộ thông tin của khách hàng trong giao dịch bán hàng
Bảng 1.1: Các trường dữ liệu
5 Xác định mối quan hệ giữa các đối tượng
Một trong những thế mạnh của CSDL quan hệ là khả năng gắn kết thông tin giữa nhiều đối tượng trong CSDL Các loại thông tin được lưu trữ độc lập nhưng CSDL có khả năng truy xuất kết hợp dữ liệu khi cần thiết Việc xác định mối quan hệ giữa các đối tượng trong quá trình thiết kế đòi hỏi ta phải xem xét các bảng và tìm ra mối quan hệ logic giữa chúng, thêm vào các trường dữ liệu quan hệ và thiết lập kết nối giữa các bảng
Trang 51.1.3 Mô hình hóa CSDL
Sơ đồ mô hình dữ liệu thể hiện mối quan hệ giữa các bảng (thực thể) Sơ đồ này rất có ích với người thiết kế, quản trị hay lập trình với CSDL
Mô hình hóa CSDL có thể được chia thành 3 bước chính sau Hình 1.2 mô tả quá trình thiết kế CSDL
Hình 1.2: Quá trình phát triển CSDL
Mô hình dữ liệu khái niệm là mô hình trừu tượng hóa dữ liệu mức cao Mô hình này rất gần với cách nhìn của người dùng về hệ thống Mô hình này cũng là phương tiện giao tiếp giữa người dùng và lập trình viên Mô hình hóa khái niệm độc lập với các hệ quản trị CSDL
Trong bài này, chúng ta sẽ tìm hiểu chi tiết về cách thiết kế CSDL logic
Thiết kế CSDL vật lý liên quan đến cách lưu trữ, truyu xuất và ràng buộc dữ liệu để đảm bảo tốc
độ phù hợp
1.2 Thiết kế CSDL logic
Thiết kế CSDL logic bao gồm quá trình xây dựng mô hình thông tin trong doanh nghiệp dựa trên một mô hình dữ liệu cụ thể, nhưng độc lập với CSDL hay các vấn đề vật lý khác
Công cụ mô hình hóa phổ biến nhất được dùng cho việc thiết kế CSDL logic là Sơ đồ quan hệ thực thể (E-R diagram) Mô hình này là nền tảng cho nhiều mô hình khác Nó mô tả dữ liệu và các mối quan hệ giữa các dữ liệu trong một hệ thống Trong mô hình E-R dữ liệu được mô tả là các thực thể, thuộc tính và các quan hệ Sơ đồ The E-R được sử dụng chủ yếu trong quá trình thiết kế CSDL và thể hiện cấu trúc logic chung của CSDL
Các yêu cầu về thông tin nghiệp vụ
CSDL hoạt động (Operational
Database)
Mô hình hóa khái niệm (Conceptual Data Modeling) Thiết kế CSDL Logic (Logical Database Design)
Xây dựng CSDL vật lý (Physical Database Build)
Business view
Systems view
Trang 61.2.1 Mô hình Quan hệ - Thực thể
Mô hình E-R là công cụ thân thiện và hiệu quả để mô hình hóa dữ liệu Mô hình này thể hiện thế giới thực dưới dạng các đối tượng cơ bản và các mối quan hệ giữa chúng Các thành phần của mô hình E-R được liệt kê dưới đây:
Thực thể - Thực thể là một đối tượng tồn tại và có thể phân biệt với các đối tượng khác Ví
dụ, John có số an sinh xã hội là 890-12-3456 là một thực thể bởi người này có thể được xác định là một người duy nhất trong xã hội Một thực thể có thể là hữu hình (một quyển sách) hay trừu tượng (như một kỳ nghỉ hay một khái niệm)
Một tập hợp thực thể - Là một tập các thực thể cùng loại( ví dụ, những người có tài khoản
trong ngân hàng)
Các thuộc tính – Một thực thể được mô tả bằng một tập các thuộc tính Ví dụ: Name, SSN,
Age, Street, City là các thuộc tính của thực thể “Person”
Quan hệ và tập quan hệ - Quan hệ là sự gắn kết giữa hai hoặc nhiều thực thể Một tập quan
hệ là một tập hợp các quan hệ cùng kiểu
Chúng ta xem ví dụ về 2 tập thực thể Customers và Accounts Ta dùng quan hệ CustAcct để mô tả
sự gắn kết giữa customers và các accounts của họ
Hình 1.3: Quan hệ giữa 2 tập thực thể
Một tập quan hệ có thể chứa nhiều hơn 2 tập thực thể như trong hình 1.4 Các tập thực thể như customers, loans và branches có thể được liên kết với nhâu bằng các quan hệ “Borrow” Quan hệ
“Borrow” chỉ ra rằng một khách hàng có thể vay tiền ở một chi nhánh nào đó của ngân hàng
Hình 1.4: Quan hệ giữa 3 tập thực thể
Tập thực thể trong một quan hệ không cần thiết phải là duy nhất Vai trò quả một thực thể chính
là chức năng của nó trong quan hệ Ví dụ, quan hệ works-for có thể xuất hiện giứa các cặp thực thể employee Thực thể employee đầu đóng vai trò là người quản lý, và có một người khác đóng vai trò là nhân viên như trong hình sau:
tAc ct
Branches
Trang 7Hình 1.5: Self Relationship
Các nhãn “Manager” và “Worker” được gọi là các vai trò (roles); chúng chỉ ra tương tác giữa các thực thể employee qua quan hệ “Works for”
Ta có thể định nghĩa một tập các thực thể và quan hệ giữa chúng theo nhiều cách Sự khác biệt lớn nhất giữa những cách này ở chỗ ta xử lý các thuộc tính như thế nào Chúng ta xem tập thực thể employee có các thuộc tính Employee_Name, Phone_Number Chúng ta có thể lập luận rằng thuộc tính phone có thể được coi là một thực thể với các thuộc tính Phone_Number và Location Vậy ta sẽ có hai thực thể Employee và Phone, và quan hệ EmpPhn thể hiện sự ràng buộc giữa 2 thực thể này Định nghĩa mới này có thể thể hiện chính xác hơn thế giới thực Tuy nhiên chúng ta không dễ mở rộng lập luận này và việc quyết định đối tượng nào là thuộc tính phụ thuộc chủ yếu vào cấu trúc của hoàn cảnh thế giới thực chúng ta đang mô hình hóa, và ngữ nghĩa của thuộc tính
ta đang bàn đến
Ràng buộc số lượng – Ràng buộc số lượng thể hiện số thực thể mà một thực thể có quan hệ
ràng buộc Trong mối quan hệ giữa thực thể X và Y, ràng buộc số lượng có thể là một trong những loại sau:
1 Một-một: Một thực thể X có quan hệ với tối đa 1 thực thể Y và ngược lại.
2 Một-nhiều: Một thực thể X có quan hệ với vố số thực thể Y Một thực thể Y có
quan hệ ràng buộc với tối đa 1 thực thể X
3 Nhiều-một: Một thực thể X có quan hệ với tối đa 1 thực thể Y Một thực thể Y
có quan hệ với vô số thực thể X
4 Nhiều-nhiều: Các thực thể X và Y có quan hệ với vô số các thực thể của nhau.
Manager
s For Worker
X X X X
Y Y Y Y
X X X X
Y Y Y Y
X X X X
Y
Y Y
X X X X
Y
Y Y Y
Trang 8Hình 1.6: Ràng buộc số lượng
Việc lựa chọn ràng buộc số lượng phù hợp cho một quan hệ phụ thuộc vào các thực thể được mô hình hóa trong đời sống thực Nếu sự tồn tại của thực thể X phụ thuộc vào sự tồn tại của thực thể
Y ta nói Y là thực thể cha và X là thực thể con
Ví dụ, ta xem tập thực thể account và transaction, và quan hệ log giữa 2 thực thể này Đây là quan
hệ một-nhiều với một account có nhiều transaction Nếu một thực thể account bị xóa các thực thể transaction có quan hệ với thực thể account đó cũng phải được xóa Do đó account là thực thể cha còn transaction là thực thể con
Các trường khóa – Sự khác biệt giữa các thực thể phải được thể hiện bằng các thuộc tính.
Khóa chính là một hay nhiều thuộc tính cho phép ta xác định duy nhất một thực thể trong một tập thực thể Ví dụ, trong tập thực thể customer, các thuộc tính customer_name và S.S.N, kết hợp lại, được coi là khóa chính Cần chú ý rằng customer_name không được coi là khóa chính vì 2 khách hàng có thể có cùng tên Một khóa chính không có các tập bản ghi con được coi là khóa ứng viên
(candidate key) Trong ví dụ trên S.S.N được coi là khóa ứng viên do thuộc tính này có thể xác
định duy nhất một thực thể customer trong tập thực thể
Một tập thực thể không có đủ các thuộc tính để hình thành khóa chính được gọi là tập thực thể
yếu (weak entity set) Tập thực thể có khóa chính được gọi là tập thực thể mạnh (strong entity
set) Ví dụ, tập thực thể transaction có các thuộc tính transaction_number,date và amount Các
transactions khác nhau được thực hiện bởi những accounts khác nhau có thể chia sẻ chungcùng một mã số transction, điều này cho thấy không có thuộc tính nào có khả năng làm khóa chính (giúp xác định duy nhất một transaction) trong tập thực thể này Do vậy transaction là một tập thực thể yếu Để một thực thể yếu tồn tại, nó phải tham gia vào quan hệ một – nhiều Ý tưởng các thực thể mạnh và yếu liên quan đến sự khác biệt về quan hệ tồn tại bàn ở trên Các thành viên của một tập thực thể yếu không có khóa chính, nhưng chúng vẫn cần có công cụ để phân biệt với nhau Yếu tố để phân tách các thực thể trong tập thực thể yếu là một tập các thuộc tính cho phép
ta phan biệt được các thực thể Khóa chính của một thực thể yếu được tạo ra bằng cách lấy khóa chính của thực thể mạnh kết hợp với trường phân biệt trong thực thể yếu
‘Transaction’ là một thực thể yếu Nó tồn tại phụ thuộc vào thực thể ‘account’ Khóa chính của thực thể account là account_number Thuộc tính Transaction_Number phân biệt các thực thể transaction trong cùng một account (account_number,transaction_number) Do vậy, khóa chính của thực thể yếu này được hình thành bằng cách lấy khóa chính của thực thể mạnh mà nó phụ thuộc cùng với thuộc tính phân biệt của tập thực thể yếu
Các thuộc tính của một tập quan hệ là các thuộc tính bao gồm các khóa chính của các tập thực thể trong quan hệ Ví dụ:: S.S.N là khóa chính của thực thể customer, và account-number là khóa chính của thực thể account Do đó các thuộc tính của quan hệ CustAcct chính là (Account_Number, S.S.N) Đây là những thông tin đủ giúp chúng ta ràng buộc một account với một person Nếu quan hệ chứa các thuộc tính mô tả, chúng cũng được đưa vào tập thuộc tính của quan hệ Ví dụ, chúng ta có thể thêm thuộc tính date vào tập quan hệ trên, thuộc tính này mô tả ngày truy vấn account gần nhất của một customer Chú ý rằng thuộc tính này không thể đưa vào bất kỳ thực thể nào do nó liên quan đến cả customer và account, và mối quan hệ giữa hai thực thể này là nhiều – nhiều
1.2.2 Sơ đồ quan hệ thực thể
Trang 9Chúng ta có thể mô tả cấu trúc logic tổng thể của CSDL một cách trực quan bằng sơ đồ quan hệ thực thể (ERD) Các thành phần của ERD bao gồm:
1 Hình chữ nhật thể hiện các tập thực thể
2 Hình Ellipses thể hiện các thuộc tính
3 Hình thoi thể hiện các tập quan hệ
4 Các đường thẳng liên kết các thuộc tính với các tập thực thể và các tập thực thể với các tập quan hệ Các đường thẳng có thể directed (có mũi tên) để chỉ các ràng buộc số lượng trong các tập quan hệ Hình 1.7 là một số ví dụ mô tả số lượng các thực thể liên quan mà một thực thể có quan hệ Vị trí của mũi tên rất đơn giản, đầu mũi tên chỉ đến thực thể mà thực thể
“one” trỏ đến
1:1 – Một customer có tối đa một account và một account được sở hữu tối đa bởi một customer 1:N – Một customer có thể có vô số accounts nhưng một account chỉ được sở hữu bởi tối đa một
customer
M: N – Mỗi customer có thể có vô số accounts và mỗi account có thể được sở hữu bởi vô số
customers
Các ký hiệu của sơ đồ E-R:
THỰC THỂ THỰC THỂ YẾU LOẠI QUAN HỆ THUỘC TÍNH THUỘC TÍNH CHÍNH THUỘC TÍNH NHIỀU GIÁ
TRỊ
THUỘC TÍNH TỔNG HỢP
THUỘC TÍNH PHÁT SINH
Bảng 1.2: Các ký hiệu trong sơ đồ E-R
Trang 10Các thuộc tính tập hợp – Các thuộc tính của các tập thực thể có thể được chia thành các tập nhỏ
hơn được gọi là các thuộc tính tập hợp (“composite attributes”), chứa những thuộc tính cơ bản với các ý nghĩa khác nhau Ví dụ, thuộc tính Address của thực thể employee có thể bao gồm Street, City, State and Zip
Một thuộc tính nhiều giá trị (multivalued attribute) là thuộc tính chứa các giá trị cận trên và cận
dưới cho giá trị của thực thể Ví dụ, thuộc tính colors của một thực thể có thể chứa 5 giá trị Vậy colors có thể chứa các giá trị từ 1 (cận dưới) đến 5 (cận trên)
Trong một số trường hợp hai (hay nhiều hơn) các giá trị thuộc tính có liên quan đến nhau – ví dụ, các thuộc tính Age và Birthdate của thực thể person Với một thực thể person, thuộc tính tuổi có thể được quyết định bởi ngày hiện tại và ngày sinh của thực thể person Thuộc tính Age do đó
được gọi là thuộc tính phái sinh (derived attribute) và được coi là phát sinh từ thuộc tính Birthdate, được gọi là thuộc tính lưu trữ (stored attribute).
Chúng ta xem xét một số ví dụ về sơ đồ E-R mô tả các quan hệ 1:1, 1:N và N:N
Street
Customer
Date
CustAcc t Deposito r
Acct_Type Acct_Number
Account
Street
Customer
Date
CustAcc t Deposito r
Acct_Type Acct_Number
Account
One to Many (1:N) One to One (1:1)