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