Bài tập trigger quản lý sinh viên

@vanhop , @btm nói đúng đó e, mấy bài này là những bài cơ bản nhất, sau này e học sẽ gặp những bài phức tạp hơn nhiều, e cứ chịu khó làm hết mấy bài cơ bản, rồi từ từ sẽ làm dc những bài phức tạp hơn. Ngày trước a cũng chỉ được học sâu hơn chút thôi, giờ ra không đụng đến nến cũng không khá hơn ngày trước là bao. Giúp dc đến đâu a sẽ giúp. Hơn nữa, trong các lệnh if, else e nên để cặp begin,end giống như if, else trong C/C++ nên để trong cặp {}

Mỗi buổi học sẽ diễn ra từ 1 - 2h nhằm đảm bảo lượng kiến thức bạn tiếp thu được tốt nhất. Có thể nắm bắt, hiểu sâu và tự giải quyết các vấn đề tương tự. 

Trong đó mỗi buổi học tương ứng 100%: 

  • 30% thời gian đầu tiên: Giải quyết bài tập của bài trước, giải quyết câu hỏi của các bạn về bài tập đó. [nếu có]
  • 10% thời gian tiếp theo: Tổng quan kiến thức đã học ở bài trước, giới thiệu kiến thức sẽ áp dụng tại bài này.
  • 30% thời gian tiếp theo: Đi vào nội dung bài mới.
  • 20% thời gian tiếp theo: Trao đổi thảo luận các câu hỏi của các bạn về bài học mới.
  • 10% thời gian cuối cùng: Bài tập + định hướng cách giải. 

Hình thức học 

  • Các bạn truy cập Khóa học thực chiến SQL  trên web  Howkteam.com  để xem nội dung buổi học 15 phút trước livestream. [yêu cầu có tài khoản user]
  • Trong thời gian công chiếu, bạn có thể đặt câu hỏi LIÊN QUAN ĐẾN KIẾN THỨC VÀ NỘI DUNG KHÓA HỌC trong phần bình luận của bài viết hoặc phần livestream. [Vào các thời gian thảo luận &  giải đáp người hướng dẫn sẽ giải đáp và cùng thảo luận với các bạn về các câu hỏi đó]
  • Ngoài ra, bạn có thể tham gia bình luận để giải đáp cho các thành viên đó, nếu phần kiến thức được hỏi nằm trong hiểu biết của bạn. Kteam luôn khuyến khích sự hỗ trợ từ cộng đồng đến với mọi người.
  • Khóa học thực chiến SQL sẽ chia thành nhiều phần, với mỗi phần tương ứng một bài tập lớn diễn ra trong vòng 5 - 7 ngày liên tiếp nhau vào các khung giờ cố định.

Khảo sát khóa học

Như đã thông báo trong khảo sát trước, nhằm đánh giá & xác định chất lượng kiến thức truyền tải, Kteam sẽ tiến hành khảo sát với các thành viên trong khóa học này. Hy vọng nhận được sự hỗ trợ từ các bạn tham gia khóa học. 

  • Cụ thể, sau mỗi buổi học bạn sẽ nhận được file khảo sát để xem xét mức độ hiểu bài & giải đáp những thắc mắc mà bạn còn chưa kịp hỏi hoặc chưa được trả lời trong quá trình công chiếu vì thời gian giới hạn. 
  • Các thành viên hoàn thành file khảo sát sau buổi học, sẽ nhận mail thông báo về livestream tiếp theo qua email cũng như nhận được sự giám sát tiến độ và đảm bảo kết quả sau khóa học. 

Kết

Trong bài này,chúng ta đã tìm hiểu về Ràng buộc trong dự án quản lý sinh viên. Buổi học đã được diễn ra vào lúc 20h ngày 17/07/2019 tại phần trình chiếu của bài  Ràng buộc trong dự án quản lý sinh viên - phần 2 trên Howkteam.com

Lưu ý: Sau bài học, Kteam sẽ gửi mail Khảo sát & giải đáp câu hỏi đến mail đã đăng ký của các bạn. Hoàn thành mail trước buổi học tiếp theo để xác nhận đã tham gia buổi học và đăng ký nhận đường dẫn kèm học liệu cho buổi học tiếp theo.

Ở bài sau, chúng ta sẽ  TỔNG KẾT KHÓA & GIẢI ĐÁP THẮC MẮC

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó” 

Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.


Sử dụng store procduced và trigger để xây dựng các chương trình quản lý
I]Tạo bảng

thành viên:
+lại văn dũng Nhóm trưởng:xây dựng ,phân công nhiệm vụ[
dung.1300984@thanhdo.edu.vn]
+Lê xuân linh : viết chương trình kết nối csdl[
thoicungduoc0@gmail.com]
+lê hữu đoàn:xây dựng thêm truy vấn liên quan[
doan.1300738@thanhdo.edu.vn]
+hoàng văn sơn :hoàn thiện chương trình[
son.1300915@thanhdo.edu.vn]
+lương kim lương:kiểm tra,test chương trình[
luongevil@gmail.com+trần xuân minh:đóng góp ý tưởng liên quan]

