diff --git a/core/src/main/java/se/su/dsv/scipro/grading/SubmissionEvent.java b/core/src/main/java/se/su/dsv/scipro/grading/SubmissionEvent.java
index 664c1e6bcf..fd88070c36 100644
--- a/core/src/main/java/se/su/dsv/scipro/grading/SubmissionEvent.java
+++ b/core/src/main/java/se/su/dsv/scipro/grading/SubmissionEvent.java
@@ -18,27 +18,38 @@ import java.time.Instant;
 import java.util.Objects;
 
 @Entity
-@Table(name = "grading_history_submissions")
+@Table(name = "grading_history_submission")
 public class SubmissionEvent {
+    // ----------------------------------------------------------------------------------
+    // Basic JPA-mappings
+    // ----------------------------------------------------------------------------------
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
-    @ManyToOne
-    @JoinColumn(name = "project_id")
-    private Project project;
-
-    @ManyToOne
-    @JoinColumn(name = "author_id")
-    private User author;
-
     @Temporal(TemporalType.TIMESTAMP)
     @Column(name = "`when`")
     private Instant when;
 
     @Basic
+    @Column(name = "corrections")
     private String corrections;
 
+    // ----------------------------------------------------------------------------------
+    // JPA-mappings of foreign keys in this table (grading_history_submission) referencing
+    // other tables.
+    // ----------------------------------------------------------------------------------
+    @ManyToOne
+    @JoinColumn(name = "project_id", referencedColumnName = "id")
+    private Project project;
+
+    @ManyToOne
+    @JoinColumn(name = "author_user_id", referencedColumnName = "id")
+    private User author;
+
+    // ----------------------------------------------------------------------------------
+    // Properties (Getters and Setters)
+    // ----------------------------------------------------------------------------------
     public Long getId() {
         return id;
     }
@@ -47,22 +58,6 @@ public class SubmissionEvent {
         this.id = id;
     }
 
-    public Project getProject() {
-        return project;
-    }
-
-    public void setProject(Project project) {
-        this.project = project;
-    }
-
-    public User getAuthor() {
-        return author;
-    }
-
-    public void setAuthor(User user) {
-        this.author = user;
-    }
-
     public Instant getWhen() {
         return when;
     }
@@ -79,6 +74,25 @@ public class SubmissionEvent {
         this.corrections = corrections;
     }
 
+    public Project getProject() {
+        return project;
+    }
+
+    public void setProject(Project project) {
+        this.project = project;
+    }
+
+    public User getAuthor() {
+        return author;
+    }
+
+    public void setAuthor(User user) {
+        this.author = user;
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Methods Common To All Objects
+    // ----------------------------------------------------------------------------------
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
@@ -97,11 +111,8 @@ public class SubmissionEvent {
 
     @Override
     public String toString() {
-        return "RejectionEvent{" +
-                "id=" + id +
-                ", project=" + project +
-                ", author=" + author +
-                ", when=" + when +
+        return "RejectionEvent{" + "id=" + id + ", project=" + project +
+                ", author=" + author + ", when=" + when +
                 ", corrections='" + corrections + '\'' +
                 '}';
     }
diff --git a/core/src/main/java/se/su/dsv/scipro/project/Author.java b/core/src/main/java/se/su/dsv/scipro/project/Author.java
index c3094e697c..8adaa5fed3 100644
--- a/core/src/main/java/se/su/dsv/scipro/project/Author.java
+++ b/core/src/main/java/se/su/dsv/scipro/project/Author.java
@@ -1,26 +1,34 @@
 package se.su.dsv.scipro.project;
 
+import jakarta.persistence.Basic;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.MapsId;
+import jakarta.persistence.Table;
 import se.su.dsv.scipro.system.User;
 
-import jakarta.persistence.*;
 import java.io.Serializable;
 import java.util.Objects;
 
 @Entity
 @Table(name = "project_user")
 public class Author {
+    // ----------------------------------------------------------------------------------
+    // Embedded JPA-mapping
+    // ----------------------------------------------------------------------------------
     @EmbeddedId
     private AuthorPK authorPK;
 
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "project_id", nullable = false)
-    @MapsId("projectId")
-    private Project project;
-
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "user_id", nullable = false)
-    @MapsId("userId")
-    private User user;
+    // ----------------------------------------------------------------------------------
+    // Basic JPA-mappings
+    // ----------------------------------------------------------------------------------
+    @Basic(optional = true)
+    @Column(name = "reflection")
+    private String reflection;
 
     /**
      * If this author wants to be notified when a final seminar created
@@ -36,15 +44,29 @@ public class Author {
     @Column(name = "subscribed_to_final_seminar_notifications", nullable = false, columnDefinition = "BOOLEAN DEFAULT FALSE")
     private boolean subscribedToFinalSeminarNotifications;
 
-    @Basic(optional = true)
-    private String reflection;
+    // ----------------------------------------------------------------------------------
+    // JPA-mappings of foreign keys in this table (project_user) referencing other
+    // tables.
+    // ----------------------------------------------------------------------------------
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "project_id", nullable = false)
+    @MapsId("projectId")
+    private Project project;
 
-    public Project getProject() {
-        return project;
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "user_id", nullable = false)
+    @MapsId("userId")
+    private User user;
+
+    // ----------------------------------------------------------------------------------
+    // Properties (Getters and Setters)
+    // ----------------------------------------------------------------------------------
+    public String getReflection() {
+        return reflection;
     }
 
-    public User getUser() {
-        return user;
+    public void setReflection(String reflection) {
+        this.reflection = reflection;
     }
 
     public boolean isSubscribedToFinalSeminarNotifications() {
@@ -55,14 +77,17 @@ public class Author {
         this.subscribedToFinalSeminarNotifications = subscribedToFinalSeminarNotifications;
     }
 
-    public String getReflection() {
-        return reflection;
+    public Project getProject() {
+        return project;
     }
 
-    public void setReflection(String reflection) {
-        this.reflection = reflection;
+    public User getUser() {
+        return user;
     }
 
+    // ----------------------------------------------------------------------------------
+    // Nested class
+    // ----------------------------------------------------------------------------------
     @Embeddable
     public static class AuthorPK implements Serializable {
         private Long projectId;
diff --git a/core/src/main/java/se/su/dsv/scipro/project/Project.java b/core/src/main/java/se/su/dsv/scipro/project/Project.java
index 1f338b20d1..569d1da4a7 100755
--- a/core/src/main/java/se/su/dsv/scipro/project/Project.java
+++ b/core/src/main/java/se/su/dsv/scipro/project/Project.java
@@ -115,7 +115,7 @@ public class Project extends DomainObject {
     private Integer identifier;
 
     // ----------------------------------------------------------------------------------
-    // Embedded JPA-mappings
+    // Embedded JPA-mapping
     // ----------------------------------------------------------------------------------
     @Embedded
     @AttributeOverride(name = "name", column = @Column(name = "external_organization"))
@@ -185,7 +185,6 @@ public class Project extends DomainObject {
     // ----------------------------------------------------------------------------------
     // Properties (Getters and Setters)
     // ----------------------------------------------------------------------------------
-
     @Override
     public Long getId() {
         return this.id;
diff --git a/core/src/main/java/se/su/dsv/scipro/thesislink/ExternalLink.java b/core/src/main/java/se/su/dsv/scipro/thesislink/ExternalLink.java
index aeeff1631a..ee96eb8884 100644
--- a/core/src/main/java/se/su/dsv/scipro/thesislink/ExternalLink.java
+++ b/core/src/main/java/se/su/dsv/scipro/thesislink/ExternalLink.java
@@ -1,84 +1,103 @@
 package se.su.dsv.scipro.thesislink;
 
+import jakarta.persistence.Basic;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
 import se.su.dsv.scipro.project.Project;
 import se.su.dsv.scipro.system.DomainObject;
 import se.su.dsv.scipro.system.User;
 
-import jakarta.persistence.*;
 import java.util.Objects;
 
 @Entity
-@Table(name = "externallink")
+@Table(name = "external_link")
 public class ExternalLink extends DomainObject {
 
     public static final int MAX_CHARS = 255;
 
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @ManyToOne(optional = false)
-    private Project project;
-
-    @Column(nullable = false, length = MAX_CHARS)
-    private String url = "";
-
-    @ManyToOne(optional = false)
-    private User user;
-
-    @Column(nullable = true, length = MAX_CHARS)
-    private String description = "";
-
     public static IProject builder() {
         return new Builder();
     }
 
+    // ----------------------------------------------------------------------------------
+    // Basic JPA-mappings
+    // ----------------------------------------------------------------------------------
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Basic
+    @Column(name = "url", nullable = false, length = MAX_CHARS)
+    private String url = "";
+
+    @Column(name = "description", nullable = true, length = MAX_CHARS)
+    private String description = "";
+
+    // ----------------------------------------------------------------------------------
+    // JPA-mappings of foreign keys in this table (external_link) referencing
+    // other tables.
+    // ----------------------------------------------------------------------------------
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "project_id", referencedColumnName = "id")
+    private Project project;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "user_id", referencedColumnName = "id")
+    private User user;
+
+    // ----------------------------------------------------------------------------------
+    // Properties (Getters and Setters)
+    // ----------------------------------------------------------------------------------
     @Override
     public Long getId() {
         return this.id;
     }
 
-    public Project getProject() {
-        return this.project;
-    }
-
-    public String getUrl() {
-        return this.url;
-    }
-
-    public User getUser() {
-        return this.user;
-    }
-
-    public String getDescription() {
-        return this.description;
-    }
-
     public void setId(Long id) {
         this.id = id;
     }
 
-    public void setProject(Project project) {
-        this.project = project;
+    public String getUrl() {
+        return this.url;
     }
 
     public void setUrl(String url) {
         this.url = url;
     }
 
-    public void setUser(User user) {
-        this.user = user;
+    public String getDescription() {
+        return this.description;
     }
 
     public void setDescription(String description) {
         this.description = description;
     }
 
-    @Override
-    public String toString() {
-        return "ExternalLink(id=" + this.getId() + ", project=" + this.getProject() + ", url=" + this.getUrl() + ", user=" + this.getUser() + ", description=" + this.getDescription() + ")";
+    public Project getProject() {
+        return this.project;
     }
 
+    public void setProject(Project project) {
+        this.project = project;
+    }
+
+    public User getUser() {
+        return this.user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Methods Common To All Objects
+    // ----------------------------------------------------------------------------------
     @Override
     public boolean equals(final Object o) {
         if (o == this) return true;
@@ -92,15 +111,28 @@ public class ExternalLink extends DomainObject {
                 && Objects.equals(this.getDescription(), other.getDescription());
     }
 
-    protected boolean canEqual(final Object other) {
-        return other instanceof ExternalLink;
-    }
-
     @Override
     public int hashCode() {
         return Objects.hash(this.getId(), this.getProject(), this.getUrl(), this.getUser(), this.getDescription());
     }
 
+    @Override
+    public String toString() {
+        return "ExternalLink(id=" + this.getId() + ", project=" + this.getProject() +
+                ", url=" + this.getUrl() + ", user=" + this.getUser() + ", description=" +
+                this.getDescription() + ")";
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Other method
+    // ----------------------------------------------------------------------------------
+    protected boolean canEqual(final Object other) {
+        return other instanceof ExternalLink;
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Nested types
+    // ----------------------------------------------------------------------------------
     private static class Builder implements IProject, IURL, IUser, IBuild {
         private ExternalLink instance = new ExternalLink();
 
diff --git a/core/src/main/resources/db/migration/V389__harmonize_table_attribute_name.sql b/core/src/main/resources/db/migration/V389__harmonize_table_attribute_name.sql
index b5a0ea2001..42fe6ed70c 100644
--- a/core/src/main/resources/db/migration/V389__harmonize_table_attribute_name.sql
+++ b/core/src/main/resources/db/migration/V389__harmonize_table_attribute_name.sql
@@ -2484,18 +2484,135 @@ alter table `project_user_note`
         foreign key (user_id) references user (id)
             on delete cascade on update cascade;
 
--- todo: table: project_cosupervisor
+-- table: project_cosupervisor
 
+alter table `project_cosupervisor` drop foreign key `FK_fj57t069dymdrnnhdxcnfvvnn`;
+alter table `project_cosupervisor` drop foreign key `FK_18x2poxkt8s2bw9kpr7vbmd5j`;
 
--- todo: table: project_reviewer
+alter table `project_cosupervisor` drop key `FK_fj57t069dymdrnnhdxcnfvvnn`;
+alter table `project_cosupervisor` drop key `FK_18x2poxkt8s2bw9kpr7vbmd5j`;
 
--- todo: table: project_user
+alter table `project_cosupervisor` change `user_id` `user_id` bigint(20) not null after `project_id`;
 
--- todo: table: grading_history_submissions
+alter table `project_cosupervisor`
+    add constraint fk_project_cosupervisor_project_id
+        foreign key (project_id) references project (id)
+            on delete cascade on update cascade;
 
--- todo: table: externallink
+alter table `project_cosupervisor`
+    add constraint fk_project_cosupervisor_user_id
+        foreign key (user_id) references user (id)
+            on delete cascade on update cascade;
+
+-- table: project_reviewer
+
+alter table `project_reviewer` drop foreign key `FK_g7yryw3e0dtmuuvgw5qjhphjm`;
+alter table `project_reviewer` drop foreign key `FK_6aik0jd18kv3383fbt09xd0pi`;
+
+alter table `project_reviewer` drop key `FK_6aik0jd18kv3383fbt09xd0pi`;
+alter table `project_reviewer` drop key `FK_g7yryw3e0dtmuuvgw5qjhphjm`;
+
+alter table `project_reviewer`
+    add constraint fk_project_reviewer_project_id
+        foreign key (project_id) references project (id)
+            on delete cascade on update cascade;
+
+alter table `project_reviewer`
+    add constraint fk_project_reviewer_user_id
+        foreign key (user_id) references user (id)
+            on delete cascade on update cascade;
+
+-- table: project_user
+
+alter table `project_user` drop foreign key `project_user_user_id`;
+alter table `project_user` drop foreign key `project_user_project_id`;
+
+alter table `project_user` drop key `project_user_project_id`;
+
+alter table `project_user` change `user_id` `user_id` bigint(20) not null after `project_id`;
+alter table `project_user` change `reflection` `reflection` text default null after `user_id`;
+
+alter table `project_user`
+    add constraint fk_project_user_project_id
+        foreign key (project_id) references project (id)
+            on delete cascade on update cascade;
+
+alter table `project_user`
+    add constraint fk_project_user_user_id
+        foreign key (user_id) references user (id)
+            on delete cascade on update cascade;
+
+-- table: grading_history_submissions
+
+alter table `grading_history_submissions` drop foreign key `FK_grading_history_submissions_project`;
+alter table `grading_history_submissions` drop foreign key `FK_grading_history_submissions_author`;
+
+alter table `grading_history_submissions` drop key `FK_grading_history_submissions_project`;
+alter table `grading_history_submissions` drop key `FK_grading_history_submissions_author`;
+
+rename table `grading_history_submissions` to `grading_history_submission`;
+
+alter table `grading_history_submission` change `when` `when` timestamp not null default '0000-00-00 00:00:00' after `id`;
+alter table `grading_history_submission` change `corrections` `corrections` text default null after `when`;
+alter table `grading_history_submission` change  `author_id` `author_user_id` bigint(20) not null after `corrections`;
+
+alter table `grading_history_submission`
+    add constraint fk_grading_history_submission_project_id
+        foreign key (project_id) references project (id)
+            on delete cascade on update cascade;
+
+alter table `grading_history_submission`
+    add constraint fk_grading_history_submission_author_user_id
+        foreign key (author_user_id) references user (id)
+            on delete cascade on update cascade;
+
+-- table: externallink
+
+alter table `externallink` drop foreign key `FK_PROJECT`;
+alter table `externallink` drop foreign key `FK_USER`;
+
+alter table `externallink` drop key `FK_PROJECT`;
+alter table `externallink` drop key `FK_USER`;
+
+rename table `externallink` to `external_link`;
+
+alter table `external_link` change `description` `description` varchar(255) default null after `url`;
+
+alter table `external_link`
+    add constraint fk_external_link_project_id
+        foreign key (project_id) references project (id)
+            on delete cascade on update cascade;
+
+alter table `external_link`
+    add constraint fk_external_link_user_id
+        foreign key (user_id) references user (id)
+            on delete cascade on update cascade;
+
+-- table: grade
+
+alter table `grade` drop foreign key `FK_grade_user_reportedBy`;
+alter table `grade` drop foreign key `FK_grade_project`;
+
+alter table `grade` drop key `FK_grade_user_reportedBy`;
+alter table `grade` drop key `project_id`;
+
+alter table `grade` change `value` `value` varchar(255) not null after `id`;
+alter table `grade` change `reportedOn` `reported_when` date not null after `value`;
+alter table `grade` change `project_id` `project_id` bigint(20) not null after `reported_when`;
+alter table `grade` change `reportedBy` `reported_by_user_id` bigint(20) not null after `project_id`;
+
+alter table `grade` add constraint uk_grade_project_id unique(project_id);
+
+alter table `grade`
+    add constraint fk_grade_project_id
+        foreign key (project_id) references project (id)
+            on delete cascade on update cascade;
+
+alter table `grade`
+    add constraint fk_grade_reported_by_user_id
+        foreign key (reported_by_user_id) references user (id)
+            on delete cascade on update cascade;
 
--- todo: table: grade
 
 
 
@@ -2527,7 +2644,7 @@ order by table_name;
     select table_name, column_name, constraint_name, referenced_table_name, referenced_column_name
       from information_schema.key_column_usage
      where table_schema = 'tozh4728' and
-           table_name = 'criterion' and
+           table_name = 'grade' and
            constraint_name != 'PRIMARY';
 
     -- show foreign keys for all tables
@@ -2537,9 +2654,6 @@ order by table_name;
            constraint_name != 'PRIMARY'
   order by table_name collate utf8_nopad_bin, constraint_name collate utf8_nopad_bin;
 
-
-> Show collation;
-
-
+>>> Show collation;
 
 */
\ No newline at end of file