-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFileServer_Create_DB.sql
More file actions
110 lines (99 loc) · 3.62 KB
/
FileServer_Create_DB.sql
File metadata and controls
110 lines (99 loc) · 3.62 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
-- DROP DATABASE FileServer2;
CREATE DATABASE FileServer2;
USE FileServer2;
-- -----------------------------------------------------
-- Пользователь
-- -----------------------------------------------------
CREATE TABLE `User` (
Id INT AUTO_INCREMENT PRIMARY KEY,
Surname VARCHAR(45) NOT NULL,
`Name` VARCHAR(45) NOT NULL,
Patronymic VARCHAR(45) NOT NULL,
Email VARCHAR(60) NOT NULL,
PasswordHash CHAR(60) NOT NULL ,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- -----------------------------------------------------
-- Администратор
-- -----------------------------------------------------
CREATE TABLE Administrator(
Id INT AUTO_INCREMENT PRIMARY KEY,
IdUser INT NOT NULL,
FOREIGN KEY (IdUser) REFERENCES `User`(Id)
);
-- -----------------------------------------------------
-- Группа
-- -----------------------------------------------------
CREATE TABLE `Group` (
Id INT AUTO_INCREMENT PRIMARY KEY,
`Name` NVARCHAR(64) UNIQUE NOT NULL,
IdCreator INT NOT NULL,
FOREIGN KEY (IdCreator) REFERENCES `User`(Id)
);
-- -----------------------------------------------------
-- Участник группы
-- -----------------------------------------------------
CREATE TABLE GroupMember (
IdGroup INT NOT NULL,
IdUser INT NOT NULL,
PRIMARY KEY (IdGroup, IdUser),
FOREIGN KEY (IdGroup) REFERENCES `Group`(Id),
FOREIGN KEY (IdUser) REFERENCES `User`(Id)
);
-- -----------------------------------------------------
-- Метаданные папок
-- -----------------------------------------------------
CREATE TABLE DirectoryMetadata (
Id BIGINT AUTO_INCREMENT PRIMARY KEY,
`Path` NVARCHAR(4096) NOT NULL,
IdUser INT,
IdGroup INT,
`Mode` SMALLINT UNSIGNED NOT NULL,
FOREIGN KEY (IdUser) REFERENCES `User`(Id),
FOREIGN KEY (IdGroup) REFERENCES `Group`(Id),
INDEX path_index (path(768)), -- Префиксный индекс для длинных путей
CONSTRAINT CHK_DirectoryMetadata_is_used_for_subject
CHECK (IdGroup != NULL OR IdUser != NULL)
);
-- -----------------------------------------------------
-- Метаданные файлов
-- -----------------------------------------------------
CREATE TABLE FileMetadata (
Id BIGINT AUTO_INCREMENT PRIMARY KEY,
`Path` NVARCHAR(4096) NOT NULL,
IdUser INT,
IdGroup INT,
`Mode` SMALLINT UNSIGNED NOT NULL,
FOREIGN KEY (IdUser) REFERENCES `User`(Id),
FOREIGN KEY (IdGroup) REFERENCES `Group`(Id),
INDEX path_index (path(768)), -- Префиксный индекс для длинных путей
CONSTRAINT CHK_FileMetadata_is_used_for_subject
CHECK (IdGroup != NULL OR IdUser != NULL)
);
-- -----------------------------------------------------
-- Удалённый файл
-- -----------------------------------------------------
CREATE TABLE DeletedFile(
IdFileMetaData BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
WorkTime DATETIME NOT NULL,
FOREIGN KEY (IdFileMetaData) REFERENCES FileMetadata(Id)
);
-- -----------------------------------------------------
-- Тип операции
-- -----------------------------------------------------
CREATE TABLE OperationType(
Id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
`Name` NVARCHAR(45) NOT NULL
);
-- -----------------------------------------------------
-- История работы
-- -----------------------------------------------------
CREATE TABLE WorkHistory(
Id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
WorkTime DATETIME NOT NULL,
Path NVARCHAR(4096) NOT NULL,
IdOperationType INT NOT NULL,
IdUser INT NOT NULL,
FOREIGN KEY (IdOperationType) REFERENCES `OperationType`(Id),
FOREIGN KEY (IdUser) REFERENCES `User`(Id)
)