Bạn
đã tạo bảng giải ngân Cash Disbursement ở Chương 9. Như các biến cố khác, nó
liên kết với một tài nguyên, tài khoản tiền mặt Cash Account. Như đã giải thích
ở Chương 9, ta sẽ dùng bảng tài khoản tiền mặt Cash Account đó cho các chương
còn lại.
Trong
phần mô hình dữ liệu của chương này bạn đã tạo quan hệ đối ngẫu giữa sử dụng lao
động Labor Acquisition và giải ngân Cash Disbursement cũng như quan hệ tham gia
ngoại giữa giải ngân Cash Disbursement và nhân viên Employee (xem Hình 10.6).
Tuy nhiên, giải ngân Cash Disbursement đã có quan hệ đối ngẫu với mua hàng
Purchase và quan hệ tham gia ngoại với nhà cung ứng Vendor (xem Hình 9.4). Hình
10.18 trình bày thiết kế AIS của Pipefitters liên quan đến giải ngân Cash
Disbursement dựa trên các mô hình dữ liệu cho qui trình mua hàng - chi tiền
(Hình 9.4) và qui trình nhân sự HR (Hình 10.6). Ta đã loại các quan hệ tham gia
nội với nhân viên Employee, tài nguyên tồn kho Inventory, và quan hệ dòng vào
Inflow giữa mua hàng Purchase và tồn kho Inventory vì chúng không phù hợp với
thảo luận ở đây.
Hình 10.18 Mô hình dữ liệu mua hàng - chi tiền kết hợp
với nhân sự HR.
Để
ý ở Hình 10.18 là bảng giải ngân Cash Disbursement có một khóa ngoại cho từng
biến cố đối ngẫu: TimeCardID và InventoryReceiptID. Để hòa hợp các mô hình dữ
liệu từ cả hai qui trình tác nghiệp ta sẽ thực hiện một tương
nhượng khi thi triển (implementation compromise). Ta đã có
thể chỉ cần thêm trường TimeCardID vào bảng giải ngân Cash Disbursement hiện
thời. Nhưng như vậy thì một nửa các trường này sẽ để trống (giá trị null), và đó
là một thiết kế cơ sở dữ liệu tồi. Hơn nữa, ở Chương 11 ta sẽ thêm đợt trả nợ
Loan Repayment (debt financing) và chia lãi Dividend Payment (equity financing)
vào giải ngân Cash Disbursement. Ta đã có thể thêm hai trường nữa vào bảng,
nhưng vậy thì ba phần tư các ô khóa ngoại sẽ để trống! Một phương án khác là tạo
bảng-quan-hệ cho các đợt giải ngân Cash Disbursement liên quan đến trả lương,
nhưng điều đó làm cơ sở dữ liệu phức tạp hơn và làm truy vấn cơ sở dữ liệu khó
khăn hơn. Ưu điểm duy nhất của hai phương án này là bạn vẫn có thể áp dụng tính
toàn vẹn tham chiếu, và đó là một kiểm soát nội bộ hiệu quả. Nhưng bạn không thể
đặt thuộc tính trường bắt buộc là Yes cho các khóa ngoại này, và đó cũng là một
kiểm soát nội bộ hiệu quả.
Tuy
nhiên, ta có thể loại bỏ các vấn đề của hai giải pháp trên bằng việc dùng
một khóa ngoại chung (generic foreign
key), EventID, cho mọi biến cố đối ngẫu liên quan. Điều này cho phép trường chứa
InventoryReceiptID, TimeCardID, LoanID, hay StockIssueID. Lập luận tương tự sẽ
áp dụng vào việc sửa trường VendorID thành khóa ngoại chung PayeeID, mã bên nhận
khoản chi. Mặc dù tính toàn vẹn tham chiếu không thể được áp dụng – EventID (hay
PayeeID) có thể đến từ nhiều bảng khác nhau – combo box (hay các thành phần điều
khiển khác) có thể được thêm vào forms nhập để bù cho việc thiếu vắng tính toàn
vẹn tham chiếu.
Một
vấn đề khác của việc dùng trường khóa ngoại chung
trong tblCashDisbursement là làm sao phân biệt
được kiểu giải ngân này với kiểu giải ngân khác. Giải pháp là thêm bảng kiểu
giải ngân Cash Disbursement Type rồi thêm một khóa ngoại vào bảng giải ngân Cash
Disbursement đại diện cho kiểu giải ngân. Bảng kiểu giải ngân Cash Disbursement
Type sẽ có một khóa chính, kiểu biến cố liên quan đến đợt giải ngân, và kiểu tác
nhân ngoại tham gia vào kiểu giải ngân Cash Disbursement Type đó.
Mô
hình dữ liệu cải biên được trình bày ở Hình 10.19. Để ý là hai trường khóa ngoại
biến cố, InventoryReceiptID và TimeCardID, đã được thay bằng một trường,
EventID. Trường này sẽ được dùng trong Chương 11 cho các biến cố tài chính liên
quan đến giải ngân. Cũng để ý là hai trường khóa ngoại tác nhân ngoại, VendorID
và EmployeeID, đã được thay bằng một trường, PayeeID, mã bên nhận khoản chi.
PayeeID cũng sẽ được dùng trong Chương 11 để được các khóa ngoại cho bên cho vay
Creditor và nhà đầu tư Investor. Ta đã loại bỏ nhu cầu về bảng kiểu bên nhận
khoản chi Payee Type vì mỗi kiểu giải ngân Cash Disbursement Type còn chỉ rõ
kiểu bên nhận khoản chi cùng với kiểu biến cố liên quan.
Hình 10.19 Mô hình dữ liệu tổ hợp với tương nhượng khi
thi triển là bảng kiểu giải ngân Cash Disbursement Type.
BÀI
TẬP 10.16: SỬA BẢNG GIẢI NGÂN CASH DISBURSEMENT
1.
Mở tblCashDisbursement ở góc nhìn Design. Nó
định vị ở phần Unassigned Objects thuộc Navigation Pane.
2.
Thực hiện các thay đổi sau đối với trường VendorID và các thuộc tính của nó:
- Sửa tên Field thành PayeeID.
- Sửa Input Mask thành 9999;;_ để cho phép
nhập đến bốn chữ số - kích cỡ cho trường PayeeID dài nhất của Pipefitters.
- Sửa Caption thành Payee #.
3.
Thực hiện các thay đổi sau đối với trường InventoryReceiptID và các thuộc tính
của nó:
- Sửa tên Field thành EventID.
- Sửa Input Mask thành 999999;;_ để cho phép
nhập đến sáu chữ số - kích cỡ cho trường EventID dài nhất của Pipefitters.
- Sửa Caption thành Event #.
4.
Thêm trường CDTypeID rồi nhập CDTypeID cho các đợt giải ngân:
- Chèn một dòng trống sau CashAccountID. Kích nút chọn
dòng PayeeID; kích phải rồi chọn Insert
Rows.
- Trong dòng mới, gõ CDTypeID vào ô Field
Name. Để Data Type là Short Text.
- Đặt Field Size bằng 2 và đặt Input Mask
là 00;;_.
- Nhập CD Type # cho Caption. Lưu các thay
đổi và chuyển sang góc nhìn Datasheet.
- Nhập 01 vào CD Type # cho từng bản ghi
trong tổng số 31 bản ghi. Trở về góc nhìn Design.
- Đặt thuộc tính Required là Yes, thuộc tính Allow Zero
Length là No, và để thuộc tính Indexed được đặt
là Yes (Duplicates OK).
5.
Kiểm tra để thấy rằng bạn có tất cả các trường liệt kê ở Hình 10.20. Lưu các
thay đổi rồi đóng bảng.
Hình 10.20 Bảng giải ngân Cash Disbursement hoàn tất ở
góc nhìn Design và góc nhìn Datasheet.
Kế
đến, bạn sẽ tạo bảng kiểu giải ngân Cash Disbursement Type. Nó tương tự bảng
kiểu nhân viên Employee Type bạn đã tạo trước đây trong chương. Nó có khóa chính
hai chữ số và trường tên, EventTypeName. Nó còn có một trường tên cho kiểu tham
gia ngoại, PayeeTypeName.
BÀI
TẬP 10.17: TẠO BẢNG KIỂU GIẢI NGÂN CASH DISBURSEMENT TYPE
1.
Tạo một bảng mới bằng cách dùng Table
Design trên dải lệnh Create. Đặt tên trường
khóa chính đầu tiên là CDTypeID, để Data Type
là Short Text và kích Primary
Key trong nhóm Tools. Đặt các thuộc tính trường: Field Size
– 2; Input Mask
– 00;;_ Caption – CD Type
#; Required – Yes; Allow Zero Length
– No; Indexed – Yes (No Duplicates).
2.
Đặt tên trường thứ hai là EventTypeName. Để Data Type
là Short Text. Đặt các thuộc tính trường sau: Field Size
– 25; Caption – Related Event; Required
– Yes; Allow Zero Length – No; Indexed
– No.
3.
Đặt tên trường thứ ba là PayeeTypeName. Để Data Type
là Short Text. Đặt các thuộc tính trường sau: Field Size
– 25; Caption – Payee Type; Required
– Yes; Allow Zero Length – No; Indexed
– No.
4.
Lưu bảng với tên tblCashDisbursementType.
5.
Chuyển sang góc nhìn Datasheet để nhập các bản
ghi kiểu giải ngân Cash Disbursement Type trong Hình 10.21. Đóng bảng.
Hình 10.21 Dữ liệu
cho tblCashDisbursementType được hiển thị ở góc
nhìn Datasheet.
BÀI
TẬP 10.18: TẠO VÀ CẬP NHẬT CÁC QUAN HỆ
VỚI TBLCASHDISBURSEMENT
1.
Đóng tất cả các bảng đang mở. Mở cửa
sổ Relationships (trên dải
lệnh Database Tools) và thu gọn Navigation Pane. Cửa sổ
Relationship cần giống Hình 10.14.
2.
Kích Show Table trong nhóm Relationships, thêm
các bảng sau bằng cách kích kép
chúng: tblCashAccount, tblCashDisbursement, tblCashDisbursementType, tblPurchase,
và tblVendor. Kích nút Close.
3.
Kích phải Menu Bar rồi
kích Collapse the Ribbon để làm cửa sổ
Relationships rộng hơn. Di chuyển và định cỡ lại các bảng cho giống Hình
10.22.
Hình 10.22 Cửa sổ Relationships với tất cả các quan hệ
mới và đã được sửa.
4.
Loại bỏ tính toàn vẹn tham chiếu khỏi liên kết mua hàng – giải ngân
Purchase-Cash Disbursement và liên kết nhà cung ứng – giải ngân Vendor- Cash
Disbursement. Kích phải liên kết;
kích Edit Relationships, xóa
ô Enforce Referential Integrity, rồi
kích OK. Chú ý rằng bạn không thể cập nhật lan truyền các
trường liên quan (cascade update related fields) nếu không áp đặt tính toàn vẹn
tham chiếu. Mặc dù việc lan truyền các thay đổi trong khóa chính đến các trường
liên quan là một thực hành cơ sở dữ liệu tốt, điều đó hiếm khi cần thiết. Tuy
nhiên, ta có thể dùng các truy vấn cập nhật để thực hiện điều tương tự, mặc dù
kém hiệu quả hơn.
5.
Tạo các liên kết mới
giữa tblCashDisbursement và các bảng
sau: tblCashDisbursementType, tblLaborAcquisition,
và tblEmployee. Nhớ kéo từ khóa chính đến khóa ngoại thích
hợp.
6.
Sau khi bạn kích và kéo khóa chính đến khóa ngoại, hộp thoại Edit Relationsips
xuất hiện. Khi bạn kéo EmployeeID
trong tblEmployee đến PayeeID
trong tblCashDisbursement,
kích No trong hộp thoại để tạo quan hệ mới. Đảm
bảo rằng các thuộc tính đúng xuất hiện trong các bảng bạn kéo từ và kéo đến.
Kiểu quan hệ ở đáy hộp thoại phải luôn là one-to-many. Chỉ đánh
dấu Enforce Referential
Integrity và Cascade Update Related
Fields cho liên kết
giữa tblCashDisbursement và tblCashDisbursementType.
Kích Create trong hộp thoại.
7.
Sau khi hoàn thành bài tập này, cửa sổ Relationships cần giống Hình 10.22. Đóng
cửa sổ Relationships và kích nút Yes trong hộp
thoại để lưu các thay đổi.
Mặc
dù bảng giải ngân Cash Disbursement đã hoàn tất, bạn chưa thể tạo form trả lương
vì trước tiên bạn cần các truy vấn để tính lương trước thuế gross pay, thuế an
sinh xã hội FICA tax, thuế chăm sóc y tế Medicare tax, và thuế liên bang thu tại
nguồn federal withholding tax (FWT). Các hạng mục này sẽ được diễn giải trong
phần kế.
0 nhận xét