Thứ Năm, 11 tháng 2, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 2 - Các quan hệ bảng

James Perry, Richard Newmark


Chương 2
Cơ sở dữ liệu và hệ thống kế toán


Các quan hệ bảng


Bạn đã học rằng quá trình chuẩn hóa bảng cơ sở dữ liệu thường phát sinh thêm một số bảng, và quan hệ giữa các bảng liên quan được duy trì bằng liên kết khóa ngoại khóa chính. Có 3 kiểu quan hệ cơ bản giữa các bảng liên quan: một-một (1-1, one-to-one), một-nhiều (1-M, one-to-many), và nhiều-nhiều (M-M, many-to-many). Chữ hoa M ký hiệu nhiều bản ghi. Ba kiểu quan hệ này có vai trò quan trọng trong việc hiểu cách xây dựng lại thông tin từ dữ liệu lưu trong các bảng thành phần. Nhớ lại rằng các dòng từ 2 bảng sẽ được nối lại khi khóa ngoại ở một bảng trùng với khóa chính ở bảng kia.

Quan hệ một-một thường thể hiện những bảng không cần thiết trong thiết kế cơ sở dữ liệu. Bạn thường kết hợp các bảng trong quan hệ một-một vào một bảng. Qui tắc tổng quát này có thể phát sinh ngoại lệ. Chẳng hạn, bảng khách hàng có thể quan hệ một-một với tblCustomerNotes, vốn lưu thông tin bổ sung về một số khách hàng của The Coffee Merchant. Vì chỉ vài khách hàng có thông tin bổ sung trong bảng tblCustomerNotes, bạn không muốn cấp thêm một cột để lưu thông tin bổ sung.  Điều này lãng phí không gian lưu trữ. Vì vậy, tblCustomerNotes sẽ chứa khóa ngoại CustID và cột Notes (chú thích). CustID vừa là khóa chính cho bảng tblCustomerNotes vừa là khóa ngoại trỏ đến bảng tblCustomer. Ký hiệu tiện lợi sau thể hiện quan hệ này:


Cơ sở dữ liệu thường chứa bảng có quan hệ một-nhiều với nhau. Có một số ví dụ trong cơ sở dữ liệu The Coffee Merchant. Hãy nhìn lại Hình 2.5. Xét quan hệ giữa bảng tblCustomer và bảng tblInvoice. Mỗi khách hàng có thể có nhiều hóa đơn chưa thanh toán như The Coffee Merchant cho phép (hoặc không). Mặt khác, một dòng hóa đơn trong bảng tblInvoice có thể kết hợp với một và chỉ một khách hàng trong bảng tblCustomer. Quan hệ giữa bảng tblCustomer và bảng tblInvoice được gọi là quan hệ một-nhiều. Mặc dù đúng về mặt kỹ thuật khi đề cập quan hệ nhiều-một, hầu hết thiết kế viên cơ sở dữ liệu đề cập phía “một” trước và dùng cụm từ “một-nhiều”. Quan hệ một-nhiều được thể hiện như sau:


Cuối cùng, xét quan hệ giữa hóa đơn và mặt hàng trà cà phê trên từng dòng-hóa-đơn. Nhiều mặt hàng trà cà phê có thể xuất hiện trên nhiều dòng của một hóa đơn. Một hóa đơn có thể chứa dòng 10 cân cà phê Kona và dòng khác là 5 cân Zimbabwe. Tương tự, các mặt hàng trà cà phê trong kho của The Coffee Merchant có thể xuất hiện trong nhiều hóa đơn. Chẳng hạn, nhiều hóa đơn khác nhau có thể có cà phê Kona. Kiểu quan hệ giữa bảng hóa đơn và bảng kho hàng gọi là quan hệ nhiều-nhiều. Ta minh họa kiểu quan hệ này như sau:


Quan hệ nhiều-nhiều khó biểu diễn và bảo trì trong hệ cơ sở dữ liệu quan hệ. Hầu hết thiết kế viên cơ sở dữ liệu tạo thêm bảng thứ ba để biểu diễn quan hệ M-M giữa 2 bảng. Bảng này gọi là bảng-quan-hệ (relationship table) hay bảng nối (junction), và bảng đó kết hợp các thuộc tính từ 2 bảng tham gia vào quan hệ M-M. Bảng-quan-hệ tạo liên kết giữa 2 bảng bằng cách chuyển quan hệ M-M thành 2 quan hệ 1-M. Bảng-quan-hệ trong cơ sở dữ liệu The Coffee Merchant là bảng dòng-hóa-đơn (tblInvoiceLine); bảng này duy trì quan hệ giữa hóa đơn (tblInvoice) và kho hàng (tblInventory). Có thể biểu diễn quan hệ 3 bảng M-M như sau:


Như vậy, luôn luôn có thể phân rã quan hệ nhiều-nhiều giữa 2 bảng thành 2 quan hệ một-nhiều bằng cách dùng một bảng-quan-hệ trung gian. Sau đây là vài qui tắc chung chi phối quan hệ giữa các bảng.

Khóa chính không được rỗng (null).
Hãy tạo khóa ngoại từ khóa chính ở phía một của quan hệ một-nhiều.
Quan hệ nhiều-nhiều được xử lý bằng cách tạo thêm một bảng,  tức bảng-quan-hệ, gồm toàn bộ 2 khóa chính ở 2 bảng cha (bảng-quan-hệ cũng có thể thêm những cột khác).
Hầu hết quan hệ một-một thể hiện những bảng không cần thiết trong thiết kế cơ sở dữ liệu. Trong hầu hết trường hợp, nếu phân tích của bạn đưa đến kết quả là quan hệ một-một giữa 2 bảng, bạn nên ghép 2 bảng đó thành một. Quan hệ một-một nghĩa là mỗi dòng trong bảng thứ nhất có một và chỉ một dòng trong bảng thứ hai liên hệ với nó. Như vậy, kết hợp 2 bảng là hợp lý. Tuy nhiên, trong vài trường hợp, chẳng hạn khi một số trường được dùng thường xuyên hơn những trường khác, hoặc khi một số trường cần độ an ninh cao hơn, đặt các trường đó vào bảng riêng sẽ tốt hơn.

Không có nhận xét nào:

Đăng nhận xét