source: subversion/trunk/roundcubemail/SQL/mssql.initial.sql @ 4567

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