Quy định mỗi nhân viên có một mã nhân viên, ngày vào làm ,độ tuổi yêu cầu là trên 18 tuổi Phòng ban cần có các thông tin: mã phòng ban để xác định cùng với tên phòng ban và mã dự án mà
Phát biểu bài toán
Xây dựng mô hình thực thể liên kết
Theo bài toán trên, chúng ta xác định được thực thể và thuộc tính:
Nhân Viên: sMaNV, sTenNV, dNgaySinh, dNgayVaoLam, sDiaChi,sSodienthoai
Phòng Ban: sMaPB, sTenPB, sDiaDiem.
Thời gian công tác: dNgayBDnhamchuc.
Hệ số lương: iHesoluong, fLuongtuongung
Tiền Phụ Cấp: iMucpgucap, fTientuongung
Xác định liên kết giữa các thực thể:
Giữa 2 tập thực thể NhanVien và PhongBan có mối liên kết “thuộc” vì một PhongBan
Có nhiều NhanVien và mỗi NhanVien chỉ thuộc một PhongBan
=> Mối liên kết giữa 2 tập thực thể có kiểu liên kết là “ 1 – n ”.
Giữa 2 tập thực thể NhanVien và ThoiGianCongTac có mối liên kết “thỏa ước” vì một
NhanVien có các chức vụ vào các thời gian khác nhau
=> Mối liên kết giữa 2 tập thực thể có kiểu liên kết là “ 1 – n ”.
Giữa 2 tập thực thể ChucVu và ThoiGianCongTac có mối liên kết “chứa” vì một chỉ có một ChucVu của một nhân viên được nhận vào thời gian khác nhau
=> Mối liên kết giữa 2 tập thực thể có kiểu liên kết là “1 – n”.
Giữa 2 tập thực thể NhanVien và ChucVu có mối liên kết “đảm nhiệm” vì 1 NhanVien chỉ đảm nhiệm 1 ChucVu
=> Mối liên kết giữa 2 tập thực thể có kiểu liên kết là “1 – 1”
Giữa 2 tập thực thể NhanVien và Luongcó mối liên kết “hưởng” trong thời điểm khác nhau
=> Mối liên kết giữa 2 tập thực thể có kiểu liên kết là “1 – n”
Giữa 2 tập thực thể Lương và Hệ số lương có mối liên kết “chứa” vì 1 mức Lương có nhiều hệ số lương
=> Mối liên kết giữa 2 tập thực thể có kiểu liên kết là “1 – n”
Giữa 2 tập thực thể Lương và Tiền phụ cấp có mối liên kết “chứa” vì 1 mức Lương có nhiều hệ số phụ cấp
=> Mối liên kết giữa 2 tập thực thể có kiểu liên kết là “1 – n”
2.Xây dựng mô hình cơ sở dữ liệu quan hệ
* Quy tắc với thực thể mạnh
NhanVien (s MaNV , sTenNV, dNgaySinh, dNgayVaoLam, sDiaChi,sSodienthoai).
NhanVien ( s MaNV , sTenNV, dNgaySinh,dNgayVaoLam ,sDiaChi, sSodienthoai, sMaPB).
Luong(sMaNV, iHesoluong, iMucphucap, dNgayhuong, fTamung, iSongaynghi)
* Quy tắc với liên kết 1-1:
NhanVien ( s MaNV , sMaCV,sTenNV, dNgaySinh,dNgayVaoLam ,sDiaChi, sSodienthoai, sMaPB,).
= > Cơ sở dữ liệu cuối cùng:
NhanVien ( s MaNV , sMaCV,sTenNV, dNgaySinh,dNgayVaoLam ,sDiaChi, sSodienthoai, sMaPB,).
Luong(sMaNV, iHesoluong, iMucphucap, dNgayhuong, fTamung, iSongaynghi) ChucVu(sMaCV, sTenCV).
3.Chuẩn hóa cơ sở dữ liệu của bài toán
Từ mô hình quan hệ ta suy ra các phụ thuộc hàm:
MaNV TenNV, NgaySinh, ĐiaChi, ĐienThoai, sMaPB, sMaCV
sMaNV iHesoluong, iMucphucap, dNgayhuong, fTamung, iSongaynghi
Từ các phụ thuộc hàm trên ta thấy:
- Mọi thuộc tính đều là nguyên tố, giá trị các thuộc tính trên bộ là đơn trị, không có thuộc tính nào có giá trị được tính toán từ một số thuộc tính khác.
Lược đồ quan hệ trên đã ở dạng chuẩn 1NF.
- Mọi thuộc tính không khóa của quan hệ đều phụ thuộc hàm đầy đủ vào khóa chính.
Lược đồ quan hệ trên đã ở dạng chuẩn 2NF.
- Mọi thuộc tính không khóa của quan hệ đều không phụ thuộc bắc cầu vào bất kì khóa chính của quan hệ.
Lược đồ quan hệ trên đã ở dạng chuẩn 3NF.
Vậy lược đồ quan hệ đã được chuẩn hóa về dạng cao nhất – 3NF
Mô hình LK Database Diagrams
Các bảng cơ sở dữ liệu của bài toán
Xây dựng các bảng của bài toán
- tblNhanVien: sMaNV, sTenNV, dNgaySinh, sDiaChi, dNgayvaolam, sMaCV, sSoDienThoai,sMaPB
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaNV nvarchar(20) PK Mã nhân viên
2 sTenNV nvarchar(30) Tên nhân viên
5 dNgayvaolam Date Ngày vào làm
7 sSoDienThoai VARCHAR(15) Số điện thoại
8 sMaPB nvarchar (10) FK Mã phòng ban
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaCV nvarchar(30) PK Mã chức vụ
2 sTenCV nvarchar(20) Tên chức vụ
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaPB nvarchar(10) PK Mã phòng ban
2 sTenPB nvarchar(20) Tên phòng ban
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 iHesoluong Int PK Mã Lương
2 fLuongtuongung Float Tiền lương tương ứng
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 iTMucphucap Int PK Mã hệ số
2 fTientuongung Float Tiền tương ứng
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaNV nvarchar(20) FK Mã nhân viên
2 sMaCV nvarchar(30) FK Mã chức vụ
3 dNgayBD Date Ngày bắt đầu nhận chức
- tblLuong: sMaNV, iHesoluong, iMucphucap, dNgayhuong, fTamung, iSongaynghi
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaNV nvarchar(20) FK Mã nhân viên
2 iHesoluong Int FK Mã Lương
3 iMucphucap Int FK Mã hệ số
5 fTamung Float Tiền tạm ứng
6 iSongaynghi Int Số ngày Nghỉ
Tạo bảng
Bang nhanvien create table NhanVien
( sMaNV nvarchar(20) NOT NULL, sTenNV nvarchar(30), sMaCV NVARCHAR(30), dNgaySinh date, dNgayVaoLam date, sDiaChi nvarchar(30), sSoDienThoai char(20), sMaPB nvarchar (10),
Bang phong ban create table PhongBan
( sMaPB nvarchar(10) NOT NULL, sTenPB nvarchar(20)
Bang thoi gian cong tac
CREATE TABLE thoigiancongtac( sMaNV NVARCHAR(20), sMaCV NVARCHAR(30)
ALTER TABLE dbo.thoigiancongtac ALTER COLUMN sMaNV NVARCHAR(20) Bang chuc vu create table ChucVu
( sMaCV nvarchar(30) NOT NULL, sTenCV nvarchar(20)
ALTER TABLE dbo.ChucVu ALTER COLUMN sMaCV NVARCHAR(30) NOT NULL
Bang luong create table Luong
( sMaNV nvarchar(10), iHesoluong INT, iMucphucap int , dNgayhuong DATETIME, fTamung FLOAT, iSongaynghi INT
ALTER TABLE dbo.Luong ALTER COLUMN sMaNV NVARCHAR(20)
CREATE TABLE TienPhuCap( iMucphucap INT NOT NULL, fTientuongung FLOAT
CREATE TABLE HeSoLuong( iHesoluong INT NOT NULL, fLuongtuongung FLOAT
Khóa
ALTER TABLE dbo.NhanVien ADD CONSTRAINT PK_NhanVien PRIMARY KEY(sMaNV)
ALTER TABLE dbo.ChucVu ADD CONSTRAINT PK_chucvu PRIMARY
ALTER TABLE dbo.PhongBan ADD CONSTRAINT PK_phongban PRIMARY KEY(sMaPB)
ALTER TABLE dbo.TienPhuCap ADD CONSTRAINT PK_tienphucap PRIMARY KEY(iMucphucap)
ALTER TABLE dbo.HeSoLuong ADD CONSTRAINT PK_hesoluong PRIMARY KEY(iHesoluong)
ALTER TABLE dbo.NhanVien ADD CONSTRAINT FK_Nhanvien_chucvu
FOREIGN KEY(sMaCV) REFERENCES dbo.ChucVu(sMaCV),
CONSTRAINT FK_Nhanvien_PhongBan FOREIGN KEY(sMaPB) REFERENCES dbo.PhongBan(sMaPB)
ALTER TABLE dbo.thoigiancongtac ADD CONSTRAINT
FK_thoigiancongtac_nhanvien FOREIGN KEY(sMaNV) REFERENCES dbo.NhanVien(sMaNV),
CONSTRAINT FK_thoigiancongtac_chucvu FOREIGN KEY(sMaCV)
ALTER TABLE dbo.Luong ADD CONSTRAINT FK_luong_nhanvien FOREIGN KEY(sMaNV) REFERENCES dbo.NhanVien(sMaNV),
CONSTRAINT FK_luong_hesoluong FOREIGN KEY(iHesoluong) REFERENCES dbo.HeSoLuong(iHesoluong),
CONSTRAINT FK_luong_phucap FOREIGN KEY(iMucphucap) REFERENCES dbo.TienPhuCap(iMucphucap)
Ràng buộc miền giá trị
Nhan vien phải từ 18 tuổi trở lên
ALTER TABLE dbo.NhanVien ADD CONSTRAINT ck_nhanvien
CHECK(FLOOR(DATEDIFF(DAY,dNgaySinh,dNgayVaoLam)/365)>)
Nhập dữ liệu
bảng PhongBan insert into PhongBan(sMaPB,sTenPB,sDiaDiem) values('20A01',N'Ban Quản Trị',N'Hà Nội') insert into PhongBan(sMaPB,sTenPB,sDiaDiem) values('20A02',N'Ban Tổng Giám Đốc',N'Hồ Chí Minh') insert into PhongBan(sMaPB,sTenPB,sDiaDiem) values('20A03',N'Ban Kiểm Soát',N'Thanh Hóa') insert into PhongBan(sMaPB,sTenPB,sDiaDiem) values('20A04',N'Ban Kiểm Toán',N'Bắc Ninh') insert into PhongBan(sMaPB,sTenPB,sDiaDiem) values('20A05',N'Ban Quản Lí',N'Hà Nội')
Bảng Chức Vụ insert into dbo.ChucVu (sMaCV,sTenCV) values('1A1',N'Trưởng Phòng') insert into dbo.ChucVu (sMaCV,sTenCV) values('1A3',N'Nhân Viên') insert into dbo.ChucVu (sMaCV,sTenCV) values('1A2',N'Phó Phòng') insert into dbo.ChucVu (sMaCV,sTenCV) values('1A4',N'Thử Việc')
INSERT INTO dbo.TienPhuCap(iMucphucap,fTientuongung) VALUES(0,0.0)
INSERT INTO dbo.TienPhuCap(iMucphucap,fTientuongung) VALUES(1,150)
INSERT INTO dbo.TienPhuCap(iMucphucap,fTientuongung) VALUES(2,185)
INSERT INTO dbo.TienPhuCap(iMucphucap,fTientuongung) VALUES(3,200)
INSERT INTO dbo.TienPhuCap(iMucphucap,fTientuongung) VALUES(4,300)
INSERT INTO dbo.TienPhuCap(iMucphucap,fTientuongung) VALUES(5,350)
INSERT INTO dbo.HeSoLuong(iHesoluong,fLuongtuongung) VALUES(1,1000)
INSERT INTO dbo.HeSoLuong(iHesoluong,fLuongtuongung) VALUES(2,1500)
INSERT INTO dbo.HeSoLuong(iHesoluong,fLuongtuongung) VALUES(3,2500)
INSERT INTO dbo.HeSoLuong(iHesoluong,fLuongtuongung) VALUES(4,3000)
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'001', N'Bùi Tuấn Anh', N'1A1', '1999-11-25','2019-10-25', N'Hà Nội', '0383865954', N'20A01', N'Nam')
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'002', N'Trần Thế Anh', N'1A1', '1995-10-25','2018-11-20', N'Hồ Chí Minh', '0380989873', N'20A02', N'Nam')
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'003', N'Trần Lan Anh', N'1A1', '1992-03-20','2021-3-12', N'Hà Nội', '0104957289', N'20A03', N'Nữ')
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'004', N'Nguyễn Thanh Bình', N'1A1', '2002-10-25','2019-10-25', N'Hà Nội', '0956861121', N'20A04', N'Nam')
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'005', N'Nguyễn Thị A', N'1A3', '2002-11-3','2020-12-21', N'Bắc Giang', '0383865954', N'20A05', N'Nữ')
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'006', N'Trần Văn C', N'1A2', '1992-12-1','2019-10-25', N'Quảng Ninh', '0183486297', N'20A05', N'Nam')
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'007', N'Trần Lan Anh', N'1A4', '2001-12-3','2019-10-25', N'Hưng Yên', '0456982923', N'20A01', N'Nữ')
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'008', N'Trần Thu Chiên', N'1A3', '1990-10-25','2020-5-4', N'Quảng Bình', '0383865954', N'20A04', N'Nam')
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'009', N'Đào Văn Hai', N'1A2', '1998-4-12','2019-11-12', N'Hà Nội', '0383865954', N'20A03', N'Nam')
INSERT INTO dbo.NhanVien(sMaNV,sTenNV,sMaCV,dNgaySinh,dNgayVaoLam,sDiaChi,sSoDien Thoai,sMaPB,sgioitinh)
VALUES(N'010', N'Trần Thị Tý', N'1A3', '2002-1-1','2021-11-3', N'Hưng Yên', '0383865954', N'20A02', N'Nữ')
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi) VALUES(N'001',4,0,'2019-12-31',0.0,4)
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi) VALUES(N'002',4,0,'2018-12-20',0.0,0)
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi) VALUES(N'003',4,0,'2021-3-12',0.0,1)
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi) VALUES(N'004',4,0,'2019-12-25',0.0,2)
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi) VALUES(N'005',4,0,'2021-1-22',0.0,2)
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi) VALUES(N'006',3,0,'2019-11-30',0.0,0)
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi) VALUES(N'007',1,0,'2019-12-25',0.0,0)
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi) VALUES(N'008',4,0,'2020-6-4',0.0,0)
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi)VALUES(N'009',3,0,'2019-12-15',0.0,1)
INSERT INTO dbo.Luong(sMaNV,iHesoluong,iMucphucap,dNgayhuong,fTamung,iSongaynghi) VALUES(N'010',1,0,'2021-12-3',0.0,0)
SELECT sMaNV,sMaCV,dNgayVaoLam FROM dbo.NhanVien
Bảng thời gian công tác
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
INSERT INTO dbo.thoigiancongtac(sMaNV,sMaCV,dNgayBD)
Thực hiện các yêu cầu sau
Truy Vấn Dữ Liệu
Câu 1: Lấy thông tin phòng ban có tên phòng ban là "Ban Quản Trị" select * from PhongBan where sTenPB= N'Ban Quản Trị'
Câu 2: Lấy thông tin nhân viên có độ tuổi từ 18 trở lên select * from NhanVien where (datediff(year,dNgaysinh,getdate())>)
Câu 3: Lấy thông tin nhân viên có hệ số lương lớn hơn hoặc bằng 3 select * from Luong where iHesoluong >=3
Câu 4: Tính tổng số ngày nghỉ của tất cả các nhân viên select sum(iSongaynghi) as[Tổng số ngày nghỉ của tất cả nv] from Luong
Câu 5: Lấy danh sách gồm tên nhân viên và tên phòng ban của nhân viên đó select sTenNV,sTenPB from NhanVien,PhongBan where NhanVien.sMaPB = PhongBan.sMaPB
Câu 6: Lấy ra tên nhân viên và hệ số lương của từng người select sTenNV,luong.iHesoluong from NhanVien inner join Luong on NhanVien.sMaNV= Luong.sMaNV
Câu 7: Lấy ra tên nhân viên có tháng sinh là tháng 10 select * from NhanVien where month(dngaysinh) = 10
Câu 8: Lấy ra tất cả thông tin nhân viên có tên chức vụ là Trưởng Phòng select sTenNV, sMaNV from NhanVien inner join ChucVu on NhanVien.sMaCV = ChucVu.sMaCV where sTenCV = N'Phó Phòng'
Câu 9: Lấy ra tất cả thông tin nhân viên có năm sinh lớn hơn 1999 select * from NhanVien inner join thoigiancongtac on NhanVien.sMaNV = thoigiancongtac.sMaNV where year(dNgaySinh) > 1999
Câu 10: In ra nhân viên có hệ số lương nhỏ hơn 3 và quê phải ở Hưng Yên select * from NhanVien inner join Luong on Luong.sMaNV = NhanVien.sMaNV where iHesoluong