]> git.donarmstrong.com Git - roundcube.git/blob - SQL/mssql.initial.sql
4aa6fc9f7516112bc5fb5e08184ff786321276cf
[roundcube.git] / SQL / mssql.initial.sql
1 CREATE TABLE [dbo].[cache] (\r
2         [cache_id] [int] IDENTITY (1, 1) NOT NULL ,\r
3         [user_id] [int] NOT NULL ,\r
4         [cache_key] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
5         [created] [datetime] NOT NULL ,\r
6         [data] [text] COLLATE Latin1_General_CI_AI NOT NULL \r
7 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
8 GO\r
9 \r
10 CREATE TABLE [dbo].[contacts] (\r
11         [contact_id] [int] IDENTITY (1, 1) NOT NULL ,\r
12         [user_id] [int] NOT NULL ,\r
13         [changed] [datetime] NOT NULL ,\r
14         [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,\r
15         [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
16         [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,\r
17         [firstname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
18         [surname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
19         [vcard] [text] COLLATE Latin1_General_CI_AI NULL ,\r
20         [words] [text] COLLATE Latin1_General_CI_AI NULL \r
21 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
22 GO\r
23 \r
24 CREATE TABLE [dbo].[contactgroups] (\r
25         [contactgroup_id] [int] IDENTITY (1, 1) NOT NULL ,\r
26         [user_id] [int] NOT NULL ,\r
27         [changed] [datetime] NOT NULL ,\r
28         [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,\r
29         [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL\r
30 ) ON [PRIMARY] \r
31 GO\r
32 \r
33 CREATE TABLE [dbo].[contactgroupmembers] (\r
34         [contactgroup_id] [int] NOT NULL ,\r
35         [contact_id] [int] NOT NULL ,\r
36         [created] [datetime] NOT NULL\r
37 ) ON [PRIMARY] \r
38 GO\r
39 \r
40 CREATE TABLE [dbo].[identities] (\r
41         [identity_id] [int] IDENTITY (1, 1) NOT NULL ,\r
42         [user_id] [int] NOT NULL ,\r
43         [changed] [datetime] NOT NULL ,\r
44         [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,\r
45         [standard] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,\r
46         [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
47         [organization] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
48         [email] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
49         [reply-to] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
50         [bcc] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
51         [signature] [text] COLLATE Latin1_General_CI_AI NULL, \r
52         [html_signature] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL\r
53 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
54 GO\r
55 \r
56 CREATE TABLE [dbo].[messages] (\r
57         [message_id] [int] IDENTITY (1, 1) NOT NULL ,\r
58         [user_id] [int] NOT NULL ,\r
59         [del] [tinyint] NOT NULL ,\r
60         [cache_key] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
61         [created] [datetime] NOT NULL ,\r
62         [idx] [int] NOT NULL ,\r
63         [uid] [int] NOT NULL ,\r
64         [subject] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,\r
65         [from] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,\r
66         [to] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,\r
67         [cc] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,\r
68         [date] [datetime] NOT NULL ,\r
69         [size] [int] NOT NULL ,\r
70         [headers] [text] COLLATE Latin1_General_CI_AI NOT NULL ,\r
71         [structure] [text] COLLATE Latin1_General_CI_AI NULL \r
72 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
73 GO\r
74 \r
75 CREATE TABLE [dbo].[session] (\r
76         [sess_id] [varchar] (32) COLLATE Latin1_General_CI_AI NOT NULL ,\r
77         [created] [datetime] NOT NULL ,\r
78         [changed] [datetime] NULL ,\r
79         [ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL ,\r
80         [vars] [text] COLLATE Latin1_General_CI_AI NOT NULL \r
81 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
82 GO\r
83 \r
84 CREATE TABLE [dbo].[users] (\r
85         [user_id] [int] IDENTITY (1, 1) NOT NULL ,\r
86         [username] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
87         [mail_host] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
88         [alias] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
89         [created] [datetime] NOT NULL ,\r
90         [last_login] [datetime] NULL ,\r
91         [language] [varchar] (5) COLLATE Latin1_General_CI_AI NULL ,\r
92         [preferences] [text] COLLATE Latin1_General_CI_AI NULL \r
93 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
94 GO\r
95 \r
96 ALTER TABLE [dbo].[cache] WITH NOCHECK ADD \r
97          PRIMARY KEY  CLUSTERED \r
98         (\r
99                 [cache_id]\r
100         )  ON [PRIMARY] \r
101 GO\r
102 \r
103 ALTER TABLE [dbo].[contacts] WITH NOCHECK ADD \r
104         CONSTRAINT [PK_contacts_contact_id] PRIMARY KEY  CLUSTERED \r
105         (\r
106                 [contact_id]\r
107         )  ON [PRIMARY] \r
108 GO\r
109 \r
110 ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD \r
111         CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED \r
112         (\r
113                 [contactgroup_id]\r
114         )  ON [PRIMARY] \r
115 GO\r
116 \r
117 ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD \r
118         CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED \r
119         (\r
120                 [contactgroup_id], [contact_id]\r
121         )  ON [PRIMARY] \r
122 GO\r
123 \r
124 ALTER TABLE [dbo].[identities] WITH NOCHECK ADD \r
125          PRIMARY KEY  CLUSTERED \r
126         (\r
127                 [identity_id]\r
128         )  ON [PRIMARY] \r
129 GO\r
130 \r
131 ALTER TABLE [dbo].[messages] WITH NOCHECK ADD \r
132          PRIMARY KEY  CLUSTERED \r
133         (\r
134                 [message_id]\r
135         )  ON [PRIMARY] \r
136 GO\r
137 \r
138 ALTER TABLE [dbo].[session] WITH NOCHECK ADD \r
139         CONSTRAINT [PK_session_sess_id] PRIMARY KEY  CLUSTERED \r
140         (\r
141                 [sess_id]\r
142         )  ON [PRIMARY] \r
143 GO\r
144 \r
145 ALTER TABLE [dbo].[users] WITH NOCHECK ADD \r
146         CONSTRAINT [PK_users_user_id] PRIMARY KEY  CLUSTERED \r
147         (\r
148                 [user_id]\r
149         )  ON [PRIMARY] \r
150 GO\r
151 \r
152 ALTER TABLE [dbo].[cache] ADD \r
153         CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id],\r
154         CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key],\r
155         CONSTRAINT [DF_cache_created] DEFAULT (getdate()) FOR [created]\r
156 GO\r
157 \r
158 CREATE  INDEX [IX_cache_user_id] ON [dbo].[cache]([user_id]) ON [PRIMARY]\r
159 GO\r
160 \r
161 CREATE  INDEX [IX_cache_cache_key] ON [dbo].[cache]([cache_key]) ON [PRIMARY]\r
162 GO\r
163 \r
164 CREATE  INDEX [IX_cache_created] ON [dbo].[cache]([created]) ON [PRIMARY]\r
165 GO\r
166 \r
167 ALTER TABLE [dbo].[contacts] ADD \r
168         CONSTRAINT [DF_contacts_user_id] DEFAULT (0) FOR [user_id],\r
169         CONSTRAINT [DF_contacts_changed] DEFAULT (getdate()) FOR [changed],\r
170         CONSTRAINT [DF_contacts_del] DEFAULT ('0') FOR [del],\r
171         CONSTRAINT [DF_contacts_name] DEFAULT ('') FOR [name],\r
172         CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email],\r
173         CONSTRAINT [DF_contacts_firstname] DEFAULT ('') FOR [firstname],\r
174         CONSTRAINT [DF_contacts_surname] DEFAULT ('') FOR [surname],\r
175         CONSTRAINT [CK_contacts_del] CHECK ([del] = '1' or [del] = '0')\r
176 GO\r
177 \r
178 CREATE  INDEX [IX_contacts_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]\r
179 GO\r
180 \r
181 ALTER TABLE [dbo].[contactgroups] ADD \r
182         CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id],\r
183         CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed],\r
184         CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del],\r
185         CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name],\r
186         CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0')\r
187 GO\r
188 \r
189 CREATE  INDEX [IX_contactgroups_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]\r
190 GO\r
191 \r
192 ALTER TABLE [dbo].[contactgroupmembers] ADD \r
193         CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id],\r
194         CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id],\r
195         CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created]\r
196 GO\r
197 \r
198 CREATE  INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY]\r
199 GO\r
200 \r
201 ALTER TABLE [dbo].[identities] ADD \r
202         CONSTRAINT [DF_identities_user] DEFAULT ('0') FOR [user_id],\r
203         CONSTRAINT [DF_identities_del] DEFAULT ('0') FOR [del],\r
204         CONSTRAINT [DF_identities_standard] DEFAULT ('0') FOR [standard],\r
205         CONSTRAINT [DF_identities_name] DEFAULT ('') FOR [name],\r
206         CONSTRAINT [DF_identities_organization] DEFAULT ('') FOR [organization],\r
207         CONSTRAINT [DF_identities_email] DEFAULT ('') FOR [email],\r
208         CONSTRAINT [DF_identities_reply] DEFAULT ('') FOR [reply-to],\r
209         CONSTRAINT [DF_identities_bcc] DEFAULT ('') FOR [bcc],\r
210         CONSTRAINT [DF_identities_html_signature] DEFAULT ('0') FOR [html_signature],\r
211          CHECK ([standard] = '1' or [standard] = '0'),\r
212          CHECK ([del] = '1' or [del] = '0')\r
213 GO\r
214 \r
215 CREATE  INDEX [IX_identities_user_id] ON [dbo].[identities]([user_id]) ON [PRIMARY]\r
216 GO\r
217 \r
218 ALTER TABLE [dbo].[messages] ADD \r
219         CONSTRAINT [DF_messages_user_id] DEFAULT (0) FOR [user_id],\r
220         CONSTRAINT [DF_messages_del] DEFAULT (0) FOR [del],\r
221         CONSTRAINT [DF_messages_cache_key] DEFAULT ('') FOR [cache_key],\r
222         CONSTRAINT [DF_messages_created] DEFAULT (getdate()) FOR [created],\r
223         CONSTRAINT [DF_messages_idx] DEFAULT (0) FOR [idx],\r
224         CONSTRAINT [DF_messages_uid] DEFAULT (0) FOR [uid],\r
225         CONSTRAINT [DF_messages_subject] DEFAULT ('') FOR [subject],\r
226         CONSTRAINT [DF_messages_from] DEFAULT ('') FOR [from],\r
227         CONSTRAINT [DF_messages_to] DEFAULT ('') FOR [to],\r
228         CONSTRAINT [DF_messages_cc] DEFAULT ('') FOR [cc],\r
229         CONSTRAINT [DF_messages_date] DEFAULT (getdate()) FOR [date],\r
230         CONSTRAINT [DF_messages_size] DEFAULT (0) FOR [size]\r
231 GO\r
232 \r
233 CREATE  INDEX [IX_messages_user_id] ON [dbo].[messages]([user_id]) ON [PRIMARY]\r
234 GO\r
235 \r
236 CREATE  INDEX [IX_messages_cache_key] ON [dbo].[messages]([cache_key]) ON [PRIMARY]\r
237 GO\r
238 \r
239 CREATE  INDEX [IX_messages_uid] ON [dbo].[messages]([uid]) ON [PRIMARY]\r
240 GO\r
241 \r
242 CREATE  INDEX [IX_messages_created] ON [dbo].[messages]([created]) ON [PRIMARY]\r
243 GO\r
244 \r
245 ALTER TABLE [dbo].[session] ADD \r
246         CONSTRAINT [DF_session_sess_id] DEFAULT ('') FOR [sess_id],\r
247         CONSTRAINT [DF_session_created] DEFAULT (getdate()) FOR [created],\r
248         CONSTRAINT [DF_session_ip] DEFAULT ('') FOR [ip]\r
249 GO\r
250 \r
251 CREATE  INDEX [IX_session_changed] ON [dbo].[session]([changed]) ON [PRIMARY]\r
252 GO\r
253 \r
254 ALTER TABLE [dbo].[users] ADD \r
255         CONSTRAINT [DF_users_username] DEFAULT ('') FOR [username],\r
256         CONSTRAINT [DF_users_mail_host] DEFAULT ('') FOR [mail_host],\r
257         CONSTRAINT [DF_users_alias] DEFAULT ('') FOR [alias],\r
258         CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created]\r
259 GO\r
260 \r
261 CREATE  UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]\r
262 GO\r
263 \r
264 CREATE  INDEX [IX_users_alias] ON [dbo].[users]([alias]) ON [PRIMARY]\r
265 GO\r
266 \r
267 ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] \r
268     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
269     ON DELETE CASCADE ON UPDATE CASCADE\r
270 GO\r
271 \r
272 ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id]\r
273     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
274     ON DELETE CASCADE ON UPDATE CASCADE\r
275 GO\r
276 \r
277 ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id]\r
278     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
279     ON DELETE CASCADE ON UPDATE CASCADE\r
280 GO\r
281 \r
282 ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id]\r
283     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
284     ON DELETE CASCADE ON UPDATE CASCADE\r
285 GO\r
286 \r
287 ALTER TABLE [dbo].[messages] ADD CONSTRAINT [FK_messages_user_id]\r
288     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
289     ON DELETE CASCADE ON UPDATE CASCADE\r
290 GO\r
291 \r
292 ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id]\r
293     FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id])\r
294     ON DELETE CASCADE ON UPDATE CASCADE\r
295 GO\r
296 \r
297 -- Use trigger instead of foreign key (#1487112)\r
298 -- "Introducing FOREIGN KEY constraint ... may cause cycles or multiple cascade paths."\r
299 CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts]\r
300     AFTER DELETE AS\r
301     DELETE FROM [dbo].[contactgroupmembers]\r
302     WHERE [contact_id] IN (SELECT [contact_id] FROM deleted)\r
303 GO\r
304 \r