SHOW:
|
|
- or go back to the newest paste.
1 | USE [master] | |
2 | GO | |
3 | CREATE DATABASE [WWWConference] | |
4 | CONTAINMENT = NONE | |
5 | ON PRIMARY | |
6 | ( NAME = N'WWWConference', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\WWWConference_Data', SIZE =25600KB , MAXSIZE = 102400KB , FILEGROWTH = 10%) | |
7 | LOG ON | |
8 | ( NAME = N'WWWConference_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\WWWConference_Log' , SIZE =25600KB , MAXSIZE = 51200KB , FILEGROWTH = 20%) | |
9 | GO | |
10 | ALTER DATABASE [WWWConference] SET COMPATIBILITY_LEVEL = 120 | |
11 | GO | |
12 | IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) | |
13 | begin | |
14 | EXEC [WWWConference].[dbo].[sp_fulltext_database] @action = 'enable' | |
15 | end | |
16 | GO | |
17 | ALTER DATABASE [WWWConference] SET ANSI_NULL_DEFAULT OFF | |
18 | GO | |
19 | ALTER DATABASE [WWWConference] SET ANSI_NULLS OFF | |
20 | GO | |
21 | ALTER DATABASE [WWWConference] SET ANSI_PADDING OFF | |
22 | GO | |
23 | ALTER DATABASE [WWWConference] SET ANSI_WARNINGS OFF | |
24 | GO | |
25 | ALTER DATABASE [WWWConference] SET ARITHABORT OFF | |
26 | GO | |
27 | ALTER DATABASE [WWWConference] SET AUTO_CLOSE OFF | |
28 | GO | |
29 | ALTER DATABASE [WWWConference] SET AUTO_SHRINK OFF | |
30 | GO | |
31 | ALTER DATABASE [WWWConference] SET AUTO_UPDATE_STATISTICS ON | |
32 | GO | |
33 | ALTER DATABASE [WWWConference] SET CURSOR_CLOSE_ON_COMMIT OFF | |
34 | GO | |
35 | ALTER DATABASE [WWWConference] SET CURSOR_DEFAULT GLOBAL | |
36 | GO | |
37 | ALTER DATABASE [WWWConference] SET CONCAT_NULL_YIELDS_NULL OFF | |
38 | GO | |
39 | ALTER DATABASE [WWWConference] SET NUMERIC_ROUNDABORT OFF | |
40 | GO | |
41 | ALTER DATABASE [WWWConference] SET QUOTED_IDENTIFIER OFF | |
42 | GO | |
43 | ALTER DATABASE [WWWConference] SET RECURSIVE_TRIGGERS OFF | |
44 | GO | |
45 | ALTER DATABASE [WWWConference] SET DISABLE_BROKER | |
46 | GO | |
47 | ALTER DATABASE [WWWConference] SET AUTO_UPDATE_STATISTICS_ASYNC OFF | |
48 | GO | |
49 | ALTER DATABASE [WWWConference] SET DATE_CORRELATION_OPTIMIZATION OFF | |
50 | GO | |
51 | ALTER DATABASE [WWWConference] SET TRUSTWORTHY OFF | |
52 | GO | |
53 | ALTER DATABASE [WWWConference] SET ALLOW_SNAPSHOT_ISOLATION OFF | |
54 | GO | |
55 | ALTER DATABASE [WWWConference] SET PARAMETERIZATION SIMPLE | |
56 | GO | |
57 | ALTER DATABASE [WWWConference] SET READ_COMMITTED_SNAPSHOT OFF | |
58 | GO | |
59 | ALTER DATABASE [WWWConference] SET HONOR_BROKER_PRIORITY OFF | |
60 | GO | |
61 | ALTER DATABASE [WWWConference] SET RECOVERY SIMPLE | |
62 | GO | |
63 | ALTER DATABASE [WWWConference] SET MULTI_USER | |
64 | GO | |
65 | ALTER DATABASE [WWWConference] SET PAGE_VERIFY CHECKSUM | |
66 | GO | |
67 | ALTER DATABASE [WWWConference] SET DB_CHAINING OFF | |
68 | GO | |
69 | ALTER DATABASE [WWWConference] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) | |
70 | GO | |
71 | ALTER DATABASE [WWWConference] SET TARGET_RECOVERY_TIME = 0 SECONDS | |
72 | GO | |
73 | ALTER DATABASE [WWWConference] SET DELAYED_DURABILITY = DISABLED | |
74 | GO | |
75 | EXEC sys.sp_db_vardecimal_storage_format N'WWWConference', N'ON' | |
76 | GO | |
77 | ||
78 | USE [WWWConference] | |
79 | GO | |
80 | ||
81 | --Create users | |
82 | CREATE LOGIN moder WITH PASSWORD = 'moder' | |
83 | CREATE USER moder FOR LOGIN moder | |
84 | GO | |
85 | ||
86 | --Create roles | |
87 | CREATE ROLE administrator | |
88 | GRANT INSERT, SELECT, UPDATE, DELETE | |
89 | ON messages, users, users_pending_review | |
90 | TO administrator | |
91 | EXEC sp_addrolemember 'administrator', 'moder' | |
92 | GO | |
93 | ||
94 | CREATE ROLE www_user | |
95 | GRANT INSERT | |
96 | ON messages, users_pending_review | |
97 | TO www_user | |
98 | ||
99 | GRANT SELECT | |
100 | ON messages | |
101 | TO www_user | |
102 | ||
103 | CREATE ROLE guest | |
104 | GRANT SELECT | |
105 | ON messages | |
106 | TO guest | |
107 | ||
108 | -- Create schemas | |
109 | ||
110 | -- Create tables | |
111 | SET ANSI_NULLS ON | |
112 | GO | |
113 | SET QUOTED_IDENTIFIER ON | |
114 | GO | |
115 | CREATE TABLE messages | |
116 | ( | |
117 | id INTEGER NOT NULL, | |
118 | topic VARCHAR(255) NOT NULL, | |
119 | text VARCHAR(1000) NOT NULL, | |
120 | date DATE NOT NULL, | |
121 | parent INTEGER, | |
122 | author INTEGER NOT NULL, | |
123 | PRIMARY KEY(id) | |
124 | ); | |
125 | GO | |
126 | SET ANSI_NULLS ON | |
127 | GO | |
128 | SET QUOTED_IDENTIFIER ON | |
129 | GO | |
130 | CREATE TABLE users | |
131 | ( | |
132 | id INTEGER NOT NULL, | |
133 | username VARCHAR(255) NOT NULL, | |
134 | password VARCHAR(255) NOT NULL, | |
135 | fullname VARCHAR(255) NOT NULL, | |
136 | birth_date DATE, | |
137 | email VARCHAR (255), | |
138 | PRIMARY KEY(id) | |
139 | ); | |
140 | GO | |
141 | SET ANSI_NULLS ON | |
142 | GO | |
143 | SET QUOTED_IDENTIFIER ON | |
144 | GO | |
145 | CREATE TABLE users_pending_review | |
146 | ( | |
147 | primary_key INTEGER NOT NULL, | |
148 | username VARCHAR(255) NOT NULL, | |
149 | password VARCHAR(255) NOT NULL, | |
150 | fullname VARCHAR(255) NOT NULL, | |
151 | birth_date DATE, | |
152 | email VARCHAR (255), | |
153 | PRIMARY KEY(primary_key) | |
154 | ); | |
155 | GO | |
156 | ||
157 | -- Create FKs | |
158 | ALTER TABLE messages | |
159 | ADD FOREIGN KEY (author) | |
160 | REFERENCES users(primary_key) | |
161 | --MATCH SIMPLE | |
162 | ; | |
163 | GO | |
164 | ALTER TABLE messages | |
165 | ADD FOREIGN KEY (parent) | |
166 | REFERENCES messages(id) | |
167 | -- MATCH SIMPLE | |
168 | ; | |
169 | GO | |
170 | ||
171 | -- Create Indexes | |
172 | CREATE INDEX full_text ON messages (text, topic, author); | |
173 | GO | |
174 | ||
175 | --Create Views | |
176 | CREATE VIEW short_message_review AS | |
177 | SELECT id, topic, author, date | |
178 | FROM messages | |
179 | ||
180 | --Create functions | |
181 | --Функция на добавление сообщения с созданием новой темы. @text - текст сообщения, @topic - тема. | |
182 | CREATE FUNCTION new_topic (@text varchar (1000), @topic varchar (256)) | |
183 | AS | |
184 | BEGIN | |
185 | DECLARE @author int | |
186 | SET @author = SELECT FIRST(id) FROM users WHERE username = USER_NAME () | |
187 | INSERT INTO messages (topic, text, date, author) | |
188 | VALUES (@topic, @text, GETDATE(), @author) | |
189 | END | |
190 | GO | |
191 | ||
192 | --Функция на добавление ответа к уже созданному сообщению. @text - текст сообщения, @parent_id - id сообщения, на который дается ответ | |
193 | CREATE FUNCTION reply_message (@text varchar (1000), @parent_id int) | |
194 | AS | |
195 | BEGIN | |
196 | DECLARE @author int | |
197 | DECLARE @topic varchar (255) | |
198 | SET @author = SELECT FIRST(id) FROM users WHERE username = USER_NAME () | |
199 | SET @topic = 'RE:' + | |
200 | (SELECT FIRST(topic) FROM messages WHERE id = @parent_id) | |
201 | INSERT INTO messages (topic, text, date, author, parent) | |
202 | VALUES (@topic, @text, GETDATE(), @author, @parent_id) | |
203 | END | |
204 | GO | |
205 | ||
206 | --Функция отправки зароса на регистрацию. @username - имя пользователя, @password - пароль. @fullname - полное имя | |
207 | --@email - адрес электронной почты, @birth_date - дата рождения. Возвращает 1, если пользователь с таким userame уже есть в таблице, иначе - 0. | |
208 | CREATE FUNCTION require_registration (@username varchar (255), @password varchar (255), @fullname varchar (255), @email varchar (255), @birth_date DATE) | |
209 | RETURNS int | |
210 | AS | |
211 | BEGIN | |
212 | IF EXISTS (SELECT * FROM users WHERE username = @username) | |
213 | BEGIN | |
214 | PRINT N'User with such name has already been registered'; | |
215 | RETURN 1 | |
216 | END | |
217 | ELSE | |
218 | BEGIN | |
219 | INSERT INTO users_pending_review (username, password, fullname, email, birth_date) | |
220 | VALUES (@username, @password, @fullname, @email, @birth_date) | |
221 | RETURN 0 | |
222 | END | |
223 | END | |
224 | GO | |
225 | ||
226 | ||
227 | --Функция для подтверждения регистрации пользователя с id @id из таблицы users_pending_review. Возвращает 0, если успешно, 1 - если неуспешно | |
228 | CREATE FUNCTION confirm_registration (@id int) | |
229 | RETURNS int | |
230 | AS | |
231 | BEGIN | |
232 | DECLARE @user_exists int | |
233 | DECLARE @username, @password, @fullname, @email varchar (255) | |
234 | DECLARE @birth_date DATE | |
235 | SET @username = SELECT FIRST (username) FROM users_pending_review WHERE id = @id | |
236 | SET @password = SELECT FIRST (password) FROM users_pending_review WHERE id = @id | |
237 | SET @fullname = SELECT FIRST (fullname) FROM users_pending_review WHERE id = @id | |
238 | SET @birth_date = SELECT FIRST (birth_date) FROM users_pending_review WHERE id = @id | |
239 | IF EXISTS (SELECT * FROM users WHERE username = @username) | |
240 | BEGIN | |
241 | PRINT N'User with such name has already been registered'; | |
242 | RETURN 1 | |
243 | END | |
244 | ELSE | |
245 | BEGIN | |
246 | CREATE LOGIN @username WITH PASSWORD = @password | |
247 | CREATE USER @username FOR LOGIN @username | |
248 | exec sp_addrolemember 'www_user', username | |
249 | INSERT INTO users (username, password, fullname, email, birth_date) | |
250 | VALUES (@username, @password, @fullname, @email, @birth_date) | |
251 | DELETE FROM users_pending_review | |
252 | WHERE id = @id | |
253 | RETURN 0 | |
254 | END | |
255 | END | |
256 | GO | |
257 | ||
258 | --Функция, возвращающая текст сообщения по id | |
259 | CREATE FUNCTION get_text_message (@id int) | |
260 | RETURNS varchar (1000) | |
261 | AS | |
262 | RETURN (SELECT text FROM messages WHERE id = @id) | |
263 | GO | |
264 | ||
265 | --Функция, блокирующая доступ пользователя с логином @username к добавлению сообщений | |
266 | CREATE FUNCTION block_user (@username varchar (255)) | |
267 | AS | |
268 | DENY INSERT | |
269 | ON messages | |
270 | TO @username | |
271 | GO | |
272 | ||
273 | --Функция, разблокирующая доступ пользователя с логином @username к добавлению сообщений | |
274 | CREATE FUNCTION block_user (@username varchar (255)) | |
275 | AS | |
276 | GRANT INSERT | |
277 | ON messages | |
278 | TO @username | |
279 | GO | |
280 | ||
281 | --Функция, удаляющая сообщение с номером @id из таблицы | |
282 | CREATE FUNCTION delete_message (@id int) | |
283 | AS | |
284 | DELETE FROM messages | |
285 | WHERE id = @id | |
286 | GO | |
287 | ||
288 | --Функция поиска по слову в теме | |
289 | CREATE FUNCTION search_in_topic (@word varchar (255)) | |
290 | AS | |
291 | SELECT * FROM messages where topic LIKE '%' + @word + '%' | |
292 | GO | |
293 | ||
294 | ||
295 | --Функция поиска по слову в тексте | |
296 | CREATE FUNCTION search_in_text (@word varchar (255)) | |
297 | AS | |
298 | SELECT * FROM messages where text LIKE '%' + @word + '%' | |
299 | GO | |
300 | ||
301 | ||
302 | --Функция поиска по автору | |
303 | CREATE FUNCTION search_in_author (@word varchar (255)) | |
304 | AS | |
305 | SELECT * FROM messages where author LIKE '%' + @word + '%' | |
306 | GO | |
307 | ||
308 | --create procedures | |
309 | --Процедура вывода списка сообщений | |
310 | CREATE PROCEDURE review_messages | |
311 | AS | |
312 | SELECT * FROM short_messages_review | |
313 | GROUP BY parent_id | |
314 | GO | |
315 | ||
316 | ||
317 | --create triggers | |
318 | CREATE TRIGGER delete_trigger | |
319 | ON messages | |
320 | AFTER DELETE | |
321 | AS | |
322 | DELETE FROM messages | |
323 | WHERE parent_id = (SELECT FIRST(id) FROM deleted) | |
324 | GO | |
325 | ||
326 | ||
327 | USE [master] | |
328 | GO | |
329 | ALTER DATABASE [WWWConference] SET READ_WRITE | |
330 | GO |