db.sql 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. DROP DATABASE IF EXISTS nabu;
  2. CREATE DATABASE IF NOT EXISTS nabu
  3. CHARACTER SET = 'utf8mb4'
  4. COLLATE = 'utf8mb4_general_ci';
  5. USE nabu;
  6. CREATE TABLE IF NOT EXISTS `roles` (
  7. `id` TINYINT UNSIGNED NOT NULL,
  8. `name` VARCHAR(20) NOT NULL,
  9. CONSTRAINT roles_id_pk PRIMARY KEY(id),
  10. CONSTRAINT roles_name_uk UNIQUE(name)
  11. );
  12. CREATE TABLE IF NOT EXISTS `users` (
  13. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  14. `role_id` TINYINT UNSIGNED NOT NULL DEFAULT 3,
  15. `name` VARCHAR(255) NOT NULL,
  16. `username` VARCHAR(255) NOT NULL,
  17. `email` VARCHAR(255),
  18. `password` VARCHAR(255) NOT NULL,
  19. `activated` TINYINT(1) NOT NULL DEFAULT FALSE,
  20. `creation_date` DATETIME(0) NOT NULL,
  21. CONSTRAINT users_id_pk PRIMARY KEY(id),
  22. CONSTRAINT users_username_uk UNIQUE(username),
  23. CONSTRAINT users_email_uk UNIQUE(email),
  24. CONSTRAINT users_role_id_fk FOREIGN KEY(role_id) REFERENCES roles(id) ON UPDATE RESTRICT ON DELETE RESTRICT
  25. );
  26. CREATE TABLE IF NOT EXISTS `verifications` (
  27. `id` INT UNSIGNED NOT NULL,
  28. `hash` VARCHAR(255),
  29. `expiration` INT UNSIGNED NOT NULL,
  30. CONSTRAINT verifications_id_pk PRIMARY KEY(id),
  31. CONSTRAINT verifications_id_fk FOREIGN KEY(id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE
  32. );
  33. CREATE TABLE IF NOT EXISTS `profiles` (
  34. `id` INT UNSIGNED NOT NULL,
  35. `avatar` VARCHAR(255),
  36. `background` VARCHAR(255),
  37. `description` VARCHAR(255),
  38. CONSTRAINT profiles_id_pk PRIMARY KEY(id),
  39. CONSTRAINT profiles_id_fk FOREIGN KEY(id) REFERENCES users(id) ON UPDATE RESTRICT ON DELETE RESTRICT,
  40. CONSTRAINT profiles_avatar_uk UNIQUE(avatar),
  41. CONSTRAINT profiles_background_uk UNIQUE(background)
  42. );
  43. CREATE TABLE IF NOT EXISTS `articles` (
  44. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  45. `user_id` INT UNSIGNED NOT NULL,
  46. `title` VARCHAR(246) NOT NULL,
  47. `synopsis` VARCHAR(255) NOT NULL,
  48. `content` MEDIUMTEXT NOT NULL,
  49. `slug` VARCHAR(255) NOT NULL,
  50. `cover` VARCHAR(255),
  51. `authorized` TINYINT(1) NOT NULL DEFAULT FALSE,
  52. `creation_date` DATETIME(0) NOT NULL,
  53. `modification_date` DATETIME(0),
  54. CONSTRAINT articles_id_pk PRIMARY KEY(id),
  55. CONSTRAINT articles_user_id_fk FOREIGN KEY(user_id) REFERENCES users(id) ON UPDATE RESTRICT ON DELETE RESTRICT,
  56. CONSTRAINT articles_slug_uk UNIQUE(slug),
  57. CONSTRAINT articles_cover_uk UNIQUE(cover)
  58. );
  59. CREATE TABLE IF NOT EXISTS `categories` (
  60. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  61. `name` VARCHAR(50) NOT NULL,
  62. CONSTRAINT categories_id_pk PRIMARY KEY(id),
  63. CONSTRAINT categories_name_uk UNIQUE(name)
  64. );
  65. CREATE TABLE IF NOT EXISTS `categories_article` (
  66. `article_id` INT UNSIGNED NOT NULL,
  67. `categorie_id` INT UNSIGNED NOT NULL,
  68. CONSTRAINT categories_article_pk PRIMARY KEY(article_id, categorie_id),
  69. CONSTRAINT categories_article_article_id_fk FOREIGN KEY(article_id) REFERENCES articles(id) ON UPDATE RESTRICT ON DELETE RESTRICT,
  70. CONSTRAINT categories_categorie_id_fk FOREIGN KEY(categorie_id) REFERENCES categories(id) ON UPDATE RESTRICT ON DELETE RESTRICT
  71. );
  72. CREATE TABLE IF NOT EXISTS `authorizations` (
  73. `article_id` INT UNSIGNED NOT NULL,
  74. `user_id` INT UNSIGNED NOT NULL,
  75. `authorization_date` DATETIME(0) NOT NULL,
  76. CONSTRAINT authorizations_pk PRIMARY KEY(article_id, authorization_date),
  77. CONSTRAINT authorizations_article_id_fk FOREIGN KEY(article_id) REFERENCES articles(id) ON UPDATE RESTRICT ON DELETE RESTRICT,
  78. CONSTRAINT authorizations_user_id_fk FOREIGN KEY(user_id) REFERENCES users(id) ON UPDATE RESTRICT ON DELETE RESTRICT
  79. );
  80. CREATE TABLE IF NOT EXISTS `comments` (
  81. `user_id` INT UNSIGNED NOT NULL,
  82. `article_id` INT UNSIGNED NOT NULL,
  83. `body` VARCHAR(255) NOT NULL,
  84. `comment_date` DATETIME(0) NOT NULL,
  85. CONSTRAINT comments_pk PRIMARY KEY(user_id, comment_date),
  86. CONSTRAINT comments_user_id_fk FOREIGN KEY(user_id) REFERENCES users(id) ON UPDATE RESTRICT ON DELETE RESTRICT,
  87. CONSTRAINT comments_article_id_fk FOREIGN KEY(article_id) REFERENCES articles(id) ON UPDATE RESTRICT ON DELETE RESTRICT
  88. );
  89. CREATE TABLE IF NOT EXISTS `favorites` (
  90. `user_id` INT UNSIGNED NOT NULL,
  91. `article_id` INT UNSIGNED NOT NULL,
  92. CONSTRAINT favorites_pk PRIMARY KEY(user_id, article_id),
  93. CONSTRAINT favorites_user_id_fk FOREIGN KEY(user_id) REFERENCES users(id) ON UPDATE RESTRICT ON DELETE RESTRICT,
  94. CONSTRAINT favorites_article_id_fk FOREIGN KEY(article_id) REFERENCES articles(id) ON UPDATE RESTRICT ON DELETE RESTRICT
  95. );
  96. INSERT INTO roles(id, name) VALUES(1, 'ADMINISTRATOR'), (2, 'MODERATOR'), (3, 'USER');