+]Tạo bảng đăng nhập

USE [QLsinhvien]

GO


/****** Object:  Table [dbo].[DangNhap]    Script Date: 9/8/2015 10:00:45 AM ******/

SET ANSI_NULLS ON

GO


SET QUOTED_IDENTIFIER ON

GO


CREATE TABLE [dbo].[DangNhap][

       [UserName] [nchar][50] NOT NULL,

       [Pass] [nchar][50] NOT NULL,

 CONSTRAINT [PK_DangNhap] PRIMARY KEY CLUSTERED

[

       [UserName] ASC

]WITH [PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON] ON [PRIMARY]

] ON [PRIMARY]


GO




+]Tạo bảng điểm

USE [QLsinhvien]

GO


/****** Object:  Table [dbo].[Diem]    Script Date: 9/8/2015 10:01:30 AM ******/

SET ANSI_NULLS ON

GO


SET QUOTED_IDENTIFIER ON

GO


CREATE TABLE [dbo].[Diem][

       [MaSV] [nchar][50] NOT NULL,

       [MaM] [nchar][50] NOT NULL,

       [Diem] [float] NULL

] ON [PRIMARY]


GO




+]Tạo bảng lưu sinh viên

USE [QLsinhvien]

GO


/****** Object:  Table [dbo].[luusv]    Script Date: 9/8/2015 10:02:01 AM ******/

SET ANSI_NULLS ON

GO


SET QUOTED_IDENTIFIER ON

GO


CREATE TABLE [dbo].[luusv][

       [MSV] [nchar][50] NULL,

       [TenSV] [nchar][50] NULL,

       [NgaySinh] [datetime] NULL,

       [QueQuan] [nchar][50] NULL,

       [NgayTD] [datetime] NULL

] ON [PRIMARY]


GO




+]Tạo bảng môn học

USE [QLsinhvien]

GO


/****** Object:  Table [dbo].[MonHoc]    Script Date: 9/8/2015 10:02:29 AM ******/

SET ANSI_NULLS ON

GO


SET QUOTED_IDENTIFIER ON

GO


CREATE TABLE [dbo].[MonHoc][

       [MaM] [nchar][50] NOT NULL,

       [TenM] [nchar][50] NULL,

       [SoTC] [int] NULL,

       [HocKi] [int] NULL,

 CONSTRAINT [PK_MonHoc] PRIMARY KEY CLUSTERED

[

       [MaM] ASC

]WITH [PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON] ON [PRIMARY]

] ON [PRIMARY]


GO




+]Tạo bảng sinh viên

USE [QLsinhvien]

GO


/****** Object:  Table [dbo].[sv]    Script Date: 9/8/2015 10:02:53 AM ******/

SET ANSI_NULLS ON

GO


SET QUOTED_IDENTIFIER ON

GO


SET ANSI_PADDING ON

GO


CREATE TABLE [dbo].[sv][

       [MaSV] [nchar][50] NOT NULL,

       [TenSV] [nchar][50] NULL,

       [GioiTinh] [nchar][50] NULL,

       [NgaySinh] [datetime] NULL,

       [QueQuan] [nchar][50] NULL,

       [Hinhanh] [varbinary][max] NULL,

 CONSTRAINT [PK_sv] PRIMARY KEY CLUSTERED

[

       [MaSV] ASC

]WITH [PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON] ON [PRIMARY]

] ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


GO


SET ANSI_PADDING OFF

GO



II] StoredProcedure


+]Load dữ liệu masv,tensv lên combox sv

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[cboSinh]    Script Date: 9/8/2015 9:39:33 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[cboSinh]

as

select sv.MaSV,sv.TenSV

from sv


+]Load dữ liệu MaM,TenM lên combox MonHoc

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[cboTenMH]    Script Date: 9/8/2015 9:42:04 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[cboTenMH]


as

select  MonHoc.MaM, MonHoc.TenM

from MonHoc


+]chọn điểm SV

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[ChonD]    Script Date: 9/8/2015 9:43:41 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[ChonD]

as

SELECT [MaSV]

      ,[MaM]

      ,[Diem]

  FROM [dbo].[Diem]


+]chọn MaMH:

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[ChonMH]    Script Date: 9/8/2015 9:44:20 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[ChonMH]

as

SELECT [MaM]

      ,[TenM]

      ,[SoTC]

      ,[HocKi]

  FROM [dbo].[MonHoc]


+]chọn SV

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[Chonsv]    Script Date: 9/8/2015 9:44:55 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[Chonsv]

