schema.sql 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. drop table if exists user_choice;
  2. drop table if exists choices;
  3. drop table if exists attachments;
  4. drop table if exists votes;
  5. drop table if exists user_group;
  6. drop table if exists groups;
  7. drop table if exists users;
  8. PRAGMA foreign_keys = ON;
  9. create table users (
  10. id INTEGER PRIMARY KEY AUTOINCREMENT,
  11. email TEXT UNIQUE NOT NULL,
  12. password TEXT NOT NULL,
  13. name TEXT UNIQUE NOT NULL,
  14. organization TEXT,
  15. is_admin BOOLEAN DEFAULT 0 NOT NULL,
  16. key TEXT,
  17. CHECK (is_admin IN (0, 1))
  18. );
  19. create table groups (
  20. id INTEGER PRIMARY KEY AUTOINCREMENT,
  21. name TEXT UNIQUE NOT NULL,
  22. system BOOLEAN DEFAULT 0 NOT NULL,
  23. CHECK (system IN (0, 1))
  24. );
  25. create table user_group (
  26. id_user INTEGER,
  27. id_group INTEGER,
  28. FOREIGN KEY(id_user) REFERENCES users (id) ON DELETE CASCADE,
  29. FOREIGN KEY(id_group) REFERENCES groups (id) ON DELETE CASCADE,
  30. PRIMARY KEY(id_user, id_group)
  31. );
  32. create table votes (
  33. id INTEGER PRIMARY KEY AUTOINCREMENT,
  34. title TEXT NOT NULL,
  35. description TEXT,
  36. category TEXT,
  37. date_begin INTEGER DEFAULT CURRENT_TIMESTAMP NOT NULL,
  38. date_end INTEGER NOT NULL,
  39. is_transparent BOOLEAN DEFAULT 1 NOT NULL,
  40. is_public BOOLEAN DEFAULT 1 NOT NULL,
  41. is_multiplechoice BOOLEAN DEFAULT 1 NOT NULL,
  42. is_weighted BOOLEAN DEFAULT 0 NOT NULL,
  43. is_open BOOLEAN DEFAULT 0 NOT NULL,
  44. is_terminated BOOLEAN DEFAULT 0 NOT NULL,
  45. id_author INTEGER DEFAULT 1 NOT NULL,
  46. id_group INTEGER DEFAULT 1 NOT NULL,
  47. FOREIGN KEY(id_author) REFERENCES users (id) ON DELETE SET DEFAULT,
  48. FOREIGN KEY(id_group) REFERENCES groups (id),
  49. CHECK (is_transparent IN (0, 1)),
  50. CHECK (is_public IN (0, 1)),
  51. CHECK (is_weighted IN (0, 1)),
  52. CHECK (is_open IN (0, 1)),
  53. CHECK (is_terminated IN (0, 1))
  54. );
  55. create table attachments (
  56. id INTEGER PRIMARY KEY AUTOINCREMENT,
  57. url TEXT NOT NULL,
  58. id_vote INTEGER NOT NULL,
  59. FOREIGN KEY(id_vote) REFERENCES votes (id) ON DELETE CASCADE
  60. );
  61. create table choices (
  62. id INTEGER PRIMARY KEY AUTOINCREMENT,
  63. name TEXT NOT NULL,
  64. id_vote INTEGER NOT NULL,
  65. FOREIGN KEY(id_vote) REFERENCES votes (id) ON DELETE CASCADE
  66. );
  67. create table user_choice (
  68. id_user INTEGER,
  69. id_choice INTEGER,
  70. weight INTEGER,
  71. FOREIGN KEY(id_user) REFERENCES users (id) ON DELETE CASCADE,
  72. FOREIGN KEY(id_choice) REFERENCES choices (id) ON DELETE CASCADE,
  73. PRIMARY KEY(id_user, id_choice)
  74. );
  75. -- Test data
  76. INSERT INTO users (id, email, password, name, organization, is_admin, key) VALUES (1, "admin@admin.fr", "d033e22ae348aeb5660fc2140aec35850c4da997", "Toto (admin) Tata", "World corp", 1, "test"); -- mdp = admin
  77. INSERT INTO groups (id, name, system) VALUES (1, "Tous", 1);
  78. INSERT INTO groups (name) VALUES ("CA");
  79. INSERT INTO groups (name) VALUES ("Membres");
  80. INSERT INTO user_group (id_user, id_group) VALUES(1, 1);