CREATE DATABASE MEET; GO USE MEET; GO
-- 1. Bảng USERS (Tài khoản chung) CREATE TABLE Users ( UserID INT PRIMARY KEY NOT NULL IDENTITY(1,1), Email VARCHAR(255) NOT NULL UNIQUE, PasswordHash VARCHAR(255) NOT NULL, FullName NVARCHAR(255) NULL, PhoneNumber VARCHAR(20) NULL, DateCreated DATETIME NOT NULL );
-- 2. Bảng CLASSES (Lớp học) CREATE TABLE Classes ( ClassID INT PRIMARY KEY NOT NULL IDENTITY(1,1), ClassName NVARCHAR(255) NOT NULL, ClassCode VARCHAR(50) NOT NULL UNIQUE, Subject NVARCHAR(100) NULL, Room NVARCHAR(50) NULL, TeacherID INT NOT NULL, -- Người tạo/quản lý lớp Description NVARCHAR(MAX) NULL,
FOREIGN KEY (TeacherID) REFERENCES Users(UserID)
);
-- 3. Bảng ENROLLMENTS (Đăng ký + Role trong lớp) CREATE TABLE Enrollments ( EnrollmentID INT PRIMARY KEY NOT NULL IDENTITY(1,1), ClassID INT NOT NULL, UserID INT NOT NULL, Role NVARCHAR(50) NOT NULL DEFAULT 'Student', -- 'Teacher', 'Student', 'Assistant'... EnrollmentDate DATETIME NOT NULL, IsActive BIT NOT NULL, -- 1: Đang học, 0: Đã rời lớp
FOREIGN KEY (ClassID) REFERENCES Classes(ClassID),
FOREIGN KEY (UserID) REFERENCES Users(UserID),
UNIQUE (ClassID, UserID) -- Một user chỉ tham gia 1 lần mỗi lớp
);
-- 4. Bảng ASSIGNMENTS (Bài tập) CREATE TABLE Assignments ( AssignmentID INT PRIMARY KEY NOT NULL IDENTITY(1,1), ClassID INT NOT NULL, Title NVARCHAR(255) NOT NULL, Instructions NVARCHAR(MAX) NULL, DueDate DATETIME NULL, MaxPoints INT NULL, DatePosted DATETIME NOT NULL,
FOREIGN KEY (ClassID) REFERENCES Classes(ClassID)
);
-- 5. Bảng MESSAGES (Tin nhắn - lưu lịch sử chat) CREATE TABLE Messages ( MessageID INT PRIMARY KEY NOT NULL IDENTITY(1,1), SenderID INT NOT NULL, ReceiverID INT NULL, -- Chat cá nhân ClassID INT NULL, -- Chat trong lớp học Content NVARCHAR(MAX) NULL, Timestamp DATETIME NOT NULL, IsRead BIT NOT NULL,
FOREIGN KEY (SenderID) REFERENCES Users(UserID),
FOREIGN KEY (ReceiverID) REFERENCES Users(UserID),
FOREIGN KEY (ClassID) REFERENCES Classes(ClassID)
);
-- 6. Bảng ATTACHMENTS (File đính kèm tin nhắn) CREATE TABLE Attachments ( AttachmentID INT PRIMARY KEY NOT NULL IDENTITY(1,1), MessageID INT NOT NULL, FileName NVARCHAR(255) NOT NULL, FilePath VARCHAR(500) NOT NULL, FileSizeKB INT NULL, FileType VARCHAR(50) NULL,
FOREIGN KEY (MessageID) REFERENCES Messages(MessageID)
);
-- 7. Bảng VIDEOCALLS (Lịch sử gọi video) CREATE TABLE VideoCalls ( CallID INT PRIMARY KEY NOT NULL IDENTITY(1,1), HostID INT NOT NULL, ClassID INT NULL, StartTime DATETIME NOT NULL, EndTime DATETIME NULL, DurationSeconds INT NULL, MeetingLink VARCHAR(500) NULL,
FOREIGN KEY (HostID) REFERENCES Users(UserID),
FOREIGN KEY (ClassID) REFERENCES Classes(ClassID)
);
-- 8. Bảng FRIENDSHIPS (Quan hệ bạn bè) CREATE TABLE Friendships ( FriendshipID INT PRIMARY KEY NOT NULL IDENTITY(1,1), User1ID INT NOT NULL, User2ID INT NOT NULL, Status VARCHAR(50) NOT NULL, -- 'Pending', 'Accepted', 'Blocked' ActionUserID INT NOT NULL, DateEstablished DATETIME NULL,
FOREIGN KEY (User1ID) REFERENCES Users(UserID),
FOREIGN KEY (User2ID) REFERENCES Users(UserID),
FOREIGN KEY (ActionUserID) REFERENCES Users(UserID),
UNIQUE (User1ID, User2ID) -- Không có quan hệ trùng
);