Untitled
unknown
sql
5 days ago
3.2 kB
6
Indexable
-- Tạo cơ sở dữ liệu CREATE DATABASE QLKH_QTCSDL; GO USE QLKH_QTCSDL; GO -- Tạo bảng USERS CREATE TABLE USERS ( USER_ID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(), FIRST_NAME NVARCHAR(10) NOT NULL, LAST_NAME NVARCHAR(50) NOT NULL, EMAIL VARCHAR(50) NOT NULL UNIQUE, HOMETOWN NVARCHAR (255) NOT NULL, BIRTH_DATE DATE CHECK (BIRTH_DATE <= GETDATE()) NULL, PHONE VARCHAR(11) NOT NULL UNIQUE, CREATED_AT DATETIME2 NOT NULL DEFAULT GETDATE(), UPDATED_AT DATETIME2 NULL, CONSTRAINT CHK_AGE CHECK (DATEDIFF(YEAR, BIRTH_DATE, GETDATE()) >= 18), ); GO -- Tạo bảng ACCOUNTS CREATE TABLE ACCOUNTS ( ACCOUNT_ID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(), USER_ID UNIQUEIDENTIFIER NOT NULL UNIQUE, USERNAME VARCHAR(50) NOT NULL UNIQUE, PASSWORD VARCHAR(255) NOT NULL, ROLE VARCHAR (50) NOT NULL, STATUS VARCHAR(50) CHECK (STATUS IN ('ACTIVE', 'INACTIVE', 'LOCKED')) NOT NULL, LAST_LOGIN DATETIME2 NULL, CONSTRAINT FK_ACCOUNTS_USERS FOREIGN KEY (USER_ID) REFERENCES USERS(USER_ID), ); GO -- Tạo bảng COURSES CREATE TABLE COURSES ( COURSE_ID INT PRIMARY KEY IDENTITY(1,1), COURSE_NAME NVARCHAR(100) NOT NULL, DESCRIPTION NVARCHAR(MAX) NULL, IMAGE VARCHAR(255) NULL, PRICE DECIMAL(10,2) DEFAULT 0 CHECK (PRICE >= 0), CURRENCY VARCHAR (4) NOT NULL, USER_ID UNIQUEIDENTIFIER NULL, STATUS VARCHAR(20) CHECK (STATUS IN ('DRAFT', 'PUBLISHED', 'ARCHIVED')), CREATED_TIME DATETIME2 DEFAULT CURRENT_TIMESTAMP, UPDATED_TIME DATETIME2 NULL, CONSTRAINT FK_COURSES_USERS FOREIGN KEY (USER_ID) REFERENCES USERS(USER_ID), ); GO -- Tạo bảng LECTURES CREATE TABLE LECTURES ( LECTURE_ID INT PRIMARY KEY IDENTITY(1,1), LECTURE_TITLE NVARCHAR(100) NOT NULL, DESCRIPTION NVARCHAR(MAX) NULL, FILE_PATH VARCHAR(255) NULL, TYPE_LECTURE VARCHAR(20) CHECK (TYPE_LECTURE IN ('VIDEO', 'DOCUMENT', 'QUIZ')) NOT NULL, COURSE_ID INT NULL, CONSTRAINT FK_LECTURES_COURSES FOREIGN KEY (COURSE_ID) REFERENCES COURSES(COURSE_ID), ); GO -- Tạo bảng ACTIVITYLOG CREATE TABLE ACTIVITYLOG ( LOG_ID INT PRIMARY KEY IDENTITY(1,1), USER_ID UNIQUEIDENTIFIER NULL, ACTION NVARCHAR(100) NOT NULL, TIMESTAMP DATETIME2 DEFAULT CURRENT_TIMESTAMP, DETAIL NVARCHAR(MAX) NULL, CONSTRAINT FK_ACTIVITYLOG_USERS FOREIGN KEY (USER_ID) REFERENCES USERS(USER_ID) ); GO -- Tạo trigger để tự động cập nhật UPDATED_AT khi cập nhật dữ liệu trong bảng USERS CREATE TRIGGER trg_Users_Update ON USERS AFTER UPDATE AS BEGIN UPDATE USERS SET UPDATED_AT = GETDATE() FROM USERS u INNER JOIN inserted i ON u.USER_ID = i.USER_ID; END; GO -- Tạo trigger để tự động cập nhật UPDATED_AT khi cập nhật dữ liệu trong bảng COURSES CREATE TRIGGER trg_Courses_Update ON COURSES AFTER UPDATE AS BEGIN UPDATE COURSES SET UPDATED_TIME = GETDATE() FROM COURSES c INNER JOIN inserted i ON c.COURSE_ID = i.COURSE_ID; END; GO
Editor is loading...
Leave a Comment