Thiết kế CSDL là một bước vơ cùng quan trọng trong tiến trình phát triển ứng dụng. Trong quá trình thiết kế, bạn phải quyết định những table nào cần để lưu trữ các dữ liệu của bạn. Quá trình thiết kế một CSDL logic được thực hiện độc lập với các hệ quản trị CSDL. Một số lưu ý khi thiết kế một CSDL logic:
Các bảng và tên của chúng (cịn gọi là các thực thể). Tên các cột (các thuộc tính) của mỗi bảng.
Các đặc tính của cột như là giá trị duy nhất, cho phép null hay khơng, và kiểu của dữ liệu mà cột sẽ lưu chứa.
Khĩa chính (Primary key) cho mỗi bảng. Đĩ là một cột hoặc tập các cột mà chứa các giá trị được định nghĩa khơng trùng lặp ở các dịng trong bảng. Mỗi bảng chỉ cĩ thể cĩ một khĩa chính. Mặc dù khĩa chính là khơng yêu cầu bắt buộc phải cĩ nhưng các bảng nên luơn luơn cĩ.
Các mối quan hệ (Relationship) giữa các bảng. Các dịng trong một bảng phụ thuộc một hoặc nhiều dịng khác trong bảng khác. Những phụ thuộc trong những bảng này được gọi là mối quan hệ. Để định nghĩa mối quan hệ, một cột hoặc tập các cột trong một bảng được gọi là khĩa ngoại (foreign key) nếu nĩ tham chiếu đến khĩa chính của bảng khác.
Ví dụ: mỗi dịng trong một bảng đơn hàng (DONHANG) phụ thuộc vào một dịng trong bảng khách hàng (KHACHHANG) bởi vì mỗi đơn hàng phải được đặt bởi một khách hàng. Điều này chính là nối quan hệ giữa bảng DONHANG và bảng KHACHHANG. Bảng đơn hàng phải cĩ một cột lưu giữ các giá trị được tham chiếu đến một dịng riêng lẻ trong bảng KHACHHANG. Các dịng trong bảng HOADON phải được đảm bảo chỉ tham chiếu đến một khách hàng vì vậy mối quan hệ nên dựa trên cơ sở khĩa chính của bảng KHACHHANG. Cột của bảng đơn hàng mà tham chiếu đến khĩa chính của bảng khách hàng được gọi là khĩa ngoại.
Các kiểu mối quan hệ: Ba kiểu của mối quan hệ cĩ thể giữa các bảng:
One-to-One. Mỗi dịng trong bảng chính cĩ quan hệ đến chỉ một dịng trong bảng
quan hệ. Một mối quan hệ one-to-one là được thực hiện bởi định nghĩa khố ngoại là duy nhất (khơng trùng).
One-to-Many. Mỗi dịng trong bảng chính được liên quan đến một hoặc nhiều
dịng trong bảng quan hệ. Ví dụ một khách hàng cĩ thể đặt nhiều đơn hàng, nhưng một đơn hàng khơng thể được đặt bởi nhiều khách hàng.
Many-to-Many. Nhiều dịng trong một bảng liên quan đến nhiều dịng trong bảng
khác.
Ví dụ: một tác giả cĩ thể viết nhiều quyễn sách và một quyễn sách cĩ thể được viết bởi nhiều hơn một tác giả. Mối quan hệ many-to-many giữa 2 bảng là thực hiện bằng cách tạo một bảng thứ ba và tạo một mối quan hệ one-to-many đến bảng chức năng này từ mỗi bảng ban đầu.
Một CSDL sau khi thiết kế được đánh giá thơng qua các dạng chuẩn. CSDL đạt chuẩn cao thì CSDL đĩ lưu trữ đầy đủ thơng tin, khơng bị trùng lấp, cĩ tính nhất quán cao.
Các dạng chuẩn của CSDL quan hệ
Dạng chuẩn 1: Tất cả các thuộc tính đều được định nghĩa ở dạng 1 giá trị đơn
hoặc khơng ở dạng repeating group. Ví dụ: Các quan hệ sau khơng đạt dạng chuẩn 1
OrderID CustomID OrderDate Items OrderTotal
1111 101 1/1/02 4 apples 1000
1111 103 1/2/02 5 bananas 900
Khơng đạt chuẩn 1 vì thuộc tính Items khơng là giá trị đơn
OrderId CustomId Items Quarter1 Items Quarter2 Items Quarter3 …
Khơng đạt chuẩn 1 vì thuộc tính Items và Quarter cĩ dạng repeating group
Dạng chuẩn 2: Tất cả các thuộc tính khơng khĩa phụ thuộc đầy đủ vào khĩa.
ProductName SupplerName CompanyName SupplerPhoneNumber
Giả sử ProductName khơng trùng, ProductName là khĩa.
Vi phạm chuẩn 2 vì SupplerPhoneNumber chỉ phụ thuộc vào SupplerName mà khơng phụ thuộc vào ProductName (khĩa)
Dạng chuẩn 3: Tất cả thuộc tính khơng khĩa phụ thuộc đầy đủ và khơng phụ
thuộc bắt cầu vào khĩa.
CompanyName Address City Region Postcode
Giả sử CompanyName là khơng trùng
Vi phạm chuẩn 3 vì từ City và Region thì ta sẽ biết được Postcode, như vậy PostCode phụ thuộc vào City và Region. Trong đĩ CompanyName là một khĩa dự tuyển
(Candidate) Lưu ý:
Một cột (field) cĩ giá trị lặp đi lặp lại một giá trị thì giá trị đĩ gọi là dữ liệu dư thừa.
Các giá trị này người sử dụng cĩ thể gõ sai chính tả khi đĩ nên suy nghĩ để quyết định cĩ nên nảy sinh thêm 1 table hay khơng.
Hoặc trong tương lai cĩ thể nảy sinh ra các giá trị mới của field đĩ thì việc phát sinh Table là ưu việt.
Khi xây dựng dữ liệu của khĩa chính, cĩ 2 trường phái: khĩa cĩ ngữ nghĩa và khĩa khơng cĩ ngữ nghĩa. Để giải quyết các lỗi phát sinh khi dùng giá trị khố cĩ ngữ nghĩa, các chuyên gia khuyên là ngữ nghĩa của khố chỉ dùng để tham khảo và khơng nên dùng nĩ khi viết các ứng dụng.