as

SELECT [MaSV]

      ,[TenSV]

      ,[GioiTinh]

      ,[NgaySinh]

      ,[QueQuan]

    

  FROM [dbo].[sv]


+]chọn SV có hình SV

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[ChonSV1]    Script Date: 9/8/2015 9:46:26 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[ChonSV1]

as

SELECT [MaSV]

      ,[TenSV]

      ,[GioiTinh]

      ,[NgaySinh]

      ,[QueQuan]

      ,[Hinhanh]

  FROM [dbo].[sv]


+]chọn hình ảnh cho SV

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[Hinhsv]    Script Date: 9/8/2015 9:46:50 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[Hinhsv]

as

SELECT

      [Hinhanh]

  FROM [dbo].[sv]


+]kiểm tra đăng nhập

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[Log_in]    Script Date: 9/8/2015 9:47:22 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[Log_in]

@UserName nchar[50],

@pass nchar[50]

as

SELECT [UserName]

      ,[Pass]

  FROM [dbo].[DangNhap]

  where @UserName =UserName and

@pass =Pass


+]sửa dữ liệu SV

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[SuaD]    Script Date: 9/8/2015 9:48:13 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[SuaD]


 @MaSV nchar[50],

   @MaM nchar[50],

    @Diem float

       as


UPDATE [dbo].[Diem]

   SET [MaSV] = @MaSV

      ,[MaM] = @MaM

      ,[Diem] = @Diem

 WHERE [MaSV] = @MaSV


+]Sửa môn học

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[SuaMh]    Script Date: 9/8/2015 9:48:43 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[SuaMh]

 @MaM nchar[50],

     @TenM nchar[50],

     @SoTC int,

      @HocKi int

         as

UPDATE [dbo].[MonHoc]

   SET [MaM] = @MaM

      ,[TenM] = @TenM

      ,[SoTC] = @SoTC

      ,[HocKi] = @HocKi

 WHERE [MaM] = @MaM


+]Sửa sinh viên

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[SuaSV1]    Script Date: 9/8/2015 9:49:11 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[SuaSV1]

 @MaSV nchar[50]

      , @TenSV nchar[50]

      , @GioiTinh nchar[50]

      , @NgaySinh datetime

      , @QueQuan nchar[50]

      , @Hinhanh varbinary[max]

         as

UPDATE [dbo].[sv]

   SET [MaSV] = @MaSV

      ,[TenSV] = @TenSV

      ,[GioiTinh] = @GioiTinh

      ,[NgaySinh] = @NgaySinh

      ,[QueQuan] = @QueQuan

      ,[Hinhanh] = @Hinhanh

 WHERE  [MaSV] = @MaSV


+]Tìm Mã Môn học

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[TimMH]    Script Date: 9/8/2015 9:49:44 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[TimMH]

 @MaM nchar[50],

  @TenM nchar[50]

as

select MonHoc.MaM,MonHoc.TenM

from MonHoc

where @MaM =MonHoc.MaM or @TenM =MonHoc.TenM


+]Tìm Sinh Viên

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[Timsv]    Script Date: 9/8/2015 9:50:16 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[Timsv]

@MaSV nchar[50],

@TenSV nchar[50]

as

SELECT [MaSV]

      ,[TenSV]

      ,[GioiTinh]

      ,[NgaySinh]

      ,[QueQuan]

  FROM [dbo].[sv]

  where @MaSV =MaSV or

@TenSV =TenSV


+]tim sinh viên tt

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[Timsv]    Script Date: 9/8/2015 9:50:16 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[Timsv]

@MaSV nchar[50],

@TenSV nchar[50]

as

SELECT [MaSV]

      ,[TenSV]

      ,[GioiTinh]

      ,[NgaySinh]

      ,[QueQuan]

  FROM [dbo].[sv]

  where @MaSV =MaSV or

@TenSV =TenSV


+]Thêm điểm cho sv

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[ThemD]    Script Date: 9/8/2015 9:51:18 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[ThemD]

[@MaSV nchar[50]

,@MaM nchar[50]

,@Diem float]

as

INSERT INTO [dbo].[Diem]

           [[MaSV]

           ,[MaM]

           ,[Diem]]

     VALUES

           [ @MaSV

           ,@MaM

           ,@Diem ]


+]Thêm Môn học

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[ThemMH]    Script Date: 9/8/2015 9:51:42 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[ThemMH]

    [@MaM nchar[50]

           ,@TenM nchar[50]

           ,@SoTC int

           ,@HocKi int]

                 as

INSERT INTO [dbo].[MonHoc]

           [[MaM]

           ,[TenM]

           ,[SoTC]

           ,[HocKi]]

     VALUES

       [@MaM

           ,@TenM

           ,@SoTC

           ,@HocKi ]


