By GokiSoft.com| 17:18 21/03/2022|
SQL Server/MySQL

[Source Code] Xây dựng CSDL quản lý điểm danh aptech - Lập trình SQL Server/MySQL - C2110I

Xây dựng CSDL quản lý điểm danh aptech - Lập trình SQL Server/MySQL




-- Tao CSDL
create database BT1810
go

-- Kich hoat CSDL
use BT1810
go

-- Tao tables
create table Student (
	rollno int primary key identity(1,1),
	fullname nvarchar(50) not null,
	email nvarchar(150),
	phone_number nvarchar(20)
)
go

create table Teacher (
	id int primary key identity(1,1),
	fullname nvarchar(50) not null,
	email nvarchar(150),
	phone_number nvarchar(20)
)
go

create table Subject (
	id int primary key identity(1,1),
	name nvarchar(50),
	session_count int,
	constraint ck_session_count check (session_count > 0)
)
go

create table Class (
	id int primary key identity(1,1),
	name nvarchar(50),
	note nvarchar(150)
)
go

create table ClassMember (
	rollno int references Student (rollno),
	class_id int references Class (id),
	joined_date date,
	outed_date date
)
go

create table Schedule (
	id int primary key identity(1,1),
	teacher_id int references Teacher (id),
	subject_id int references Subject (id),
	class_id int references Class (id),
	start_date date,
	end_date date
)
go

create table Attendence (
	id int primary key identity(1,1),
	schedule_id int references Schedule (id),
	rollno int references Student (rollno),
	status_1 nvarchar(5), -- P | PA | A
	date_1 datetime,
	status_2 nvarchar(5),
	date_2 datetime,
	note nvarchar(250)
)
go

-- Insert Data
insert into Student (fullname, email, phone_number)
values
('Sinh Vien A', 'a@gmail.com', '123213'),
('Sinh Vien B', 'b@gmail.com', '123213'),
('Sinh Vien C', 'c@gmail.com', '123213')
go

insert into Class (name)
values
('Lop Hoc A'),
('Lop Hoc B')
go

insert into ClassMember(class_id, rollno)
values
(1, 1),
(1, 2),
(2, 3)
go

insert into Teacher (fullname, email, phone_number)
values
('Giao Vien A', 'gva@gmail.com', '123213'),
('Giao Vien B', 'gvb@gmail.com', '123213'),
('Giao Vien C', 'gvc@gmail.com', '123213')
go

insert into Subject (name, session_count)
values
('Lap Trinh C', 40),
('SQL Server', 36)
go

insert into Schedule (class_id, subject_id, teacher_id, start_date, end_date)
values
(1, 1, 1, '2022-02-18', '2022-03-18'),
(2, 2, 1, '2022-03-22', '2022-04-22')
go

insert into Attendence (schedule_id, rollno, status_1, date_1, status_2, date_2, note)
values
(1, 1, 'P', '2022-02-20 13:45', 'P', '2022-02-20 17:00', 'OK'),
(1, 2, 'P', '2022-02-20 13:45', 'A', '2022-02-20 17:00', 'Chon Hoc')
go

-- proc
create proc proc_view_student_list
	@classId int
as
begin
	select Student.rollno, Student.fullname, Class.name 'Class Name'
	from Student, Class, ClassMember
	where Student.rollno = ClassMember.rollno
		and Class.id = ClassMember.class_id
		and Class.id = @classId
end

exec proc_view_student_list 1
exec proc_view_student_list 2

-- Thong tin hien thi: rollno (Student), student name (Student), class name (Class),  Teacher name (Teacher), Subject Name (Subject), Status 1 (Attendence), Status 2 (Attendence)
create proc proc_find_attendence
	@classId int,
	@subjectId int
as
begin
	select Student.rollno, Student.fullname, Class.name 'Class Name', Teacher.fullname 'Teacher Name', Subject.name 'Subject Name', Attendence.status_1, Attendence.status_2
	from Student, Attendence, Class, Schedule, Teacher, Subject
	where Student.rollno = Attendence.rollno
		and Attendence.schedule_id = Schedule.id
		and Schedule.subject_id = Subject.id
		and Schedule.teacher_id = Teacher.id
		and Schedule.class_id = Class.id
		and Schedule.class_id = @classId
		and Schedule.subject_id = @subjectId
end

exec proc_find_attendence 1, 1
exec proc_find_attendence 1, 2

-- trigger
create trigger trigger_instead_of_student on Student
instead of delete
as
begin
	-- Foreign: Class Member
	delete from ClassMember where rollno in (select rollno from deleted)

	-- Foreign: Attendence
	delete from Attendence where rollno in (select rollno from deleted)

	-- Primary key
	delete from Student where rollno in (select rollno from deleted)
end

select * from Student
select * from ClassMember
select * from Attendence

delete from Student where rollno = 1




Tags:



Phản hồi từ học viên

5

(Dựa trên đánh giá ngày hôm nay)

Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó