Index: scripts/ddl.sql
===================================================================
--- scripts/ddl.sql	(revision c807e22a23a43e4044ff83aa0fe6a9c8c59a7cb4)
+++ scripts/ddl.sql	(revision 23cd88b16adec9007a2c123f2550544aa2e7a4f1)
@@ -29,5 +29,5 @@
     full_name TEXT NOT NULL, 
     email TEXT NOT NULL,
-    password TEXT NOT NULL,
+    password_hash TEXT NOT NULL,
     username TEXT NOT NULL, 
     profile_photo TEXT
@@ -85,4 +85,23 @@
     name   TEXT NOT NULL,
     created_by BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE
+);
+
+CREATE TABLE CONTRIBUTIONS (
+    musical_entity_id BIGINT NOT NULL REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
+    artist_id BIGINT NOT NULL REFERENCES ARTISTS(user_id) ON DELETE CASCADE,
+    contribution_order INT NOT NULL,
+ 
+    CONSTRAINT contributions_pk
+        PRIMARY KEY (musical_entity_id, artist_id),
+ 
+    CONSTRAINT contributions_order_positive
+        CHECK (contribution_order > 0),
+);
+
+CREATE TABLE ROLES (
+    role_id BIGINT PRIMARY KEY,
+    name TEXT NOT NULL,
+ 
+    CONSTRAINT roles_name_unique UNIQUE (name)
 );
 
@@ -152,10 +171,15 @@
 );
 
-CREATE TABLE ARTIST_CONTRIBUTIONS (
-    artist_id BIGINT REFERENCES ARTISTS(user_id) ON DELETE CASCADE,
-    musical_entity_id BIGINT REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
-    role TEXT NOT NULL,
-
-    CONSTRAINT artist_contribution_id
-        PRIMARY KEY (artist_id, musical_entity_id)
+CREATE TABLE CONTRIBUTION_ROLES (
+    musical_entity_id BIGINT NOT NULL,
+    artist_id BIGINT NOT NULL,
+    role_id BIGINT NOT NULL REFERENCES ROLES(role_id),
+ 
+    CONSTRAINT contribution_roles_pk
+        PRIMARY KEY (musical_entity_id, artist_id, role_id),
+ 
+    CONSTRAINT contribution_roles_contribution_fk
+        FOREIGN KEY (musical_entity_id, artist_id)
+        REFERENCES CONTRIBUTIONS(musical_entity_id, artist_id)
+        ON DELETE CASCADE
 );
