-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate-database.sql
More file actions
2412 lines (2200 loc) · 68.2 KB
/
create-database.sql
File metadata and controls
2412 lines (2200 loc) · 68.2 KB
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
--
-- Script was generated by Devart dbForge Studio for MySQL, Version 10.0.150.0
-- Product home page: http://www.devart.com/dbforge/mysql/studio
-- Script date 29/06/2024 16:58:10
-- Server version: 8.3.0
--
--
-- Disable foreign keys
--
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
--
-- Set SQL mode
--
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
--
-- Set character set the client will use to send SQL statements to the server
--
SET NAMES 'utf8';
--
-- Set default database
--
USE knowledgesharing;
--
-- Drop view `ViewKnowledgeCategory`
--
DROP VIEW IF EXISTS ViewKnowledgeCategory CASCADE;
--
-- Drop table `KnowledgeCategory`
--
DROP TABLE IF EXISTS KnowledgeCategory;
--
-- Drop table `Category`
--
DROP TABLE IF EXISTS Category;
--
-- Drop view `ViewMessage`
--
DROP VIEW IF EXISTS ViewMessage CASCADE;
--
-- Drop table `Message`
--
DROP TABLE IF EXISTS Message;
--
-- Drop view `ViewUserConversation`
--
DROP VIEW IF EXISTS ViewUserConversation CASCADE;
--
-- Drop table `UserConversation`
--
DROP TABLE IF EXISTS UserConversation;
--
-- Drop table `Conversation`
--
DROP TABLE IF EXISTS Conversation;
--
-- Drop table `Block`
--
DROP TABLE IF EXISTS Block;
--
-- Drop table `Follow`
--
DROP TABLE IF EXISTS Follow;
--
-- Drop table `Friend`
--
DROP TABLE IF EXISTS Friend;
--
-- Drop table `Image`
--
DROP TABLE IF EXISTS Image;
--
-- Drop table `Notification`
--
DROP TABLE IF EXISTS Notification;
--
-- Drop view `ViewComment`
--
DROP VIEW IF EXISTS ViewComment CASCADE;
--
-- Drop view `ViewCoursePayment`
--
DROP VIEW IF EXISTS ViewCoursePayment CASCADE;
--
-- Drop view `ViewCourseRegister`
--
DROP VIEW IF EXISTS ViewCourseRegister CASCADE;
--
-- Drop view `ViewCourseTotalRelation`
--
DROP VIEW IF EXISTS ViewCourseTotalRelation CASCADE;
--
-- Drop view `ViewLesson`
--
DROP VIEW IF EXISTS ViewLesson CASCADE;
--
-- Drop view `ViewPost`
--
DROP VIEW IF EXISTS ViewPost CASCADE;
--
-- Drop view `ViewQuestion`
--
DROP VIEW IF EXISTS ViewQuestion CASCADE;
--
-- Drop view `ViewUser`
--
DROP VIEW IF EXISTS ViewUser CASCADE;
--
-- Drop view `ViewComment2`
--
DROP VIEW IF EXISTS ViewComment2 CASCADE;
--
-- Drop view `ViewCourse`
--
DROP VIEW IF EXISTS ViewCourse CASCADE;
--
-- Drop view `ViewLesson2`
--
DROP VIEW IF EXISTS ViewLesson2 CASCADE;
--
-- Drop view `ViewQuestion2`
--
DROP VIEW IF EXISTS ViewQuestion2 CASCADE;
--
-- Drop view `ViewPost2`
--
DROP VIEW IF EXISTS ViewPost2 CASCADE;
--
-- Drop view `ViewKnowledge`
--
DROP VIEW IF EXISTS ViewKnowledge CASCADE;
--
-- Drop view `ViewUserItem`
--
DROP VIEW IF EXISTS ViewUserItem CASCADE;
--
-- Drop view `ViewUserRelation`
--
DROP VIEW IF EXISTS ViewUserRelation CASCADE;
--
-- Drop view `ViewUserProfile`
--
DROP VIEW IF EXISTS ViewUserProfile CASCADE;
--
-- Drop table `Profile`
--
DROP TABLE IF EXISTS Profile;
--
-- Drop table `RequestFriend`
--
DROP TABLE IF EXISTS RequestFriend;
--
-- Drop table `Session`
--
DROP TABLE IF EXISTS Session;
--
-- Drop view `ViewTotalUserItem`
--
DROP VIEW IF EXISTS ViewTotalUserItem CASCADE;
--
-- Drop view `ViewTotalComment`
--
DROP VIEW IF EXISTS ViewTotalComment CASCADE;
--
-- Drop table `Comment`
--
DROP TABLE IF EXISTS Comment;
--
-- Drop view `ViewTotalCourseRelation`
--
DROP VIEW IF EXISTS ViewTotalCourseRelation CASCADE;
--
-- Drop table `CourseLesson`
--
DROP TABLE IF EXISTS CourseLesson;
--
-- Drop table `CoursePayment`
--
DROP TABLE IF EXISTS CoursePayment;
--
-- Drop table `CourseRegister`
--
DROP TABLE IF EXISTS CourseRegister;
--
-- Drop table `CourseRelation`
--
DROP TABLE IF EXISTS CourseRelation;
--
-- Drop table `Question`
--
DROP TABLE IF EXISTS Question;
--
-- Drop table `Course`
--
DROP TABLE IF EXISTS Course;
--
-- Drop table `Mark`
--
DROP TABLE IF EXISTS Mark;
--
-- Drop table `Lesson`
--
DROP TABLE IF EXISTS Lesson;
--
-- Drop table `PostEditHistory`
--
DROP TABLE IF EXISTS PostEditHistory;
--
-- Drop table `Post`
--
DROP TABLE IF EXISTS Post;
--
-- Drop table `StudyProgress`
--
DROP TABLE IF EXISTS StudyProgress;
--
-- Drop table `Knowledge`
--
DROP TABLE IF EXISTS Knowledge;
--
-- Drop view `ViewTotalUserStar`
--
DROP VIEW IF EXISTS ViewTotalUserStar CASCADE;
--
-- Drop table `Star`
--
DROP TABLE IF EXISTS Star;
--
-- Drop table `UserItem`
--
DROP TABLE IF EXISTS UserItem;
--
-- Drop view `ViewTotalFriend`
--
DROP VIEW IF EXISTS ViewTotalFriend CASCADE;
--
-- Drop view `ViewTotalUserRelation`
--
DROP VIEW IF EXISTS ViewTotalUserRelation CASCADE;
--
-- Drop table `UserRelation`
--
DROP TABLE IF EXISTS UserRelation;
--
-- Drop table `User`
--
DROP TABLE IF EXISTS User;
--
-- Set default database
--
USE knowledgesharing;
--
-- Create table `User`
--
CREATE TABLE User (
UserId char(36) NOT NULL COMMENT 'Id của người dùng',
Email varchar(255) NOT NULL COMMENT 'Email đăng ký tài khoản',
Username varchar(255) NOT NULL COMMENT 'Tên tài khoản',
HashPassword varchar(255) NOT NULL COMMENT 'Mã băm mật khẩu',
Role varchar(255) NOT NULL COMMENT 'Vai trò người dùng (Admin, User, Banned)',
CreatedBy varchar(255) DEFAULT NULL COMMENT 'Người tạo',
CreatedTime datetime DEFAULT NULL COMMENT 'Thời gian tạo',
ModifiedBy varchar(255) DEFAULT NULL COMMENT 'Người sửa',
ModifiedTime datetime DEFAULT NULL COMMENT 'Ngày chỉnh sửa',
PRIMARY KEY (UserId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 682,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Thông tin đăng nhập và vai trò của người dùng hệ thống',
ROW_FORMAT = DYNAMIC;
--
-- Create index `IDX_User_CreatedTime` on table `User`
--
ALTER TABLE User
ADD INDEX IDX_User_CreatedTime (CreatedTime);
--
-- Create index `IDX_User_Role` on table `User`
--
ALTER TABLE User
ADD INDEX IDX_User_Role (Role);
--
-- Create index `UK_User_Email` on table `User`
--
ALTER TABLE User
ADD UNIQUE INDEX UK_User_Email (Email);
--
-- Create index `UK_User_Username` on table `User`
--
ALTER TABLE User
ADD UNIQUE INDEX UK_User_Username (Username);
--
-- Create table `UserRelation`
--
CREATE TABLE UserRelation (
UserRelationId char(36) NOT NULL COMMENT 'Id của quan hệ người dùng',
SenderId char(36) NOT NULL COMMENT 'Id người gửi yêu cầu',
ReceiverId char(36) NOT NULL COMMENT 'Id người nhận yêu cầu',
UserRelationType int NOT NULL COMMENT 'Loại quan hệ (0 - Friend, 1 - Request Friend, 2 - Follow, 3 - Block)',
Time datetime NOT NULL COMMENT 'Thời gian quan hệ được tạo',
CreatedBy varchar(255) DEFAULT NULL COMMENT 'Người tạo',
CreatedTime datetime DEFAULT NULL COMMENT 'Thời gian tạo',
ModifiedTime datetime DEFAULT NULL COMMENT 'Thời gian chỉnh sửa',
ModifiedBy varchar(255) DEFAULT NULL COMMENT 'Người chỉnh sửa',
PRIMARY KEY (UserRelationId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 491,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Bảng lưu quan hệ giữa hai người dùng',
ROW_FORMAT = DYNAMIC;
--
-- Create index `IDX_UserRelation_CreatedTime` on table `UserRelation`
--
ALTER TABLE UserRelation
ADD INDEX IDX_UserRelation_CreatedTime (CreatedTime);
--
-- Create index `UK_UserRelation_UserRelationId` on table `UserRelation`
--
ALTER TABLE UserRelation
ADD UNIQUE INDEX UK_UserRelation_UserRelationId (UserRelationId);
--
-- Create foreign key
--
ALTER TABLE UserRelation
ADD CONSTRAINT FK_UserRelation_ReceiverId FOREIGN KEY (ReceiverId)
REFERENCES User (UserId) ON DELETE CASCADE;
--
-- Create foreign key
--
ALTER TABLE UserRelation
ADD CONSTRAINT FK_UserRelation_SenderId FOREIGN KEY (SenderId)
REFERENCES User (UserId) ON DELETE CASCADE;
--
-- Create view `ViewTotalUserRelation`
--
CREATE VIEW ViewTotalUserRelation
AS
SELECT
`u`.`UserId` AS `UserId`,
COUNT((CASE WHEN (`ur`.`UserRelationType` = 0) THEN 1 END)) AS `TotalFriend`,
COUNT((CASE WHEN ((`ur`.`UserRelationType` = 1) AND
(`ur`.`SenderId` = `u`.`UserId`)) THEN 1 END)) AS `TotalRequester`,
COUNT((CASE WHEN ((`ur`.`UserRelationType` = 1) AND
(`ur`.`ReceiverId` = `u`.`UserId`)) THEN 1 END)) AS `TotalRequestee`,
COUNT((CASE WHEN ((`ur`.`UserRelationType` = 2) AND
(`ur`.`SenderId` = `u`.`UserId`)) THEN 1 END)) AS `TotalFollower`,
COUNT((CASE WHEN ((`ur`.`UserRelationType` = 2) AND
(`ur`.`ReceiverId` = `u`.`UserId`)) THEN 1 END)) AS `TotalFollowee`,
COUNT((CASE WHEN ((`ur`.`UserRelationType` = 3) AND
(`ur`.`SenderId` = `u`.`UserId`)) THEN 1 END)) AS `TotalBlocker`,
COUNT((CASE WHEN ((`ur`.`UserRelationType` = 3) AND
(`ur`.`ReceiverId` = `u`.`UserId`)) THEN 1 END)) AS `TotalBlockee`
FROM (`User` `u`
LEFT JOIN `UserRelation` `ur`
ON (((`u`.`UserId` = `ur`.`SenderId`)
OR (`u`.`UserId` = `ur`.`ReceiverId`))))
GROUP BY `u`.`UserId`;
--
-- Create view `ViewTotalFriend`
--
CREATE VIEW ViewTotalFriend
AS
SELECT
`u`.`UserId` AS `UserId`,
COUNT(`ur`.`UserRelationId`) AS `TotalFriend`
FROM (`User` `u`
LEFT JOIN `UserRelation` `ur`
ON (((`u`.`UserId` = `ur`.`SenderId`)
OR (`u`.`UserId` = `ur`.`ReceiverId`))))
WHERE (`ur`.`UserRelationType` = 0)
GROUP BY `u`.`UserId`;
--
-- Create table `UserItem`
--
CREATE TABLE UserItem (
UserItemId char(36) NOT NULL COMMENT 'Id của đối tượng',
UserId char(36) NOT NULL COMMENT 'Id của chủ sở hữu của đối tượng',
UserItemType int NOT NULL COMMENT 'Loại Item (0: Knowledge, 1: Comment)',
CreatedBy varchar(255) DEFAULT NULL COMMENT 'Người tạo',
CreatedTime datetime DEFAULT NULL COMMENT 'Thời gian tạo',
ModifiedBy varchar(255) DEFAULT NULL COMMENT 'Người sửa',
ModifiedTime datetime DEFAULT NULL COMMENT 'Thời gian sửa',
PRIMARY KEY (UserItemId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 292,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Đối tượng dữ liệu chung được sở hữu bởi một người dùng (Bình luận, câu hỏi, bài viết, khóa học...)',
ROW_FORMAT = DYNAMIC;
--
-- Create index `IDX_UserItem_CreatedTime` on table `UserItem`
--
ALTER TABLE UserItem
ADD INDEX IDX_UserItem_CreatedTime (CreatedTime);
--
-- Create index `IDX_UserItem_ModifiedTime` on table `UserItem`
--
ALTER TABLE UserItem
ADD INDEX IDX_UserItem_ModifiedTime (ModifiedTime);
--
-- Create index `UK_UserItem_UserItemId` on table `UserItem`
--
ALTER TABLE UserItem
ADD UNIQUE INDEX UK_UserItem_UserItemId (UserItemId);
--
-- Create foreign key
--
ALTER TABLE UserItem
ADD CONSTRAINT FK_UserItem_UserId FOREIGN KEY (UserId)
REFERENCES User (UserId) ON DELETE CASCADE;
--
-- Create table `Star`
--
CREATE TABLE Star (
StarId char(36) NOT NULL COMMENT 'Id của phiên cho điểm',
UserId char(36) NOT NULL COMMENT 'Id của người dùng cho điểm',
UserItemId char(36) NOT NULL COMMENT 'Id của phần tử nhận điểm',
Stars int NOT NULL COMMENT 'Điểm đánh giá (0 - 5 sao)',
CreatedBy varchar(255) DEFAULT NULL COMMENT 'Người tạo',
CreatedTime datetime DEFAULT NULL COMMENT 'Thời gian tạo',
ModifiedBy varchar(255) DEFAULT NULL COMMENT 'Người sửa',
ModifiedTime datetime DEFAULT NULL COMMENT 'Thời gian sửa',
PRIMARY KEY (StarId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 491,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Bảng lưu điểm đánh giá của User với UserItem',
ROW_FORMAT = DYNAMIC;
--
-- Create index `IDX_Star_Star` on table `Star`
--
ALTER TABLE Star
ADD INDEX IDX_Star_Star (Stars);
--
-- Create index `UK_Star_StarId` on table `Star`
--
ALTER TABLE Star
ADD UNIQUE INDEX UK_Star_StarId (StarId);
--
-- Create foreign key
--
ALTER TABLE Star
ADD CONSTRAINT FK_Star_UserId FOREIGN KEY (UserId)
REFERENCES User (UserId) ON DELETE CASCADE;
--
-- Create foreign key
--
ALTER TABLE Star
ADD CONSTRAINT FK_Star_UserItemId FOREIGN KEY (UserItemId)
REFERENCES UserItem (UserItemId) ON DELETE CASCADE;
--
-- Create view `ViewTotalUserStar`
--
CREATE VIEW ViewTotalUserStar
AS
SELECT
`u`.`UserId` AS `UserId`,
COUNT(0) AS `TotalStar`,
SUM(`s`.`Stars`) AS `SumStar`
FROM (`UserItem` `u`
JOIN `Star` `s`
ON ((`u`.`UserItemId` = `s`.`UserItemId`)))
GROUP BY `u`.`UserId`;
--
-- Create table `Knowledge`
--
CREATE TABLE Knowledge (
UserItemId char(36) NOT NULL COMMENT 'Id của phần tử kiến thức',
Title varchar(255) NOT NULL COMMENT 'Tiêu đề của phần tử kiến thức',
Abstract text DEFAULT NULL COMMENT 'Phần nội dung tóm tắt',
Thumbnail text DEFAULT NULL COMMENT 'Ảnh đại diện',
Views int NOT NULL COMMENT 'Số lượt xem',
KnowledgeType int NOT NULL COMMENT 'Loại phần tử kiến thức (0: Bài đăng, 1: Khóa học)',
Privacy int NOT NULL COMMENT 'Quyền riêng tư: (0 - private, 1 - public)',
IsBlockComment tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Có cho phép bình luận hay không',
PRIMARY KEY (UserItemId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 2457,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Phần tử kiến thức chung của người dùng (Bài học, Khóa học, Câu hỏi thảo luận), kế thừa UserItem',
ROW_FORMAT = DYNAMIC;
--
-- Create index `IDX_Knowledge_Title` on table `Knowledge`
--
ALTER TABLE Knowledge
ADD INDEX IDX_Knowledge_Title (Title);
--
-- Create index `UK_Knowledge_UserItemId` on table `Knowledge`
--
ALTER TABLE Knowledge
ADD UNIQUE INDEX UK_Knowledge_UserItemId (UserItemId);
--
-- Create foreign key
--
ALTER TABLE Knowledge
ADD CONSTRAINT FK_Knowledge_UserItemId FOREIGN KEY (UserItemId)
REFERENCES UserItem (UserItemId) ON DELETE CASCADE;
--
-- Create table `StudyProgress`
--
CREATE TABLE StudyProgress (
StudyProgressId char(36) NOT NULL COMMENT 'Id của tiến trình học tập',
UserId char(36) NOT NULL COMMENT 'Id người dùng',
UserItemId char(36) NOT NULL COMMENT 'Id của phần tử kiến thức',
Progress double NOT NULL COMMENT 'Tiến trình học tập đơn vị phần trăm',
CreatedBy varchar(255) DEFAULT NULL COMMENT 'Người tạo',
CreatedTime datetime DEFAULT NULL COMMENT 'Thời gian tạo',
ModifiedBy varchar(255) DEFAULT NULL COMMENT 'Người sửa',
ModifiedTime datetime DEFAULT NULL COMMENT 'Thời gian sửa',
PRIMARY KEY (StudyProgressId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 491,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Tiến trình học tập',
ROW_FORMAT = DYNAMIC;
--
-- Create foreign key
--
ALTER TABLE StudyProgress
ADD CONSTRAINT SK_studyProgress_UserId FOREIGN KEY (UserId)
REFERENCES User (UserId) ON DELETE CASCADE;
--
-- Create foreign key
--
ALTER TABLE StudyProgress
ADD CONSTRAINT SK_studyProgress_UserItemId FOREIGN KEY (UserItemId)
REFERENCES Knowledge (UserItemId) ON DELETE CASCADE;
--
-- Create table `Post`
--
CREATE TABLE Post (
UserItemId char(36) NOT NULL COMMENT 'Id của bài đăng',
Content longtext NOT NULL COMMENT 'Nội dung của bài đăng',
PostType int NOT NULL COMMENT 'Phân loại bài đăng (0: Bài giảng, 1: Bài thảo luận)',
PRIMARY KEY (UserItemId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 163,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Bài đăng hệ thống (Bài giảng, Bài thảo luận), kế thừa Knowledge',
ROW_FORMAT = DYNAMIC;
--
-- Create index `UK_Post_UserItemId` on table `Post`
--
ALTER TABLE Post
ADD UNIQUE INDEX UK_Post_UserItemId (UserItemId);
--
-- Create foreign key
--
ALTER TABLE Post
ADD CONSTRAINT FK_Post_UserItemId FOREIGN KEY (UserItemId)
REFERENCES Knowledge (UserItemId) ON DELETE CASCADE;
--
-- Create table `PostEditHistory`
--
CREATE TABLE PostEditHistory (
PostEditHistoryId char(36) NOT NULL,
PostId char(36) NOT NULL,
Title varchar(1023) DEFAULT NULL,
Abstract text DEFAULT NULL,
Thumbnail varchar(1023) DEFAULT NULL,
Content longtext DEFAULT NULL,
CreatedBy varchar(255) DEFAULT NULL,
CreatedTime datetime DEFAULT NULL,
ModifiedBy varchar(255) DEFAULT NULL,
ModifiedTime datetime DEFAULT NULL,
PRIMARY KEY (PostEditHistoryId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 491,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Lịch sử chỉnh sửa bài đăng',
ROW_FORMAT = DYNAMIC;
--
-- Create index `UK_Postedithistory_PostEditHistoryId` on table `PostEditHistory`
--
ALTER TABLE PostEditHistory
ADD UNIQUE INDEX UK_Postedithistory_PostEditHistoryId (PostEditHistoryId);
--
-- Create foreign key
--
ALTER TABLE PostEditHistory
ADD CONSTRAINT FK_Postedithistory_PostId FOREIGN KEY (PostId)
REFERENCES Post (UserItemId) ON DELETE CASCADE;
--
-- Create table `Lesson`
--
CREATE TABLE Lesson (
UserItemId char(36) NOT NULL COMMENT 'Id của bài giảng',
EstimateTimeInMinutes int NOT NULL COMMENT 'Thời gian học ước tính',
PRIMARY KEY (UserItemId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 327,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Danh sách các bài giảng, kế thừa Bài đăng',
ROW_FORMAT = DYNAMIC;
--
-- Create index `UK_Lesson_UserItemId` on table `Lesson`
--
ALTER TABLE Lesson
ADD UNIQUE INDEX UK_Lesson_UserItemId (UserItemId);
--
-- Create foreign key
--
ALTER TABLE Lesson
ADD CONSTRAINT FK_Lesson_UserItemId FOREIGN KEY (UserItemId)
REFERENCES Post (UserItemId) ON DELETE CASCADE;
--
-- Create table `Mark`
--
CREATE TABLE Mark (
MarkId char(36) NOT NULL,
UserId char(36) NOT NULL,
KnowledgeId char(36) NOT NULL,
CreatedBy varchar(255) DEFAULT NULL,
CreatedTime datetime DEFAULT NULL,
ModifiedBy varchar(255) DEFAULT NULL,
ModifiedTime datetime DEFAULT NULL,
PRIMARY KEY (MarkId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 491,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Bảng lưu danh sách phần tử kiến thức được lưu bởi người dùng',
ROW_FORMAT = DYNAMIC;
--
-- Create foreign key
--
ALTER TABLE Mark
ADD CONSTRAINT FK_Mark_UserId FOREIGN KEY (UserId)
REFERENCES User (UserId) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Create foreign key
--
ALTER TABLE Mark
ADD CONSTRAINT FK_Mark_UserItemId FOREIGN KEY (KnowledgeId)
REFERENCES Knowledge (UserItemId) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Create table `Course`
--
CREATE TABLE Course (
UserItemId char(36) NOT NULL COMMENT 'Id của khóa học',
Introduction longtext NOT NULL COMMENT 'Bài giới thiệu của khóa học',
Fee decimal(10, 0) NOT NULL COMMENT 'Phí tham dự khóa học (nếu có)',
EstimateTimeInMinutes int NOT NULL COMMENT 'Thời gian học ước tính',
IsFree tinyint(1) NOT NULL COMMENT 'Cờ đánh dấu xem khóa học có miễn phí không (0: có tính phí, 1: miễn phí)',
PRIMARY KEY (UserItemId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 163,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Lưu thông tin khóa học, kế thừa Knowledge',
ROW_FORMAT = DYNAMIC;
--
-- Create foreign key
--
ALTER TABLE Course
ADD CONSTRAINT FK_Course_UserItemId FOREIGN KEY (UserItemId)
REFERENCES Knowledge (UserItemId) ON DELETE CASCADE;
--
-- Create table `Question`
--
CREATE TABLE Question (
UserItemId char(36) NOT NULL COMMENT 'Id của câu hỏi, bài thảo luận',
CourseId char(36) DEFAULT NULL COMMENT 'Id của khóa học (nếu bài thảo luận ở trong khóa học)',
IsAccept tinyint(1) NOT NULL COMMENT 'Cờ hiệu xem bài thảo luận đã được chủ bài đánh giá giải quyết được vấn đề chưa',
PRIMARY KEY (UserItemId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 163,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Câu hỏi, bài thảo luận, kế thừa Post',
ROW_FORMAT = DYNAMIC;
--
-- Create index `UK_Question_UserItemId` on table `Question`
--
ALTER TABLE Question
ADD UNIQUE INDEX UK_Question_UserItemId (UserItemId);
--
-- Create foreign key
--
ALTER TABLE Question
ADD CONSTRAINT FK_Question_CourseId FOREIGN KEY (CourseId)
REFERENCES Course (UserItemId) ON DELETE SET NULL;
--
-- Create foreign key
--
ALTER TABLE Question
ADD CONSTRAINT FK_Question_UserItemId FOREIGN KEY (UserItemId)
REFERENCES Post (UserItemId) ON DELETE CASCADE;
--
-- Create table `CourseRelation`
--
CREATE TABLE CourseRelation (
CourseRelationId char(36) NOT NULL COMMENT 'Id của quan hệ',
SenderId char(36) NOT NULL COMMENT 'Id của người gửi quan hệ',
ReceiverId char(36) NOT NULL COMMENT 'Id của người nhận quan hệ',
CourseId char(36) NOT NULL COMMENT 'Id của khóa học ',
CourseRelationType int NOT NULL COMMENT 'Loại quan hệ khóa học (0 - Request, 1 - invite)',
CreatedBy varchar(255) DEFAULT NULL,
CreatedTime datetime DEFAULT NULL,
ModifiedBy varchar(255) DEFAULT NULL,
ModifiedTime datetime DEFAULT NULL,
PRIMARY KEY (CourseRelationId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 491,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Quản lý danh sách quan hệ của khóa học gồm lời mời (invite) và yêu cầu (Request)',
ROW_FORMAT = DYNAMIC;
--
-- Create index `UK_CourseRelation_CourseRelationId` on table `CourseRelation`
--
ALTER TABLE CourseRelation
ADD UNIQUE INDEX UK_CourseRelation_CourseRelationId (CourseRelationId);
--
-- Create foreign key
--
ALTER TABLE CourseRelation
ADD CONSTRAINT FK_CourseRelation_CourseId FOREIGN KEY (CourseId)
REFERENCES Course (UserItemId) ON DELETE CASCADE;
--
-- Create foreign key
--
ALTER TABLE CourseRelation
ADD CONSTRAINT FK_CourseRelation_ReceiverId FOREIGN KEY (ReceiverId)
REFERENCES User (UserId) ON DELETE CASCADE;
--
-- Create foreign key
--
ALTER TABLE CourseRelation
ADD CONSTRAINT FK_CourseRelation_SenderId FOREIGN KEY (SenderId)
REFERENCES User (UserId);
--
-- Create table `CourseRegister`
--
CREATE TABLE CourseRegister (
CourseRegisterId char(36) NOT NULL COMMENT 'Id của phiên người dùng đăng ký khóa học',
UserId char(36) NOT NULL COMMENT 'Id của người dùng',
CourseId char(36) NOT NULL COMMENT 'Id của khóa học',
CreatedBy varchar(255) DEFAULT NULL COMMENT 'Người tạo',
CreatedTime datetime DEFAULT NULL COMMENT 'Thời gian tọa',
ModifiedBy varchar(255) DEFAULT NULL COMMENT 'Người chỉnh sửa',
ModifiedTime datetime DEFAULT NULL COMMENT 'Thời gian chỉnh sửa',
PRIMARY KEY (CourseRegisterId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 491,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Lưu danh sách người tham gia khóa học',
ROW_FORMAT = DYNAMIC;
--
-- Create index `UK_CourseRegister_CourseRegisterId` on table `CourseRegister`
--
ALTER TABLE CourseRegister
ADD UNIQUE INDEX UK_CourseRegister_CourseRegisterId (CourseRegisterId);
--
-- Create foreign key
--
ALTER TABLE CourseRegister
ADD CONSTRAINT FK_CourseRegister_CourseId FOREIGN KEY (CourseId)
REFERENCES Course (UserItemId) ON DELETE CASCADE;
--
-- Create foreign key
--
ALTER TABLE CourseRegister
ADD CONSTRAINT FK_CourseRegister_UserId FOREIGN KEY (UserId)
REFERENCES User (UserId) ON DELETE CASCADE;
--
-- Create table `CoursePayment`
--
CREATE TABLE CoursePayment (
CoursePaymentId char(36) NOT NULL COMMENT 'Id của khoản thanh toán',
UserId char(36) DEFAULT NULL COMMENT 'Id của người thanh toán',
CourseId char(36) DEFAULT NULL COMMENT 'Id của khóa học',
Fee decimal(10, 0) NOT NULL COMMENT 'Giá thanh toán',
PaymentMethod varchar(255) NOT NULL COMMENT 'Phương thức thanh toán',
CreatedBy varchar(255) DEFAULT NULL COMMENT 'Người tạo',
CreatedTime datetime DEFAULT NULL COMMENT 'Thời gian tạo',
ModifiedBy varchar(255) DEFAULT NULL COMMENT 'Người sửa',
ModifiedTime datetime DEFAULT NULL COMMENT 'Thời gian sửa',
PRIMARY KEY (CoursePaymentId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 491,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Danh sách thanh toán khóa học có tính phí',
ROW_FORMAT = DYNAMIC;
--
-- Create index `UK_CoursePayment_CoursePaymentId` on table `CoursePayment`
--
ALTER TABLE CoursePayment
ADD UNIQUE INDEX UK_CoursePayment_CoursePaymentId (CoursePaymentId);
--
-- Create foreign key
--
ALTER TABLE CoursePayment
ADD CONSTRAINT FK_CoursePayment_CourseId FOREIGN KEY (CourseId)
REFERENCES Course (UserItemId) ON DELETE SET NULL;
--
-- Create foreign key
--
ALTER TABLE CoursePayment
ADD CONSTRAINT FK_CoursePayment_UserId FOREIGN KEY (UserId)
REFERENCES User (UserId) ON DELETE SET NULL;
--
-- Create table `CourseLesson`
--
CREATE TABLE CourseLesson (
CourseLessonId char(36) NOT NULL COMMENT 'Id của bài học trong khóa học',
CourseId char(36) NOT NULL COMMENT 'Id của khóa học',
LessonId char(36) NOT NULL COMMENT 'Id của bài học',
Offset int NOT NULL COMMENT 'Thứ tự bài học trong khóa học',
LessonTitle varchar(255) NOT NULL COMMENT 'Tiêu đề của khóa học trong bài học',
CreatedBy varchar(255) DEFAULT NULL COMMENT 'Người tạo',
CreatedTime datetime DEFAULT NULL COMMENT 'Thời gian tạo',
ModifiedBy varchar(255) DEFAULT NULL COMMENT 'Người chỉnh sửa',
ModifiedTime datetime DEFAULT NULL COMMENT 'Thời gian sửa',
PRIMARY KEY (CourseLessonId)
)
ENGINE = INNODB,
AVG_ROW_LENGTH = 491,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci,
COMMENT = 'Lưu xem khóa học có bài học nào',
ROW_FORMAT = DYNAMIC;
--
-- Create index `IDX_CourseLesson_Offset` on table `CourseLesson`
--
ALTER TABLE CourseLesson
ADD INDEX IDX_CourseLesson_Offset (Offset);
--
-- Create index `UK_CourseLesson_CourseLessonId` on table `CourseLesson`
--
ALTER TABLE CourseLesson
ADD UNIQUE INDEX UK_CourseLesson_CourseLessonId (CourseLessonId);
--
-- Create foreign key
--
ALTER TABLE CourseLesson
ADD CONSTRAINT FK_CourseLesson_CourseId FOREIGN KEY (CourseId)
REFERENCES Course (UserItemId) ON DELETE CASCADE;
--
-- Create foreign key
--
ALTER TABLE CourseLesson
ADD CONSTRAINT FK_CourseLesson_LessonId FOREIGN KEY (LessonId)
REFERENCES Lesson (UserItemId) ON DELETE CASCADE;
--
-- Create view `ViewTotalCourseRelation`
--
CREATE VIEW ViewTotalCourseRelation
AS