Changes between Version 5 and Version 6 of ddlScript.sql
- Timestamp:
- 08/24/26 15:31:19 (13 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ddlScript.sql
v5 v6 4 4 -- Delete tables if they exist 5 5 DROP TABLE IF EXISTS NEED_APPROVAL CASCADE; 6 DROP TABLE IF EXISTS NOTIFY CASCADE;7 DROP TABLE IF EXISTS ROLES CASCADE;8 DROP TABLE IF EXISTS PERMISSION_LEVEL CASCADE;9 DROP TABLE IF EXISTS SUGGESTION_TYPE CASCADE;10 DROP TABLE IF EXISTS CONTENT_TYPE CASCADE;11 6 DROP TABLE IF EXISTS READING_LIST_ITEMS CASCADE; 12 7 DROP TABLE IF EXISTS HAS_GENRE CASCADE; … … 18 13 DROP TABLE IF EXISTS READING_LIST CASCADE; 19 14 DROP TABLE IF EXISTS CHAPTER CASCADE; 20 DROP TABLE IF EXISTS STATUS CASCADE;21 15 DROP TABLE IF EXISTS STORY CASCADE; 22 16 DROP TABLE IF EXISTS WRITER CASCADE; … … 32 26 username VARCHAR(255) NOT NULL UNIQUE, 33 27 email VARCHAR(255) NOT NULL UNIQUE, 34 user_name VARCHAR(100) NOT NULL, 28 user_name VARCHAR(100) NOT NULL, 35 29 surname VARCHAR(100) NOT NULL, 36 30 password VARCHAR(255) NOT NULL, 37 user_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 38 user_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 31 user_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 32 user_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 39 33 CONSTRAINT email_format CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$') 40 34 ); … … 42 36 CREATE TABLE ADMINS( 43 37 user_id INTEGER PRIMARY KEY, 38 assigned_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, 44 39 FOREIGN KEY (user_id) REFERENCES USERS(user_id) 45 40 ON DELETE CASCADE … … 49 44 CREATE TABLE REGULAR_USER( 50 45 user_id INTEGER PRIMARY KEY, 46 joined_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, 51 47 FOREIGN KEY (user_id) REFERENCES USERS(user_id) 52 48 ON DELETE CASCADE … … 56 52 CREATE TABLE WRITER( 57 53 user_id INTEGER PRIMARY KEY, 54 bio TEXT, 58 55 FOREIGN KEY (user_id) REFERENCES USERS(user_id) 59 56 ON DELETE CASCADE … … 67 64 short_description VARCHAR(500) NOT NULL, 68 65 image VARCHAR(2048), 69 story_content TEXT NOT NULL, 70 user_id INTEGER NOT NULL, 71 story_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 72 story_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 66 story_content TEXT NOT NULL, 67 status VARCHAR(50) NOT NULL DEFAULT 'draft', 68 user_id INTEGER NOT NULL, 69 story_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 70 story_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 71 CONSTRAINT status_values CHECK (status IN ('draft', 'published', 'archived')), 73 72 FOREIGN KEY (user_id) REFERENCES WRITER(user_id) 74 ON DELETE CASCADE75 ON UPDATE CASCADE76 );77 78 CREATE TABLE STATUS(79 story_id INTEGER,80 status VARCHAR(50) NOT NULL,81 CONSTRAINT status_pk PRIMARY KEY(story_id, status),82 CONSTRAINT status_values CHECK (status IN ('draft', 'published', 'archived')),83 FOREIGN KEY (story_id) REFERENCES STORY(story_id)84 73 ON DELETE CASCADE 85 74 ON UPDATE CASCADE … … 91 80 chapter_name VARCHAR(100) NOT NULL, 92 81 title VARCHAR(200) NOT NULL, 93 chapter_content TEXT NOT NULL, 82 chapter_content TEXT NOT NULL, 94 83 word_count INTEGER CHECK (word_count >= 0), 95 84 rating DECIMAL(3,2) CHECK (rating >= 0 AND rating <= 5), … … 98 87 story_id INTEGER NOT NULL, 99 88 chapter_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 100 chapter_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 89 chapter_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 101 90 CONSTRAINT unique_chapter_number UNIQUE(story_id, chapter_number), 102 91 FOREIGN KEY (story_id) REFERENCES STORY(story_id) … … 107 96 CREATE TABLE GENRE( 108 97 genre_id SERIAL PRIMARY KEY, 109 genre_name VARCHAR(100) NOT NULL UNIQUE 98 genre_name VARCHAR(100) NOT NULL UNIQUE 110 99 ); 111 100 112 101 CREATE TABLE READING_LIST( 113 102 list_id SERIAL PRIMARY KEY, 114 list_name VARCHAR(100) NOT NULL, 115 list_content TEXT, 103 list_name VARCHAR(100) NOT NULL, 104 list_content TEXT, 116 105 is_public BOOLEAN NOT NULL, 117 106 user_id INTEGER NOT NULL, 118 list_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 119 list_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 107 list_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 108 list_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 120 109 FOREIGN KEY (user_id) REFERENCES USERS(user_id) 121 110 ON DELETE CASCADE … … 125 114 CREATE TABLE NOTIFICATION( 126 115 notification_id SERIAL PRIMARY KEY, 127 notification_content TEXT NOT NULL, 116 notification_content TEXT NOT NULL, 117 content_type VARCHAR(50) NOT NULL, 128 118 is_read BOOLEAN DEFAULT FALSE, 129 recipient_user_id INTEGER,130 type VARCHAR(50),131 119 link VARCHAR(500), 132 notification_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 133 FOREIGN KEY (recipient_user_id) REFERENCES USERS(user_id) 134 ON DELETE SET NULL 135 ON UPDATE CASCADE 136 ); 137 138 CREATE TABLE CONTENT_TYPE( 139 notification_id INTEGER, 140 content_type VARCHAR(50) NOT NULL, 141 CONSTRAINT content_type_pk PRIMARY KEY(notification_id, content_type), 142 FOREIGN KEY (notification_id) REFERENCES NOTIFICATION(notification_id) 120 user_id INTEGER NOT NULL, 121 story_id INTEGER NOT NULL, 122 notification_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 123 FOREIGN KEY (user_id) REFERENCES USERS(user_id) 124 ON DELETE CASCADE 125 ON UPDATE CASCADE, 126 FOREIGN KEY (story_id) REFERENCES STORY(story_id) 143 127 ON DELETE CASCADE 144 128 ON UPDATE CASCADE … … 149 133 original_text TEXT NOT NULL, 150 134 suggested_text TEXT NOT NULL, 135 suggestion_type VARCHAR(50) NOT NULL, 151 136 accepted BOOLEAN NOT NULL DEFAULT FALSE, 152 suggestion_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 137 suggestion_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 153 138 applied_at TIMESTAMPTZ, 154 139 story_id INTEGER NOT NULL, … … 158 143 ); 159 144 160 CREATE TABLE SUGGESTION_TYPE(161 suggestion_id INTEGER,162 suggestion_type VARCHAR(50) NOT NULL,163 CONSTRAINT suggestion_type_pk PRIMARY KEY(suggestion_id, suggestion_type),164 FOREIGN KEY (suggestion_id) REFERENCES AI_SUGGESTION(suggestion_id)165 ON DELETE CASCADE166 ON UPDATE CASCADE167 );168 169 145 CREATE TABLE LIKES( 170 146 user_id INTEGER, 171 147 story_id INTEGER, 172 like _created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,148 liked_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 173 149 CONSTRAINT like_pk PRIMARY KEY(user_id, story_id), 174 150 FOREIGN KEY (user_id) REFERENCES USERS(user_id) … … 182 158 CREATE TABLE COMMENT( 183 159 comment_id SERIAL PRIMARY KEY, 184 comment_content TEXT NOT NULL, 160 comment_content TEXT NOT NULL, 185 161 user_id INTEGER NOT NULL, 186 162 story_id INTEGER NOT NULL, 187 163 comment_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 188 comment_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 164 comment_updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 189 165 FOREIGN KEY (user_id) REFERENCES USERS(user_id) 190 166 ON DELETE CASCADE … … 198 174 user_id INTEGER, 199 175 story_id INTEGER, 200 collab_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 176 role VARCHAR(50) NOT NULL, 177 permission_level INTEGER, 178 collab_created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, 201 179 CONSTRAINT collaboration_pk PRIMARY KEY(user_id, story_id), 202 180 FOREIGN KEY (user_id) REFERENCES USERS(user_id) … … 204 182 ON UPDATE CASCADE, 205 183 FOREIGN KEY (story_id) REFERENCES STORY(story_id) 206 ON DELETE CASCADE207 ON UPDATE CASCADE208 );209 210 CREATE TABLE ROLES(211 user_id INTEGER,212 story_id INTEGER,213 roles VARCHAR(50) NOT NULL,214 CONSTRAINT role_pk PRIMARY KEY(user_id, story_id, roles),215 FOREIGN KEY (user_id, story_id) REFERENCES COLLABORATION(user_id, story_id)216 ON DELETE CASCADE217 ON UPDATE CASCADE218 );219 220 CREATE TABLE PERMISSION_LEVEL(221 user_id INTEGER,222 story_id INTEGER,223 permission_level INTEGER NOT NULL,224 CONSTRAINT permission_level_pk PRIMARY KEY(user_id, story_id, permission_level),225 FOREIGN KEY (user_id, story_id) REFERENCES COLLABORATION(user_id, story_id)226 184 ON DELETE CASCADE 227 185 ON UPDATE CASCADE … … 253 211 ); 254 212 255 CREATE TABLE NOTIFY(256 user_id INTEGER,257 story_id INTEGER,258 notification_id INTEGER,259 CONSTRAINT notify_pk PRIMARY KEY(user_id, story_id, notification_id),260 FOREIGN KEY (user_id) REFERENCES USERS(user_id)261 ON DELETE CASCADE262 ON UPDATE CASCADE,263 FOREIGN KEY (story_id) REFERENCES STORY(story_id)264 ON DELETE CASCADE265 ON UPDATE CASCADE,266 FOREIGN KEY (notification_id) REFERENCES NOTIFICATION(notification_id)267 ON DELETE CASCADE268 ON UPDATE CASCADE269 );270 271 213 CREATE TABLE NEED_APPROVAL( 272 214 suggestion_id INTEGER, … … 283 225 ON DELETE CASCADE 284 226 ON UPDATE CASCADE 285 ); 227 ); 286 228 }}}