+]Thêm Sinh Viên

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[ThemSV]    Script Date: 9/8/2015 9:52:01 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[ThemSV]


 [@MaSV nchar[50]

           ,@TenSV nchar[50]

           ,@GioiTinh nchar[50]

           ,@NgaySinh datetime

           ,@QueQuan nchar[50]

           ,@Hinhanh varbinary[max]]

                 as

INSERT INTO [dbo].[sv]

           [[MaSV]

           ,[TenSV]

           ,[GioiTinh]

           ,[NgaySinh]

           ,[QueQuan]

           ,[Hinhanh]

                 ]

     VALUES

         [@MaSV

           ,@TenSV

           ,@GioiTinh

           ,@NgaySinh

           ,@QueQuan

           ,@Hinhanh]


+]Tra cứu Sinh Viên

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[TRaCuuSV]    Script Date: 9/8/2015 9:52:21 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[TRaCuuSV]

 @MaSV nchar[50]

 as



select sv.TenSV,sv.QueQuan,sv.GioiTinh,sv.Hinhanh,sv.NgaySinh,TEMP.DiemTB,xeploai=case  when TEMP.DiemTB >8 then 'gioi' when TEMP.DiemTB >7 then 'kha' when TEMP.DiemTB>5 then 'trung binh' else 'Yeu' end

from sv, [select Diem.MaSV,ROUND[ sum[Diem.Diem*MonHoc.SoTC]/SUM[MonHoc.SoTC],2]AS DiemTB

from Diem inner join MonHoc on Diem.MaM=MonHoc.MaM

group by Diem.MaSV

--having @MaSV=Diem.MaSV

]AS TEMP

where @MaSV=sv.MaSV


+]Xóa điểm sinh viên

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[XoaD]    Script Date: 9/8/2015 9:52:49 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[XoaD]

 @MaSV nchar[50]

 as

DELETE FROM [dbo].[Diem]

      WHERE [MaSV] = @MaSV


+]Xóa dữ liệu điểm

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[XoaDLD]    Script Date: 9/8/2015 9:53:25 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[XoaDLD]

as

TRUNCATE TABLE Diem

+]Xóa dữ liệu trùng

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[XoaDLtrung]    Script Date: 9/8/2015 9:53:57 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

/****** Object:  StoredProcedure [dbo].[XoaDLtrung]    Script Date: 07/09/2015 10:18:25 CH ******/

ALTER proc [dbo].[XoaDLtrung]

@MaSV nchar[50],

@MaM nchar[50]

as

select Diem.MaM,Diem.MaSV

from Diem

where @MaSV=MaSV and @MaM=MaM


+]Xóa mã môn học

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[XoaMH]    Script Date: 9/8/2015 9:54:42 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[XoaMH]

 @MaM nchar[50]

 as

DELETE FROM [dbo].[MonHoc]

      WHERE [MaM] = @MaM


+]Xóa Sinh Viên

USE [QLsinhvien]

GO

/****** Object:  StoredProcedure [dbo].[Xoasv]    Script Date: 9/8/2015 9:55:06 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[Xoasv]

@masv nchar[50]

as

DELETE FROM [dbo].[sv]

      WHERE @masv=masv

III]trigger

+]xóa môn học:

USE [QLsinhvien]

GO

/****** Object:  Trigger [dbo].[XoaM]    Script Date: 9/8/2015 10:06:08 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER trigger [dbo].[XoaM]

on [dbo].[MonHoc]

after Delete

as

begin

delete from Diem where Diem.MaM=[select MaM from deleted]

end


+]lưu sinh viên:

USE [QLsinhvien]

GO

/****** Object:  Trigger [dbo].[LuuS]    Script Date: 9/8/2015 10:06:38 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO


ALTER trigger [dbo].[LuuS]

on [dbo].[sv]

after delete

as

begin

declare @msv nchar[50]

declare @tensv nchar[50]

declare @Ngaysinh datetime

declare @QueQuan nchar[50]

declare @Ngaytd  datetime


 set @msv= [select MaSV from deleted]

set @tensv= [select TenSV from deleted]

set @Ngaysinh= [select NgaySinh from deleted]

set @QueQuan= [select QueQuan from deleted]

insert into LuuSV

values [@msv,@tensv,@Ngaysinh,@QueQuan,GETDATE[]]

end


+]xóa sinh viên:

USE [QLsinhvien]

GO

/****** Object:  Trigger [dbo].[XoaS]    Script Date: 9/8/2015 10:07:22 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

/****** Object:  Trigger [dbo].[XoaM]    Script Date: 30/08/2015 7:43:10 CH ******/


ALTER trigger  [dbo].[XoaS]

on [dbo].[sv]

after Delete

as

begin

delete from Diem where Diem.MaSV=[select MaSV from deleted]

end














Chủ Đề