-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate_db.sql
119 lines (96 loc) · 3.66 KB
/
create_db.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
USE tempdb;
GO
BEGIN
DECLARE @DBNAME AS VARCHAR(MAX) = 'Chatflow'
IF EXISTS(SELECT * FROM sys.databases WHERE Name = @DBNAME)
BEGIN
EXEC('ALTER DATABASE ' + @DBNAME + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE');
EXEC('DROP DATABASE ' + @DBNAME);
END;
EXEC('CREATE DATABASE ' + @DBNAME);
END;
USE Chatflow;
GO
CREATE TABLE [User](
UserId INT IDENTITY(1,1) PRIMARY KEY,
SupervisorId INT,
Username VARCHAR(50) NOT NULL,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Password VARCHAR(50) NOT NULL,
Email VARCHAR(50) NOT NULL,
BirthDate DATE NOT NULL,
SignUpDate DATETIME NOT NULL,
Attributes VARCHAR(MAX),
CONSTRAINT [UQ_Email] UNIQUE (Email),
CONSTRAINT [FK_User_Supervisor] FOREIGN KEY (SupervisorId) REFERENCES [User](UserId),
CONSTRAINT [CHK_UserBirthDate] CHECK (BirthDate <= GETDATE())
);
CREATE TABLE [Category](
CategoryId INT IDENTITY(1,1) PRIMARY KEY,
CategoryName VARCHAR(50) NOT NULL,
CONSTRAINT [UQ_CategoryName] UNIQUE (CategoryName)
);
CREATE TABLE [Room](
RoomId INT IDENTITY(1,1) PRIMARY KEY,
CategoryId INT NOT NULL,
RoomName VARCHAR(50) NOT NULL,
RoomCreationDate DATETIME NOT NULL,
CONSTRAINT [FK_Room_Category] FOREIGN KEY (CategoryId) REFERENCES [Category](CategoryId),
CONSTRAINT [UQ_Room_Category_RoomName] UNIQUE (CategoryId, RoomName)
);
CREATE TABLE [UserRoom](
UserId INT NOT NULL,
RoomId INT NOT NULL,
UserRoomJoinDate DATETIME NOT NULL,
PRIMARY KEY (UserId, RoomId),
CONSTRAINT [FK_UserRoom_User] FOREIGN KEY (UserId) REFERENCES [User](UserId),
CONSTRAINT [FK_UserRoom_Room] FOREIGN KEY (RoomId) REFERENCES [Room](RoomId)
);
CREATE TABLE [Message](
MessageId INT IDENTITY(1,1) PRIMARY KEY,
UserId INT NOT NULL,
RoomId INT NOT NULL,
Text VARCHAR(1000) NOT NULL,
Timestamp DATETIME NOT NULL,
CONSTRAINT [FK_Message_User] FOREIGN KEY (UserId) REFERENCES [User](UserId),
CONSTRAINT [FK_Message_Room] FOREIGN KEY (RoomId) REFERENCES [Room](RoomId)
);
CREATE TABLE [ReactionType](
ReactionId INT IDENTITY(1,1) PRIMARY KEY,
ReactionType VARCHAR(50) NOT NULL,
CONSTRAINT [UQ_ReactionType] UNIQUE (ReactionType)
);
CREATE TABLE [MessageReaction](
MessageReactionId INT IDENTITY(1,1) PRIMARY KEY,
MessageId INT NOT NULL,
UserId INT NOT NULL,
ReactionId INT NOT NULL,
Timestamp DATETIME NOT NULL,
CONSTRAINT [FK_MessageReaction_Message] FOREIGN KEY (MessageId) REFERENCES [Message](MessageId),
CONSTRAINT [FK_MessageReaction_User] FOREIGN KEY (UserId) REFERENCES [User](UserId),
CONSTRAINT [FK_MessageReaction_ReactionType] FOREIGN KEY (ReactionId) REFERENCES [ReactionType](ReactionId)
);
USE Chatflow;
CREATE VIEW SupervisorHierarchy AS
SELECT
U1.UserId AS UserId,
U1.Username AS UserName,
U1.FirstName AS UserFirstName,
U1.LastName AS UserLastName,
U2.UserId AS SupervisorId,
U2.Username AS SupervisorUsername,
U2.FirstName AS SupervisorFirstName,
U2.LastName AS SupervisorLastName
FROM
[User] U1
LEFT JOIN
[User] U2 ON U1.SupervisorId = U2.UserId;
INSERT INTO [User] (SupervisorId, Username, FirstName, LastName, Password, Email, BirthDate, SignUpDate, Attributes)
VALUES
(NULL, 'jdoe', 'John', 'Doe', 'password1', 'jdoe@example.com', '1980-01-01', GETDATE(), NULL),
(NULL, 'asmith', 'Alice', 'Smith', 'password2', 'asmith@example.com', '1985-01-01', GETDATE(), NULL),
(1, 'mjones', 'Michael', 'Jones', 'password3', 'mjones@example.com', '1990-01-01', GETDATE(), NULL),
(2, 'sjohnson', 'Sarah', 'Johnson', 'password4', 'sjohnson@example.com', '1995-01-01', GETDATE(), NULL);
SELECT * FROM [User];
SELECT * FROM SupervisorHierarchy;