



















Preview text:
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN HỆ THỐNG THÔNG TIN 🙞🙞🙞🙞🙞
ĐỀ TÀI CUỐI KỲ MÔN HỆ QUẢN TRỊ CSDL TÊN ĐỀ TÀI:
QUẢN LÝ TÀI KHOẢN TIẾT KIỆM NGÂN HÀNG
TS. Nguyễn Thành Sơn Lớp HP:  Nhóm thực hiện:  Học kỳ:  Năm học: 
Thành phố Hồ Chí Minh, tháng 11, năm 2022
DANH SÁCH SINH VIÊN NHÓM THỰC HIỆN
HỌC KÌ 1 NĂM HỌC 2022
Đề tài: Quản lý tài khoản tiết kiệm ngân hàng Lê Thị Kim Lệ Nguyễn Thị Bích Liên Nguyễn Thị Cẩm Nguyên Phùng Thị Thùy Trang NHẬN XÉT CỦA GV
Tp. Hồ Chí Minh, ngày …., tháng 11, năm 2022 Giảng viên chấm điểm   Contents  LỜI NÓI ĐẦU  
CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG     Đặc tả đề tài    Mô tả bài toán  
 Nghiệp vụ của bài toán  
 Mô tả các chức năng của bài toán  
 Một số hình thức gửi tiết kiệm  
 Phương pháp tính lãi suất  
 Phương thức tính lãi  
CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG    
Thiết kế cơ sở dữ liệu mức quan niệm.    
Thiết kế cơ sở dữ liệu mức logic.     Các ràng buộc cần có    
Cài đặt CSDL và các ràng buộc  
 4.1. Tạo bảng và các ràng buộc đơn giản.     Các ràng buộc khác    
