1 -- The MySQL database layout for the AUR. Certain data
2 -- is also included such as AccountTypes, etc.
4 DROP DATABASE IF EXISTS AUR;
5 CREATE DATABASE AUR DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
8 -- Define the Account Types for the AUR.
10 CREATE TABLE AccountTypes (
11 ID TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
12 AccountType VARCHAR(32) NOT NULL DEFAULT '',
15 INSERT INTO AccountTypes (ID, AccountType) VALUES (1, 'User');
16 INSERT INTO AccountTypes (ID, AccountType) VALUES (2, 'Trusted User');
17 INSERT INTO AccountTypes (ID, AccountType) VALUES (3, 'Developer');
18 INSERT INTO AccountTypes (ID, AccountType) VALUES (4, 'Trusted User & Developer');
21 -- User information for each user regardless of type.
24 ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
25 AccountTypeID TINYINT UNSIGNED NOT NULL DEFAULT 1,
26 Suspended TINYINT UNSIGNED NOT NULL DEFAULT 0,
27 Username VARCHAR(32) NOT NULL,
28 Email VARCHAR(64) NOT NULL,
29 Passwd CHAR(32) NOT NULL,
30 Salt CHAR(32) NOT NULL DEFAULT '',
31 ResetKey CHAR(32) NOT NULL DEFAULT '',
32 RealName VARCHAR(64) NOT NULL DEFAULT '',
33 LangPreference VARCHAR(5) NOT NULL DEFAULT 'en',
34 IRCNick VARCHAR(32) NOT NULL DEFAULT '',
35 PGPKey VARCHAR(40) NULL DEFAULT NULL,
36 LastLogin BIGINT UNSIGNED NOT NULL DEFAULT 0,
37 LastLoginIPAddress INTEGER UNSIGNED NOT NULL DEFAULT 0,
38 InactivityTS BIGINT UNSIGNED NOT NULL DEFAULT 0,
39 RegistrationTS TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
43 INDEX (AccountTypeID),
44 FOREIGN KEY (AccountTypeID) REFERENCES AccountTypes(ID) ON DELETE NO ACTION
46 -- A default developer account for testing purposes
47 INSERT INTO Users (ID, AccountTypeID, Username, Email, Passwd) VALUES (
48 1, 3, 'dev', 'dev@localhost', MD5('dev'));
49 INSERT INTO Users (ID, AccountTypeID, Username, Email, Passwd) VALUES (
50 2, 2, 'tu', 'tu@localhost', MD5('tu'));
51 INSERT INTO Users (ID, AccountTypeID, Username, Email, Passwd) VALUES (
52 3, 1, 'user', 'user@localhost', MD5('user'));
55 -- SSH public keys used for the aurweb SSH/Git interface.
57 CREATE TABLE SSHPubKeys (
58 UserID INTEGER UNSIGNED NOT NULL,
59 Fingerprint VARCHAR(44) NOT NULL,
60 PubKey VARCHAR(4096) NOT NULL,
61 PRIMARY KEY (Fingerprint),
62 FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE
66 -- Track Users logging in/out of AUR web site.
68 CREATE TABLE Sessions (
69 UsersID INTEGER UNSIGNED NOT NULL,
70 SessionID CHAR(32) NOT NULL,
71 LastUpdateTS BIGINT UNSIGNED NOT NULL,
72 FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE,
77 -- Information on package bases
79 CREATE TABLE PackageBases (
80 ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
81 Name VARCHAR(255) NOT NULL,
82 NumVotes INTEGER UNSIGNED NOT NULL DEFAULT 0,
83 Popularity DECIMAL(10,6) UNSIGNED NOT NULL DEFAULT 0,
84 OutOfDateTS BIGINT UNSIGNED NULL DEFAULT NULL,
85 FlaggerComment VARCHAR(255) NOT NULL,
86 SubmittedTS BIGINT UNSIGNED NOT NULL,
87 ModifiedTS BIGINT UNSIGNED NOT NULL,
88 FlaggerUID BIGINT UNSIGNED NULL DEFAULT NULL, -- who flagged the package out-of-date?
89 SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL, -- who submitted it?
90 MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- User
91 PackagerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- Last packager
96 INDEX (MaintainerUID),
98 FOREIGN KEY (FlaggerUID) REFERENCES Users(ID) ON DELETE SET NULL,
99 -- deleting a user will cause packages to be orphaned, not deleted
100 FOREIGN KEY (SubmitterUID) REFERENCES Users(ID) ON DELETE SET NULL,
101 FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE SET NULL,
102 FOREIGN KEY (PackagerUID) REFERENCES Users(ID) ON DELETE SET NULL
106 -- Keywords of package bases
108 CREATE TABLE PackageKeywords (
109 PackageBaseID INTEGER UNSIGNED NOT NULL,
110 Keyword VARCHAR(255) NOT NULL DEFAULT '',
111 PRIMARY KEY (PackageBaseID, Keyword),
112 FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE
116 -- Information about the actual packages
118 CREATE TABLE Packages (
119 ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
120 PackageBaseID INTEGER UNSIGNED NOT NULL,
121 Name VARCHAR(255) NOT NULL,
122 Version VARCHAR(255) NOT NULL DEFAULT '',
123 Description VARCHAR(255) NULL DEFAULT NULL,
124 URL VARCHAR(255) NULL DEFAULT NULL,
127 FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE
131 -- Information about licenses
133 CREATE TABLE Licenses (
134 ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
135 Name VARCHAR(255) NOT NULL,
141 -- Information about package-license-relations
143 CREATE TABLE PackageLicenses (
144 PackageID INTEGER UNSIGNED NOT NULL,
145 LicenseID INTEGER UNSIGNED NOT NULL,
146 PRIMARY KEY (PackageID, LicenseID),
147 FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE,
148 FOREIGN KEY (LicenseID) REFERENCES Licenses(ID) ON DELETE CASCADE
152 -- Information about groups
154 CREATE TABLE Groups (
155 ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
156 Name VARCHAR(255) NOT NULL,
162 -- Information about package-group-relations
164 CREATE TABLE PackageGroups (
165 PackageID INTEGER UNSIGNED NOT NULL,
166 GroupID INTEGER UNSIGNED NOT NULL,
167 PRIMARY KEY (PackageID, GroupID),
168 FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE,
169 FOREIGN KEY (GroupID) REFERENCES Groups(ID) ON DELETE CASCADE
173 -- Define the package dependency types
175 CREATE TABLE DependencyTypes (
176 ID TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
177 Name VARCHAR(32) NOT NULL DEFAULT '',
180 INSERT INTO DependencyTypes VALUES (1, 'depends');
181 INSERT INTO DependencyTypes VALUES (2, 'makedepends');
182 INSERT INTO DependencyTypes VALUES (3, 'checkdepends');
183 INSERT INTO DependencyTypes VALUES (4, 'optdepends');
186 -- Track which dependencies a package has
188 CREATE TABLE PackageDepends (
189 PackageID INTEGER UNSIGNED NOT NULL,
190 DepTypeID TINYINT UNSIGNED NOT NULL,
191 DepName VARCHAR(255) NOT NULL,
192 DepCondition VARCHAR(255),
193 DepArch VARCHAR(255) NULL DEFAULT NULL,
196 FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE,
197 FOREIGN KEY (DepTypeID) REFERENCES DependencyTypes(ID) ON DELETE NO ACTION
201 -- Define the package relation types
203 CREATE TABLE RelationTypes (
204 ID TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
205 Name VARCHAR(32) NOT NULL DEFAULT '',
208 INSERT INTO RelationTypes VALUES (1, 'conflicts');
209 INSERT INTO RelationTypes VALUES (2, 'provides');
210 INSERT INTO RelationTypes VALUES (3, 'replaces');
213 -- Track which conflicts, provides and replaces a package has
215 CREATE TABLE PackageRelations (
216 PackageID INTEGER UNSIGNED NOT NULL,
217 RelTypeID TINYINT UNSIGNED NOT NULL,
218 RelName VARCHAR(255) NOT NULL,
219 RelCondition VARCHAR(255),
220 RelArch VARCHAR(255) NULL DEFAULT NULL,
223 FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE,
224 FOREIGN KEY (RelTypeID) REFERENCES RelationTypes(ID) ON DELETE NO ACTION
228 -- Track which sources a package has
230 CREATE TABLE PackageSources (
231 PackageID INTEGER UNSIGNED NOT NULL,
232 Source VARCHAR(255) NOT NULL DEFAULT "/dev/null",
233 SourceArch VARCHAR(255) NULL DEFAULT NULL,
235 FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE
239 -- Track votes for packages
241 CREATE TABLE PackageVotes (
242 UsersID INTEGER UNSIGNED NOT NULL,
243 PackageBaseID INTEGER UNSIGNED NOT NULL,
244 VoteTS BIGINT UNSIGNED NULL DEFAULT NULL,
246 INDEX (PackageBaseID),
247 FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE,
248 FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE
250 CREATE UNIQUE INDEX VoteUsersIDPackageID ON PackageVotes (UsersID, PackageBaseID);
252 -- Record comments for packages
254 CREATE TABLE PackageComments (
255 ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
256 PackageBaseID INTEGER UNSIGNED NOT NULL,
257 UsersID INTEGER UNSIGNED NULL DEFAULT NULL,
258 Comments TEXT NOT NULL DEFAULT '',
259 CommentTS BIGINT UNSIGNED NOT NULL DEFAULT 0,
260 EditedTS BIGINT UNSIGNED NULL DEFAULT NULL,
261 EditedUsersID INTEGER UNSIGNED NULL DEFAULT NULL,
262 DelUsersID INTEGER UNSIGNED NULL DEFAULT NULL,
265 INDEX (PackageBaseID),
266 FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE SET NULL,
267 FOREIGN KEY (EditedUsersID) REFERENCES Users(ID) ON DELETE SET NULL,
268 FOREIGN KEY (DelUsersID) REFERENCES Users(ID) ON DELETE CASCADE,
269 FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE
272 -- Package base co-maintainers
274 CREATE TABLE PackageComaintainers (
275 UsersID INTEGER UNSIGNED NOT NULL,
276 PackageBaseID INTEGER UNSIGNED NOT NULL,
277 Priority INTEGER UNSIGNED NOT NULL,
279 INDEX (PackageBaseID),
280 FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE,
281 FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE
284 -- Comment addition notifications
286 CREATE TABLE CommentNotify (
287 PackageBaseID INTEGER UNSIGNED NOT NULL,
288 UserID INTEGER UNSIGNED NOT NULL,
289 FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE,
290 FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE
292 CREATE UNIQUE INDEX NotifyUserIDPkgID ON CommentNotify (UserID, PackageBaseID);
294 -- Package name blacklist
296 CREATE TABLE PackageBlacklist (
297 ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
298 Name VARCHAR(64) NOT NULL,
303 -- Define package request types
305 CREATE TABLE RequestTypes (
306 ID TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
307 Name VARCHAR(32) NOT NULL DEFAULT '',
310 INSERT INTO RequestTypes VALUES (1, 'deletion');
311 INSERT INTO RequestTypes VALUES (2, 'orphan');
312 INSERT INTO RequestTypes VALUES (3, 'merge');
316 CREATE TABLE PackageRequests (
317 ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
318 ReqTypeID TINYINT UNSIGNED NOT NULL,
319 PackageBaseID INTEGER UNSIGNED NULL,
320 PackageBaseName VARCHAR(255) NOT NULL,
321 MergeBaseName VARCHAR(255) NULL,
322 UsersID INTEGER UNSIGNED NULL DEFAULT NULL,
323 Comments TEXT NOT NULL DEFAULT '',
324 RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0,
325 Status TINYINT UNSIGNED NOT NULL DEFAULT 0,
328 INDEX (PackageBaseID),
329 FOREIGN KEY (ReqTypeID) REFERENCES RequestTypes(ID) ON DELETE NO ACTION,
330 FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE SET NULL,
331 FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE SET NULL
336 CREATE TABLE IF NOT EXISTS TU_VoteInfo (
337 ID int(10) unsigned NOT NULL auto_increment,
338 Agenda text NOT NULL,
339 User VARCHAR(32) NOT NULL,
340 Submitted bigint(20) unsigned NOT NULL,
341 End bigint(20) unsigned NOT NULL,
342 Quorum decimal(2, 2) unsigned NOT NULL,
343 SubmitterID int(10) unsigned NOT NULL,
344 Yes tinyint(3) unsigned NOT NULL default '0',
345 No tinyint(3) unsigned NOT NULL default '0',
346 Abstain tinyint(3) unsigned NOT NULL default '0',
347 ActiveTUs tinyint(3) unsigned NOT NULL default '0',
349 FOREIGN KEY (SubmitterID) REFERENCES Users(ID) ON DELETE CASCADE
352 -- Individual vote records
354 CREATE TABLE IF NOT EXISTS TU_Votes (
355 VoteID int(10) unsigned NOT NULL,
356 UserID int(10) unsigned NOT NULL,
357 FOREIGN KEY (VoteID) REFERENCES TU_VoteInfo(ID) ON DELETE CASCADE,
358 FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE
361 -- Malicious user banning
364 IPAddress INTEGER UNSIGNED NOT NULL DEFAULT 0,
365 BanTS TIMESTAMP NOT NULL,
366 PRIMARY KEY (IPAddress)