Trigger kiểm tra các ràng buộc      
CHƯƠNG 3. THIẾT KẾ CÁC CHỨC NĂNG    
Kết nối cơ sở dữ liệu     Xem thông tin danh mục     Quản lý nhân viên     Quản lý Sổ tiết kiệm    
Quản lý Giao dịch tiết kiệm  
CHƯƠNG 4. TẠO USER VÀ PHÂN QUYỀN  
CHƯƠNG 5. THIẾT KẾ GIAO DIỆN HỆ THỐNG   LỜI CẢM ƠN
Lời đầu tiên, chúng em xin chân thành cảm ơn sự hướng dẫn tận tình của thầy 
Nguyễn Thành Sơn đã giúp chúng em hoàn thành bài báo cáo cuối kì bộ môn Hệ quản trị 
cơ sở dữ liệu này. Nhờ những kiến thức thầy truyền đạt mà chúng em đã nắm chắc hơn 
được những kiến thức căn bản, nền tảng cho việc khi xây dựng một hệ thống quản trị cơ sở 
dữ liệu. Thông qua đồ án này, nhóm em xin trình bày lại quá trình phát triển của một hệ 
thống quản trị cơ sở dữ liệu, cũng như lập trình một đồ án liên quan.
Trong quá trình thực hiện đồ án môn học, khó tránh khỏi những sai sót. Do đó nhóm 
chúng em rất mong sự góp ý đến từ thầy để bài làm của nhóm chúng em được hoàn thiện 
hơn, phát triển và đầy đủ hơn. Kính chúc thầy sức khỏe, hạnh phúc thành công trên con 
đường sự nghiệp giảng dạy
Cuối cùng chúng em cũng chân thành cảm ơn các thầy cô và các bạn cùng tham gia 
học bộ môn Hệ quản trị sơ sở dữ liệu đã nhiệt tình giúp đỡ động viên chúng em trong trình 
thực hiện đồ án cuối kì.   |Nhóm 03 LỜI NÓI ĐẦU
Trong nhiều năm trở lại đây, ngành công nghệ 
thực sự đã len lỏi vào từng 
ngóc ngách của đời sống xã hội. Bất kể một lĩnh vực hay ngành nghề nào cũng đều ứng 
dụng các công nghệ thông tin. CNTT đã và đang đóng vai trò quan trọng trong đời sống 
kinh tế, xã hội của nhiều quốc gia trên thế giới và Việt Nam cũng vậy, ứng dụng của ngành 
này có rất nhiều trong đời sống hằng ngày.
Không thể phủ nhận rằng các hệ thống quản lý dữ liệu, thông tin dần trở thành công 
cụ đắc lực của nhiều doanh nghiệp. Đặc biệt phải kể đến lĩnh vực ngân hàng hiện nay
công tác quản lý dữ liệu, công nghệ thông tin giúp cho quá trình quản lý dữ liệu đạt hiệu 
quả cao trong việc giảm tối thiểu về nhân lực, thời gian cũng như tránh thất lạc, sai sót dữ 
liệu thay vì việc quản lý bằng giấy tờ bằng phương pháp cổ truyền như trước đây. 
Chính vì những lý do đó, ứng dụng của Công nghệ thông tin đối với công tác quản 
lý dữ liệu trong ngân đóng một vai trò hết sức quan trọng. Và để làm rõ hơn về ứng dụng 
của Công nghệ thông tin đối với công tác quản lý trong thực tế nhóm chúng em lựa chọn đề 
“Quản lý tài khoản tiết kiệm Ngân hàng” để nghiên cứu và phát triển ứng dụng của 
việc quản lý hệ thống dữ liệu trong môn học Hệ quản trị cơ sở dữ liệu. |Nhóm 03
CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG Đặ ả đề ả
Một ngân hàng cần có hệ thống quản lý tài khoản tiết kiệm. Một hệ thống quản lý 
tài khoản tiết kiệm cần lưu trữ những dữ liệu như sau:
Ngân hàng quản lý nhiều chi nhánh, mỗi Chi nhánh có Tên chi nhánh, Mã chi nhánh, 
Địa chỉ. Mỗi chi nhánh thì có nhiều nhân viên,…
Mỗi nhân viên có các thông tin: Mã nhân viên, Họ tên, Ngày sinh, Địa chỉ, Điện 
thoại. Mỗi nhân viên được cấp tên đăng nhập và mật khẩu để đăng nhập vào hệ thống. Mỗi 
nhân viên sẽ có chức vụ và quyền hạn khác nhau nên thuộc các nhóm người dùng và có  phân quyền khác nhau.
ông tin về nhóm người dùng thì gồm có: Mã nhóm người dùng, Tên nhóm người 
dùng. Có các nhóm người dùng sau: Nhân viên giao dịch và Giám đốc.
Nhóm người dùng thì được phân chia ra những quyền riêng biệt. Thông tin về nhóm 
quyền: Mã quyền, Tên quyền. Các nhóm người dùng được phân cho một hoặc nhiều quyền.
Một Chi nhánh thì quản lý nhiều tài khoản tiết kiệm và điều cần thiết với mỗi sổ là 
thông tin Khách hàng gửi tiết kiệm. Thông tin của khách hàng gồm: Mã khách hàng, Tên, 
Số điện thoại, Địa chỉ, số CCCD, Nơi cấp, Ngày cấp.
Một khách hàng có thể mở một hoặc nhiều sổ tiết kiệm. Thông tin của mỗi sổ tiết 
kiệm: Mã sổ tiết kiệm, Ngày mở sổ, Ngày đến hạn, Ngày tất toán, Loại tiền gửi, Tình trạng. 
Tình trạng của sổ có thể là: Còn hiệu lực, Đã tất toán, Phong tỏa.
Mỗi một sổ tiết kiệm sẽ thuộc một loại tiết kiệm duy nhất, phân biệt bởi mã loại tiết 
kiệm. Mã loại tiết kiệm qui định hình thức gửi tiết kiệm, kỳ hạn, hình thức trả lãi, lãi suất.
Có các hình thức gửi tiết kiệm sau:
Tiền gửi tiết kiệm trả lãi định kỳ
Tiền gửi tiết kiệm trả lãi trước
Tiền gửi tiết kiệm trả lãi sau
Tiền gửi tiết kiệm gửi góp
Tiền gửi tiết kiệm một lần |Nhóm 03
Kỳ hạn: Không kỳ hạn, 1 tháng, 2 tháng, …, 36 tháng.
Lãi suất tiết kiệm được quy định bởi: Hình thức gửi tiết kiệm, Kỳ hạn, Kỳ trả lãi.
Mỗi sổ tiết kiệm sẽ phát sinh một hoặc nhiều phát sinh giao dịch tiết kiệm. Thông 
tin của mỗi giao dịch tiết kiệm gồm: Mã số giao dịch, Ngày giao dịch, Mã sổ tiết kiệm, Mã 
loại giao dịch, Mã chi nhánh giao dịch, Mã nhân viên giao dịch, Số tiền giao dịch. Mã loại
giao dịch cho biết loại giao dịch nào được thực hiện, có các loại giao dịch sau: Gửi tiền, Rút 
tiền lãi, Tất toán, Lãi nhập gốc, Tái ký gửi. ệ ụ ủ Gửi tiết kiệm
Khách hàng xuất trình giấy chứng minh. Kế Toán hướng dẫn khách hàng điền đầy 
đủ thông tin trên “giấy đề nghị gửi tiền”. Thông tin “giấy đề nghị gửi tiền” gồm có: họ tên, 
điện thoại, địa chỉ, số CMND, ngày cấp, nơi cấp, số tiền gửi, kỳ hạn gửi, hình thức rút lãi.
Kế Toán Trưởng kiểm tra các thông tin trên giấy đề nghị của khách hàng, giấy nộp tiền, 
phiếu lưu, Sổ tiết kiệm phải khớp nhau và ký tên lên Sổ Tiết Kiệm. Giám Đốc ký tên lên 
giấy nộp tiền, Sổ tiết kiệm. Thủ quỹ nhận giấy nộp tiền, Sổ tiết kiệm, phiếu lưu tiền gửi,  chờ Kiểm ngân thu.
Kiểm ngân sau khi thu xong, lập bảng kê nộp tiền, ký tên lên bảng kê nộp và chuyển 
bảng kê cho thủ quỹ. Thủ quỹ kiểm tra số tiền trên bảng kê, giấy nộp tiền, phiếu lưu, Sổ tiết 
kiệm. Nếu khớp đúng số tiền, ký tên lên giấy nộp tiền và bảng kê nộp, vào sổ theo dõi. Nếu 
không khớp đúng số tiền phải báo cho Kế toán biết để điều chỉnh lại. Cho khách hàng ký 
tên lên giấy nộp tiền, bảng kê nộp, đăng ký chữ ký mẫu lên phiếu lưu, ký tên lên Sổ Tiết 
Kiệm, phiếu lưu (bên phần kiểm soát), ký nhận Sổ Tiết Kiệm. Sau khi xong cho khách hàng 
ký nhận sổ và trả sổ c
Sau đó ký tên lên góc trái chứng từ, đóng dấu đã thu tiền và vào sổ theo dõi thu chi, 
giữ lại bảng kê nộp tiền để tổng hợp (cuối ngày giao lại cho Thủ quỹ). Thủ quỹ vào sổ quỹ. 
Giấy nộp tiền cuối ngày Thủ quỹ chuyển qua bộ phận kết hợp chứng từ.
Kiểm tra các yếu tố trên giấy gửi tiền. Ký chữ ký mẫu lên phiếu lưu tiền gửi (hoặc 
các ký hiệu khác). Nhân viên ngân hàng in Giấy nộp tiền, Phiếu lưu, Sổ tiền gửi. Rút tiết kiệm |Nhóm 03
Khách hàng đến rút tiền mang Sổ tiết kiệm, CMND (hộ chiếu) đã đăng ký lúc gửi 
tiền và thông báo đến Kế toán số tiền cần rút (vốn, lãi).
Trường hợp rút hoàn toàn: KT sẽ căn cứ vào ngày đáo hạn, số tiền gửi, lãi suất trên 
sổ, lập Phiếu tính lãi, in Giấy lãnh tiền, Phiếu chi lãi, in Sổ tiền gửi, ghi Phiếu lưu tiền gửi, 
ký tên chuyển qua cho Kế toán Trưởng.
Trường hợp khách hàng gửi lại đúng số tiền và định kỳ trên Sổ tiết kiệm: Kế toán sử 
dụng lại Sổ tiết kiệm cũ, Phiếu lưu cũ, lập Giấy nộp tiền, Giấy lĩnh tiền, Phiếu chi lãi, in Sổ 
tiết kiệm, ghi Thẻ lưu tài khoản, chuyển cho Kế toán trưởng.
Trường hợp khách hàng gửi lại thay đổi số tiền: Kế toán thực hiện như trường hợp 
rút hoàn toàn, sau đó làm giống như trường hợp gửi tiền, chuyển cho Kế toán trưởng
Kế toán trưởng kiểm tra lại ngày đáo hạn, cách tính lãi trên Phiếu tính lãi, Giấy lĩnh 
tiền, Phiếu chi lãi, Số dư trên Sổ tiền gửi và Phiếu lưu. Cho khách ký tên lên chứng từ, đối 
chiếu chữ ký của khách hàng trên chứng từ Thẻ lưu, nếu đúng chữ ký, khách hàng ký tên 
lên Sổ tiết kiệm và Thẻ lưu, chi tiền cho khách hàng và trả Sổ tiết kiệm cho khách hàng, 
nếu không đúng phải báo cho Kế toán để kiểm tra lại, chi xong ký tên lên góc trái chứng từ 
và đóng dấu “Đã chi tiền” vào Sổ theo dõi, gữi lại Bảng kê để tổng hợp cuối ngày. ả ức năng củ
Đối với Người quản trị:
Thêm quyền, xóa quyền, phân quyền cho nhóm người dùng, xóa quyền khỏi nhóm  người dùng. khỏi phân nhóm.
Đối với Giao dịch viên –
chỉnh sửa thông tin khách hàng, thêm đồng sở hữu, mở sổ tiết 
kiệm, thực hiện các giao dịch rút, gửi lãi, vốn, tất toán, phong tỏa, xóa sổ, tái ký tục, chuyển  quyền sử dụng sổ.
Tra cứu thông tin khách hàng, sổ tiết kiệm.
Phân quyền: quyền admin toàn quyền với hệ thống. Còn nhân viên không thể tham gia vào 
việc quyền của các tài khoản khác. |Nhóm 03 ộ ố ứ ử ế ệ
Đối với hình thức gửi có kỳ hạn
Gửi tiết kiệm hàng tháng (tiết kiệm gửi góp): Hình thức này chỉ có hình thức lãi trả 
sau. Như vậy, số tiền gốc sẽ tăng lên sau mỗi kỳ gửi góp, mà không phải là một số cố định 
như hình thức tiết kiệm thông thường. Số tiền lãi cũng được tính trên cơ sở số tiền gốc tăng 
lên đó. Lãi suất áp dụng cho loại tiền gửi này thấp hơn lãi suất tiền gửi tiết kiệm thông 
thường. Quý khách sẽ không được rút tiền trước hạn, khi đến hạn nếu quý khách không đến 
rút tiền, số dư không được chuyển thêm kỳ hạn gửi tiếp theo mà được tính lãi với lãi suất  không kỳ hạn.
Đối với hình thức gửi một lần có 3 hình thức trả lãi như: trả trước, trả định kì và trả 
Tiền gửi tiết kiệm trả lãi trước Quý khách nhận được tiền lãi ngay tại thời điểm gửi 
tiền. Lãi suất áp dụng cho hình thức tiền gửi này thấp hơn lãi suất tiền gửi cùng kỳ hạn lĩnh 
lãi cuối kỳ. Loại tiền gửi này cũng không hỗ trợ quý khách rút gốc hoặc rút một phần gốc 
trước hạn. Tiền gửi khi đến hạn mà quý khách không rút ra sẽ được chuyển thêm kỳ hạn  tiếp theo. 
Tiền gửi tiết kiệm trả lãi định kỳ (hàng tháng/ hàng quý): Loại tiền gửi này rất thuận 
tiện cho quý khách cần phải dùng tiền lãi thu được từ việc gửi tiền tiết kiệm của mình, để 
sử dụng chi tiêu định kỳ hàng tháng, hàng quý…, quý khách không cần chờ khi đến hạn 
mới rút được tiền lãi. Các quy định khác cũng giống như tiền gửi tiết kiệm thông thường. 
Tiền gửi tiết kiệm trả lãi sau: Nhận tiền lãi khi ngày đến hạn. Hình thức tiền gửi này 
cũng được nhập lãi một lần vào cuối kỳ, tự động chuyển thêm một kỳ hạn tiếp theo nếu quý 
khách không rút tiền khi đến hạn.
Đối với hình thức gửi tiết kiệm không kỳ hạn (gửi một lần)
Tiền gửi tiết kiệm gửi một lần (rút gốc linh hoạt) Loại tiền gửi tiết kiệm này cũng 
được nhập lãi một lần vào cuối kỳ và tự động quay vòng khi đến hạn. Tuy nhiên, trong kỳ 
nếu quý khách có nhu cầu rút một phần gốc trước hạn thì phần tiền rút ra được tính lãi suấ
không kỳ hạn, phần còn lại gửi tiếp vẫn được áp dụng lãi suất có kỳ hạn kể từ ngày gửi.
Phương pháp tính lãi suấ
Công thức tính lãi cho loại tiết kiệm có kỳ hạn |Nhóm 03
Tiền lãi = Số dư * Số tháng gửi * Lãi suất
Khách hàng gửi 10 triệu với kỳ hạn 2 tháng, lãi suất 1.2%/ tháng.
Tiền lãi = 10000000 * 2* 1.2% = 240000
Công thức tính lãi cho loại tiết kiệm không kỳ hạn
Tiền lãi = (Số dư * Lãi suất) / 30 * Số ngày
Với số tiền gửi không kỳ hạn là 10 triệu.
Ngày gửi: 1/4/20009, ngày tất toán 6/4/20009.
Giả sử lãi suất trong thời điểm khách hàng rút 0.6%
Tiền lãi = (10000000 * 0.6%) / 30 * 5 = 10 Phương thứ
Tiền gửi không kỳ hạn: Tiền lãi được nhập vào gốc tháng hoặc quý vào ngày đến hạn 
(rút hết số tiền gửi) nếu khách hàng không đến lãnh lãi.
Tiền gửi có kỳ hạn: Tiền lãi được trả trước vào ngày khách hàng gửi tiền (đối với loại 
tiết kiệm trả lãi trước); hoặc trả lãi định kỳ tháng, quý, 6 tháng, 1 năm (đối với loại tiết kiệm 
trả lãi định kỳ); hoặc trả lãi cuối kỳ (đối với loại tiết kiệm trả lãi sau).
Rút vốn trước hạn (áp dụng lãi bậc thang):
Khách hàng gửi tiền có kỳ hạn khi có nhu cầu rút vốn trước hạn được áp dụng lãi suất 
ở kỳ hạn tương đương với thời gian gửi thực tế hoặc mức lãi suất ở kỳ hạn ngắn hơn kế 
trước (nếu Ngân hàng không huy động loại kỳ hạn tương đương thời gian khách hàng đã  gửi)
VD : Khách hàng gửi 10 triệu loại tiết kiệm kỳ hạn 6 tháng lãnh lãi hàng tháng, lãi suất 
Ngày gửi : 1/4/2009, ngày hết hạn: 1/10/2009.
Ngày đến rút : 9/8/20009 => thời gian thực gửi là: 4 tháng, 8 ngày. Nếu tại thời điểm đó 
Ngân hàng huy động tiết kiệm 3 tháng (Lãi suất: 1.4%/ tháng) và không kỳ hạn lãi suất 
0.6%/ tháng, tiết kiệm 1 tháng lãi suất 1.1%/ tháng.
. Trả lãi kỳ hạn 3 tháng : 10000000 * 3 * 1.4% = 420000
. Trả lãi kỳ hạn 1 tháng : 10000000 * 1 * 1.1% = 110000
. Trả lãi không kỳ hạn: (10000000 * 8 * 0.6%) / 30 = 16000 |Nhóm 03
Tổng cộng : 420000 + 110000 + 16000 = 546000 |Nhóm 03
CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG
ế ế cơ sở ữ ệ ứ ệ
Từ mô tả về dữ liệu cần có ở phần mô tả bài toán, hình thành được sơ đồ thực thể kết hợp 
ế ế cơ sở ữ ệ ứ
Từ sơ đồ thực thể kết hợp (ERD), ta có các lược đồ quan hệ: ● ● ● ● ● ● ● ● ● |Nhóm 03 ● ● ● ● ● ● |Nhóm 03 ộ ầ RÀNG BUỘC Ràng buộc khoá chính 
Ràng buộc khoá ngoại MaNhanVien tham chiếu  đến 
Ràng buộc khoá chính MaGiaoDich, ràng buộc 
khoá ngoại MaNhanVien và MaGiaoDich tham  chiếu đến  Ràng buộc khoá chính  Ràng buộc khoá chính Ràng buộc khoá chính  Ràng buộc khoá chính  Ràng buộc khoá chính  Ràng buộc khoá chính 
buộc khoá ngoại MaHinhThucGui và 
MaHinhThucTraLai tham chiếu tới  Ràng buộc khoá chính  ràng buộc 
khoá ngoại MaChiNhanh tham chiếu đến  Ràng buộc khoá chính 
Ràng buộc khoá ngoại MaNhanVien, 
MaNhomNguoiDung tham chiếu đến  Ràng buộc khoá chính  , ràng buộc khoá 
ngoại MaSoTK tham chiếu đến 
Ràng buộc khoá ngoại MaSoTK, MaKhachHang  tham chiếu đến  Ràng buộc khoá chính  , ràng buộc khoá 
ngoại MaChiNhanh, MaLoaiTien, 
MaLoaiTietKiem tham chiếu đến  Cài đặ ộ
4.1. Tạo bảng và các ràng buộc đơn giản.
Bảng Chi nhánh CREATE TABLE CHI_NHANH  (    MaChiNhanh varchar(10),   
TenChiNhanh nvarchar(50) not null,    DiaChi nvarchar(50) not null,    primary key (MaChiNhanh)  )  |Nhóm 03    
Bảng Đăng nhập   CREATE TABLE DANG_NHAP  (   
MaNhanVien varchar(10) primary key REFERENCES NHAN_VIEN(MaNhanVien),   
TenDangNhap nvarchar(30) unique not null,   
MatKhau varchar(30) not null check(len(MatKhau)>=6)  )   
Bảng Giao dịch tiết kiệm  
CREATE TABLE GIAO_DICH_TIET_KIEM  (   
MaGiaoDich varchar(10) primary key,   
MaSoTK varchar(15) references TAI_KHOAN_TIET_KIEM(MaSoTK),   
SoTienGiaoDich money check (SoTienGiaoDich>=0),   
NgayGiaoDich date check (DATEDIFF(day, NgayGiaoDich, GETDATE())>=0),   
MaNhanVien varchar(10) REFERENCES NHAN_VIEN(MaNhanVien),   
MaLoaiGiaoDich varchar(10) REFERENCES LOAI_GIAO_DICH(MaLoaiGiaoDich),    NgayPhatSinhGiaoDich date,   
DaThanhToan bit DEFAULT 0 -- Có một số giao dịch sẽ tự động phát sinh khi đến 
thời hạn(lãi), giao dịch sẽ được đánh dấu đã thanh toán khi khách hàng đến giao dịch  )    
Bảng Hình thức gửi   CREATE TABLE HINH_THUC_GUI  (   
MaHinhThucGui varchar(10) primary key,   
TenHinhThucGui nvarchar(30) not null,    HanMucGui money --VND  )     
Bảng Hình thức trả lãi  
CREATE TABLE HINH_THUC_TRA_LAI  (   
MaHinhThucTraLai varchar(10) primary key,   
TenHinhThucTraLai nvarchar(50),  )    
Bảng Khách hàng   CREATE TABLE KHACH_HANG  (   
MaKhachHang varchar(10) primary key,    HoTen nvarchar(30) not null,   
NgaySinh date check (DATEDIFF(year, NgaySinh, GETDATE())>=15),   
SDT varchar(11) not null check(len(SDT)=10),   
MaDinhDanh varchar(15) UNIQUE check (len(MaDinhDanh)=9 or  len(MaDinhDanh)=12),   
NgayCap date, check (DATEDIFF(year,NgaySinh,NgayCap)>=14),    NoiCap nvarchar(100),    DiaChi nvarchar(100),    DangSuDung bit DEFAULT 1,  |Nhóm 03  
ChuKy VARBINARY (max) – hình ảnh chữ ký của khách hàng  )
Bảng Loại giao dịch   CREATE TABLE LOAI_GIAO_DICH  (   
MaLoaiGiaoDich varchar(10) primary key,   
TenLoaiGiaoDich nvarchar(30) not null,    LienQuanSoDu bit  )    
Bảng Loại tiền   CREATE TABLE LOAI_TIEN  (   
MaLoaiTien varchar(10) primary key,   
LoaiTien nvarchar(15) not null,    TiGiaVND money  )    
Bảng Loại tiết kiệm
 CREATE TABLE LOAI_TIET_KIEM  (   
MaLoaiTietKiem varchar(10) primary key,   
MaHinhThucGui varchar(10) references HINH_THUC_GUI(MaHinhThucGui),   
MaHinhThucTraLai varchar(10) references HINH_THUC_TRA_LAI(MaHinhThucTraLai),   
KyHan int check(KyHan>=0 and KyHan<=36),   
LaiSuat float check (LaiSuat>0)  )    
Bảng Nhân viên   CREATE TABLE NHAN_VIEN  (    MaNhanVien varchar(10) ,    HoTen nvarchar(30)not null,    NgaySinh date not null,   
MaDinhDanh varchar(15) check (len(MaDinhDanh)=9 or len(MaDinhDanh)=12),   
SDT varchar(11) check (len(SDT)=10),    primary key (MaNhanVien),   
MaChiNhanh varchar(10) references CHI_NHANH(MaChiNhanh) ON UPDATE CASCADE,   
TinhTrangLamViec bit DEFAULT 1  )    
Bảng Nhóm người dùng   CREATE TABLE NHOM_NGUOI_DUNG  (    MaNhomNguoiDung varchar(10),    TenNhom nvarchar(30),    TenRole varchar(20),    primary key (MaNhomNguoiDung)  )   |Nhóm 03  
Bảng Phân nhóm  CREATE TABLE PHAN_NHOM  (   
MaNhanVien varchar(10) primary key references NHAN_VIEN (MaNhanVien),   
MaNhomNguoiDung varchar(10) references NHOM_NGUOI_DUNG (MaNhomNguoiDung) ON  DELETE SET NULL  )     
Bảng Số dư tài khoản   CREATE TABLE SO_DU_TAI_KHOAN  (    MaSoDu varchar(10),   
MaSoTK varchar(15) REFERENCES TAI_KHOAN_TIET_KIEM(MaSoTK),    NgayGhiNhanSoDu date,    SoDu money,    PRIMARY KEY(MaSoDu, MaSoTK),  )
Bảng Sở hữu   CREATE TABLE SO_HUU  (   
MaSoTK varchar(15) REFERENCES TAI_KHOAN_TIET_KIEM(MaSoTK),   
MaKhachHang varchar(10) references KHACH_HANG(MaKhachHang),   
PRIMARY KEY (MaSoTK, MaKhachHang)  )    
Bảng Tài khoản tiết kiệm
 CREATE TABLE TAI_KHOAN_TIET_KIEM  (   
MaSoTK varchar(15) PRIMARY KEY,    NgayMoSo date,   
NgayDenHan date, -- Ngày Đến Hạn của sổ là ngày cuối sổ được tính lãi (Ngày 
Khách hàng được rút tiền gốc và đúng lãi)   
NgayTatToan date, -- Ngày khách hàng đến rút tất cả tiền lãi lần tiền gốc   
MaChiNhanh varchar(10) references CHI_NHANH(MaChiNhanh), --Mã chi nhánh mở sổ   
MaLoaiTien varchar(10) references LOAI_TIEN(MaLoaiTien), -- Mã loại tiền gửi   
MaLoaiTietKiem varchar(10) references LOAI_TIET_KIEM(MaLoaiTietKiem), --Mã  loại tiết kiệm   
NgayLaiNhapGoc date, -- Nếu trường hợp khách hàng không tất toán sổ sau ngày 
đến hạn thì tự động gia hạn sổ với tiền gốc mới = gốc cũ + lãi, loại tiết kiệm giữ  nguyên.   
KyTraLai int, -- Nếu trường hợp khách hàng chọn trả lãi đinh kỳ thì cần qui 
định thêm kỳ trả lãi (< kỳ hạn)   
HanGuiGop int, -- Nếu trường hợp khách hàng chọn gửi góp thì cần qui định 
thêm hạn gửi định kỳ (< kỳ hạn)   
TinhTrangSuDung bit DEFAULT 1,   
NgayGuiGopTiepTheo date, -- Ngày gửi góp tiếp theo nếu gửi góp   
NgayNhanLaiDinhKyTiepTheo date, -- Ngày nhận lãi định kỳ tiếp theo nếu gửi  lấy lãi định kỳ.  ) |Nhóm 03 ộ
Ràng buộc mã khách hàng khi thêm khách hàng  
-- Đặt ràng buộc mã khách hàng được tạo tự động.  USE QUANLYTAIKHOANTIETKIEM  CREATE TABLE KHACH_HANG 
ADD CONSTRAINT AUTO_IDKHACHHANG 
DEFAULT DBO.AUTO_IDCustomer() FOR MaKhachHang;  GO     
Ràng buộc mã sổ khi thêm sổ
-- Đặt ràng buộc mã sổ được tạo tự động.  USE QUANLYTAIKHOANTIETKIEM 
CREATE TABLE TAI_KHOAN_TIET_KIEM  ADD CONSTRAINT AUTO_IDSTKs 
DEFAULT DBO.AUTO_IDSTK() FOR MaSoTK;  GO  ể ộ
Trigger kiểm tra và điều chỉnh một số ràng buộc liên quan đến loại tiết kiệm của sổ
-- Trigger kiểm tra và điều chỉnh một số ràng buộc liên quan đến loại tiết kiệm của sổ 
CREATE TRIGGER Them_LTK ON LOAI_TIET_KIEM  AFTER INSERT  AS 
DECLARE @maLoaiTK varchar(10), @maHinhthucgui varchar(10), @maHinhthuctralai varchar(10), @kyHan int 
SELECT @maLoaiTK=nl.MaLoaiTietKiem, @maHinhthucgui=nl.MaHinhThucGui, 
@maHinhthuctralai=nl.MaHinhThucTraLai, @kyHan=nl.KyHan  FROM inserted nl  BEGIN    if @maHinhthucgui='HTG_G'    BEGIN     
--Với hình thức gửi góp thì hình thức trả lãi mặc định là trả sau và kỳ hạn phải trên  6 tháng     
UPDATE LOAI_TIET_KIEM SET MaHinhThucTraLai='HTTL_S' WHERE MaLoaiTietKiem=@maLoaiTK;      i  f @kyHan<6       
UPDATE LOAI_TIET_KIEM SET KyHan=6 WHERE MaLoaiTietKiem=@maLoaiTK;    END    if @kyHan=0     
-- Nếu kỳ hạn là 0 thì đây là hình thức gửi không kỳ hạn     
UPDATE LOAI_TIET_KIEM SET MaHinhThucTraLai='HTTL_S' WHERE MaLoaiTietKiem=@maLoaiTK;  END  GO   
Trigger khi xóa nhân viên thì sẽ đánh dấu nhân viên nghỉ và xóa tài khoản đăng 
nhập của người đó khỏi hệ thống
-- Trigger khi xóa nhân viên thì sẽ đánh dấu nhân viên nghỉ và xóa tài khoản đăng nhập của người đó  khỏi hệ thống 
CREATE TRIGGER XoaNhanVien ON NHAN_VIEN  INSTEAD OF DELETE  AS  DECLARE @maNV varchar(10)  SELECT @maNV=ol.MaNhanVien  FROM deleted ol  SET XACT_ABORT ON  BEGIN TRAN    BEGIN TRY     
-- Cập nhật tình trạng tình việc của nhân viên là đã nghỉ      UPDATE NHAN_VIEN SE 
T TinhTrangLamViec=0 WHERE MaNhanVien=@maNV;        DECLARE @tenUser varchar(15)  ; |Nhóm 03    
SELECT @tenUser=TenDangNhap FROM DANG_NHAP WHERE MaNhanVien=@maNV       
-- Xóa user của nhân viên      DECLARE @sql varchar(100)      SE 
T @sql = 'DROP USER '+ @tenUser      exe  c @sql       
-- Xóa nhân viên khỏi phân nhóm     
DELETE FROM PHAN_NHOM WHERE MaNhanVien=@maNV;       
-- Xóa tài khoản login của nhân viên khỏi server      SE 
T @sql = 'DROP LOGIN '+ @tenUser      exe  c @sql       
-- Xóa tài khoản đăng nhập của nhân viên khỏi bảng Đăng nhập     
DELETE FROM DANG_NHAP WHERE MaNhanVien=@maNV;      COMMIT TRAN    END TRY    BEGIN CATCH      ROLLBACK    END CATCH  GO   
Trigger tạo một user trên SQL khi thêm một nhân viên
CREATE TRIGGER CreateSQLAccount ON DANG_NHAP  AFTER INSERT  AS 
DECLARE @userName nvarchar(30), @passWord nvarchar(10) 
SELECT @userName=nl.TenDangNhap, @passWord=n . l MatKhau  FROM inserted nl  BEGIN   
DECLARE @sqlString nvarchar(2000)   
-- Tạo tài khoản login cho nhân viên, tên người dùng và mật khẩu là tài khoản được tạo trên  bảng Đăng nhập   
SET @sqlString= 'CREATE LOGIN [' + @userName +'] WITH PASSWORD='''+ @passWord +''', 
DEFAULT_DATABASE=[QUANLYTAIKHOANTIETKIEM], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'    EXEC (@sqlString)     
-- Tạo tài khoản người dùng đối với nhân viên đó trên database (tên người dùng trùng với tên  login)   
SET @sqlString= 'CREATE USER ' + @userName +' FOR LOGIN '+ @userName    EXEC (@sqlString)  END  GO
Trigger kiểm tra và điều chỉnh một số ràng buộc liên quan đến loại tiết kiệm của sổ
CREATE TRIGGER Them_LTK ON LOAI_TIET_KIEM  AFTER INSERT  AS 
DECLARE @maLoaiTK varchar(10), @maHinhthucgui varchar(10), @maHinhthuctralai varchar(10), @kyHan int 
SELECT @maLoaiTK=nl.MaLoaiTietKiem, @maHinhthucgui=nl.MaHinhThucGui, 
@maHinhthuctralai=nl.MaHinhThucTraLai, @kyHan=nl.KyHan  FROM inserted nl  BEGIN    if @maHinhthucgui='HTG_G'    BEGIN     
--Với hình thức gửi góp thì hình thức trả lãi mặc định là trả sau và kỳ hạn phải trên  6 tháng     
UPDATE LOAI_TIET_KIEM SET MaHinhThucTraLai='HTTL_S' WHERE MaLoaiTietKiem=@maLoaiTK;      i  f @kyHan<6       
UPDATE LOAI_TIET_KIEM SET KyHan=6 WHERE MaLoaiTietKiem=@maLoaiTK;    END    if @kyHan=0     
-- Nếu kỳ hạn là 0 thì đây là hình thức gửi không kỳ hạn     
UPDATE LOAI_TIET_KIEM SET MaHinhThucTraLai='HTTL_S' WHERE MaLoaiTietKiem=@maLoaiTK;  END  GO
Trigger Kiểm tra các thông tin về sổ tiết kiệm trước khi thêm một sổ mới.
CREATE TRIGGER THEM_TAI_KHOAN_TIET_KIEM O  N TAI_KHOAN_TIET_KIEM  |Nhóm 03 AFTER INSERT  AS 
DECLARE @maTK varchar(15), @maLoaiTK varchar(10) 
, @kyTralai int, @hanGuigop int, @kyHanso in  t
SELECT @maTK=nl.MaSoTK, @maLoaiTK=nl.MaLoaiTietKiem, @kyTralai=nl.KyTraLai, @hanGuigop=nl.HanGuiGop  FROM inserted nl  BEGIN    BEGIN TRA  N   BEGIN TR  Y     DECLAR 
E @kyHan int, @maHinhthuctralai varchar(10)  , @maHinhthucgui varchar(10)  ;     SE  T @kyHan= (SELECT KyHan fro  m LOAI_TIET_KIEM wher  e MaLoaiTietKiem=@maLoaiTK);        UPDAT  E TAI_KHOAN_TIET_KIEM SE 
T NgayLaiNhapGoc=NgayMoSo where MaSoTK=@maTK;      i  f @kyHan=0        UPDATE TAI_KHOAN_TIET_KIEM SE 
T NgayDenHan=null, NgayTatToan=null, KyTraLai=null, 
HanGuiGop=null where MaSoTK=@maTK;      els  e    
-- Đối với sổ có kỳ hạn      BEGI  N      
-- Tính ngày đến hạn của sổ        UPDATE TAI_KHOAN_TIET_KIEM SE 
T NgayDenHan=DATEADD(day, 30*@kyHan, NgayMoSo) where  MaSoTK=@maTK;       
SET @maHinhthuctralai= (SELECT MaHinhThucTraLai fro  m LOAI_TIET_KIEM WHERE  MaLoaiTietKiem=@maLoaiTK);       
SET @maHinhthucgui= (SELECT MaHinhThucGui from LOAI_TIET_KIEM WHER  E MaLoaiTietKiem=@maLoaiTK);          if @maHinhthucgui='HTG_1L'        BEGIN         
-- Đối với gửi lãi trả trước hoặc trả sau:         
if (@maHinhthuctralai='HTTL_S') OR (@maHinhthuctralai='HTTL_T')            UPDATE TAI_KHOAN_TIET_KIEM SE  T KyTraLai=@kyHan wher  e MaSoTK=@maTK;          else         
-- Đối với trả lãi định kỳ           
if (@kyTralai>@kyHan) or (@kyHan % @kyTralai !=0) or (@kyTralai=null  )             UPDATE TAI_KHOAN_TIET_KIEM SE 
T KyTraLai=1 where MaSoTK=@maTK;         
-- Tính ngày lấy lãi đầu tiên của sổ tiết kiệm định kỳ          UPDATE TAI_KHOAN_TIET_KIEM SE 
T NgayNhanLaiDinhKyTiepTheo=DATEADD(da , y  30*@kyTralai, NgayMoSo) 
, NgayGuiGopTiepTheo=null wher  e MaSoTK=@maTK;        END        else        BEGIN         
if (@hanGuigop>@kyHan) or (@kyHan % @hanGuigop !=0) or (@hanGuigop=null)              UPDATE TAI_KHOAN_TIET_KIEM SE  T HanGuiGop=1 where  MaSoTK=@maTK;         
-- Tính ngày gửi góp tiếp theo của sổ gửi góp          UPDATE TAI_KHOAN_TIET_KIEM SE 
T NgayGuiGopTiepTheo=DATEADD(day, 30*@hanGuigop, 
NgayMoSo), NgayNhanLaiDinhKyTiepTheo=null where MaSoTK=@maT ; K        END      EN  D     COMMI  T TRAN      EN  D TR  Y     BEGI  N CATCH        ROLLBACK      EN  D CATC  H   END  GO
Trigger Kiểm tra khi một sổ tiết kiệm đã tất toán (đóng sổ) thì sẽ đóng tình trạng sử 
dụng của chủ sổ (nếu chỉ có 1 sổ)
CREATE TRIGGER DongSo ON TAI_KHOAN_TIET_KIEM  AFTER UPDATE  AS 
DECLARE @maSo varchar(15), @trangThai bit 
SELECT @maSo=nl.MaSoTK, @trangThai=n . l TinhTrangSuDung  FROM inserted nl  BEGIN   
DECLARE @num_Chu int, @index int=1, @TEMP varchar(10)  ;   if (@trangThai=0)    BEGIN      DECLARE @chuMaso TABLE (Id in 
t not null primary key identity(1,1), ChuSo varchar(10)  , SoSo int)  ;    
INSERT INTO @chuMaso (ChuSo, SoSo) SELECT * FROM LAY_CHU_SO(@maSo) WHERE SoLuongSo=1;      SE  T @num_Chu = @@ROWCOUNT;     
WHILE @index<=@num_Chu -- Countdown      BEGIN       
SELECT @TEMP= ChuSo FROM @chuMaso WHERE Id=@index;        UPDATE KHACH_HANG SE 
T DangSuDung=0 WHERE MaKhachHang=@TEMP;        SET @index = @index + 1;      EN  D   END  |Nhóm 03 
