diff --git a/core/src/main/java/se/su/dsv/scipro/forum/notifications/ForumNotification.java b/core/src/main/java/se/su/dsv/scipro/forum/notifications/ForumNotification.java
index 3bc39f38ab..fe2bc877e4 100644
--- a/core/src/main/java/se/su/dsv/scipro/forum/notifications/ForumNotification.java
+++ b/core/src/main/java/se/su/dsv/scipro/forum/notifications/ForumNotification.java
@@ -1,26 +1,44 @@
 package se.su.dsv.scipro.forum.notifications;
 
+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.forum.dataobjects.ForumPost;
 import se.su.dsv.scipro.notifications.dataobject.NotificationEvent;
 
-import jakarta.persistence.*;
 import java.io.Serializable;
 import java.util.Objects;
 
 @Entity
 @Table(name = "forum_notification")
 class ForumNotification {
+    // ----------------------------------------------------------------------------------
+    // Embedded JPA-mapping
+    // ----------------------------------------------------------------------------------
     @EmbeddedId
     private Id id = new Id();
 
+    // ----------------------------------------------------------------------------------
+    // JPA-mappings of foreign keys in this table (forum_notification) referencing other
+    // tables.
+    // ----------------------------------------------------------------------------------
     @ManyToOne(optional = false)
+    @JoinColumn(name = "forum_post_id", referencedColumnName = "id")
     @MapsId("forumPostId")
     private ForumPost forumPost;
 
     @ManyToOne(optional = false)
+    @JoinColumn(name = "notification_data_id")
     @MapsId("notificationEventId")
     private NotificationEvent notificationEvent;
 
+    // ----------------------------------------------------------------------------------
+    // Constructors
+    // ----------------------------------------------------------------------------------
     protected ForumNotification() { } // JPA
 
     ForumNotification(final ForumPost forumPost, final NotificationEvent notificationEvent) {
@@ -28,6 +46,9 @@ class ForumNotification {
         this.notificationEvent = notificationEvent;
     }
 
+    // ----------------------------------------------------------------------------------
+    // Properties (Getters)
+    // ----------------------------------------------------------------------------------
     public ForumPost getForumPost() {
         return forumPost;
     }
@@ -36,6 +57,9 @@ class ForumNotification {
         return notificationEvent;
     }
 
+    // ----------------------------------------------------------------------------------
+    // Methods Common To All Objects
+    // ----------------------------------------------------------------------------------
     @Override
     public boolean equals(final Object o) {
         if (o == this) return true;
@@ -47,10 +71,6 @@ class ForumNotification {
                 && Objects.equals(this.getNotificationEvent(), other.getNotificationEvent());
     }
 
-    protected boolean canEqual(final Object other) {
-        return other instanceof ForumNotification;
-    }
-
     @Override
     public int hashCode() {
         return Objects.hash(this.id, this.getForumPost(), this.getNotificationEvent());
@@ -58,9 +78,20 @@ class ForumNotification {
 
     @Override
     public String toString() {
-        return "ForumNotification(id=" + this.id + ", forumPost=" + this.getForumPost() + ", notificationEvent=" + this.getNotificationEvent() + ")";
+        return "ForumNotification(id=" + this.id + ", forumPost=" + this.getForumPost() +
+                ", notificationEvent=" + this.getNotificationEvent() + ")";
     }
 
+    // ----------------------------------------------------------------------------------
+    // Other method
+    // ----------------------------------------------------------------------------------
+    protected boolean canEqual(final Object other) {
+        return other instanceof ForumNotification;
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Nested type
+    // ----------------------------------------------------------------------------------
     @Embeddable
     static class Id implements Serializable {
         private Long forumPostId;
@@ -103,7 +134,8 @@ class ForumNotification {
 
         @Override
         public String toString() {
-            return "ForumNotification.Id(forumPostId=" + this.getForumPostId() + ", notificationEventId=" + this.getNotificationEventId() + ")";
+            return "ForumNotification.Id(forumPostId=" + this.getForumPostId() + ", notificationEventId=" +
+                    this.getNotificationEventId() + ")";
         }
     }
 }
diff --git a/core/src/main/java/se/su/dsv/scipro/notifications/dataobject/Notification.java b/core/src/main/java/se/su/dsv/scipro/notifications/dataobject/Notification.java
index 073be08b40..5102db88cd 100755
--- a/core/src/main/java/se/su/dsv/scipro/notifications/dataobject/Notification.java
+++ b/core/src/main/java/se/su/dsv/scipro/notifications/dataobject/Notification.java
@@ -1,41 +1,59 @@
 package se.su.dsv.scipro.notifications.dataobject;
 
+import jakarta.persistence.Basic;
+import jakarta.persistence.CascadeType;
+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.*;
-
 @Entity
+@Table(name = "notification")
 public class Notification extends DomainObject {
 
-
-    public enum Type {
-        PROJECT, IDEA, FINAL_SEMINAR, PEER, MILESTONE,
-        GROUP, FORUM, CUSTOM
-    }
-
+    // ----------------------------------------------------------------------------------
+    // Basic JPA-mappings
+    // ----------------------------------------------------------------------------------
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
     @Basic(optional = false)
-    private boolean unread = true;
-
-    @Basic(optional = false)
+    @Column(name = "mailed")
     private boolean mailed = false;
 
+    @Basic(optional = false)
+    @Column(name = "unread")
+    private boolean unread = true;
+
+    // ----------------------------------------------------------------------------------
+    // JPA-mappings of foreign keys in this table (notification) referencing other
+    // tables.
+    // ----------------------------------------------------------------------------------
     @ManyToOne(cascade = CascadeType.ALL)
-    @JoinColumn(name = "notificationData_id")
+    @JoinColumn(name = "notification_data_id", referencedColumnName = "id")
     private NotificationEvent notificationEvent;
 
     @ManyToOne
+    @JoinColumn(name = "user_id", referencedColumnName = "id")
     private User user;
 
+    // ----------------------------------------------------------------------------------
+    // Constructor
+    // ----------------------------------------------------------------------------------
     public Notification() {
-
     }
 
+    // ----------------------------------------------------------------------------------
+    // Properties (Getters and Setters)
+    // ----------------------------------------------------------------------------------
     @Override
     public Long getId() {
         return id;
@@ -45,6 +63,14 @@ public class Notification extends DomainObject {
         this.id = id;
     }
 
+    public boolean isMailed() {
+        return mailed;
+    }
+
+    public void setMailed(boolean mailed) {
+        this.mailed = mailed;
+    }
+
     public boolean isUnread() {
         return unread;
     }
@@ -69,14 +95,9 @@ public class Notification extends DomainObject {
         this.user = user;
     }
 
-    public boolean isMailed() {
-        return mailed;
-    }
-
-    public void setMailed(boolean mailed) {
-        this.mailed = mailed;
-    }
-
+    // ----------------------------------------------------------------------------------
+    // Other methods
+    // ----------------------------------------------------------------------------------
     public String getTitle() {
         return getNotificationEvent().getTitle();
     }
@@ -108,4 +129,12 @@ public class Notification extends DomainObject {
     public User getCausedBy() {
         return getNotificationEvent().getCausedBy();
     }
+
+    // ----------------------------------------------------------------------------------
+    // Nested type
+    // ----------------------------------------------------------------------------------
+    public enum Type {
+        PROJECT, IDEA, FINAL_SEMINAR, PEER, MILESTONE,
+        GROUP, FORUM, CUSTOM
+    }
 }
diff --git a/core/src/main/java/se/su/dsv/scipro/notifications/dataobject/NotificationEvent.java b/core/src/main/java/se/su/dsv/scipro/notifications/dataobject/NotificationEvent.java
index 1aac89eca6..d9652617de 100755
--- a/core/src/main/java/se/su/dsv/scipro/notifications/dataobject/NotificationEvent.java
+++ b/core/src/main/java/se/su/dsv/scipro/notifications/dataobject/NotificationEvent.java
@@ -1,40 +1,103 @@
 package se.su.dsv.scipro.notifications.dataobject;
 
+import jakarta.persistence.Basic;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.DiscriminatorColumn;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Inheritance;
+import jakarta.persistence.InheritanceType;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.OneToMany;
+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.Collection;
 
 @Entity
+@Table(name = "notification_data")
 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
-@Table(name = "NotificationData")
+@DiscriminatorColumn(name = "subclass")
 public abstract class NotificationEvent extends DomainObject {
 
-
+    // ----------------------------------------------------------------------------------
+    // Basic JPA-mappings
+    // ----------------------------------------------------------------------------------
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     protected long id;
 
+    @Basic
+    @Column(name = "type")
     @Enumerated(EnumType.STRING)
     protected Notification.Type type;
 
-    @OneToMany(mappedBy = "notificationEvent", cascade = CascadeType.ALL, orphanRemoval = true)
-    private Collection<Notification> notifications;
-
     @Basic(optional = true)
+    @Column(name = "source")
     private String source;
 
     @Basic(optional = true)
+    @Column(name = "additional_source")
     private String additionalSource;
 
-
+    // ----------------------------------------------------------------------------------
+    // JPA-mappings of foreign keys in this table (notification_data) referencing other
+    // tables.
+    // ----------------------------------------------------------------------------------
     @ManyToOne(optional = true)
+    @JoinColumn(name = "caused_by_user_id", referencedColumnName = "id")
     private User causedBy;
 
+    // ----------------------------------------------------------------------------------
+    // JPA-mappings of other tables referencing to this table "notification_data"
+    // ----------------------------------------------------------------------------------
+    @OneToMany(mappedBy = "notificationEvent", cascade = CascadeType.ALL, orphanRemoval = true)
+    private Collection<Notification> notifications;
+
+    // ----------------------------------------------------------------------------------
+    // Constructors
+    // ----------------------------------------------------------------------------------
+    protected NotificationEvent() {
+
+    }
+
+    protected NotificationEvent(Notification.Type type) {
+        this.type = type;
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Properties (Getters and Setters)
+    // ----------------------------------------------------------------------------------
+    @Override
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
     public abstract Enum getEvent();
 
+    public Notification.Type getType() {
+        return type;
+    }
+
+    public void setType(Notification.Type type) {
+        this.type = type;
+    }
+
+
+    
+
     /**
      * The title of the entity this event is about.
      *
@@ -50,30 +113,10 @@ public abstract class NotificationEvent extends DomainObject {
 
     public abstract DomainObject getEntity();
 
-    protected NotificationEvent() {
 
-    }
 
-    protected NotificationEvent(Notification.Type type) {
-        this.type = type;
-    }
 
-    @Override
-    public Long getId() {
-        return id;
-    }
 
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Notification.Type getType() {
-        return type;
-    }
-
-    public void setType(Notification.Type type) {
-        this.type = type;
-    }
 
     public Collection<Notification> getNotifications() {
         return notifications;
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 35b68e9ba5..2a51c8cdf2 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
@@ -3069,6 +3069,138 @@ alter table `project_group_thread`
         foreign key (thread_id) references thread (id)
             on delete cascade on update cascade;
 
+/*
+ * Step 24: forum_notification, Notification, NotificationData
+ */
+
+-- table: forum_notification,
+
+alter table `forum_notification` drop foreign key `FK_forum_notification_notification_event`;
+alter table `forum_notification` drop foreign key `FK_forum_notification_forum_post`;
+
+alter table `forum_notification` drop key `FK_forum_notification_notification_event`;
+
+alter table `forum_notification` drop primary key;
+
+alter table `forum_notification` change `forumPost_id` `forum_post_id` bigint(20) not null;
+alter table `forum_notification` change `notificationEvent_id` `notification_data_id` bigint(20) not null;
+
+alter table `forum_notification` add primary key (forum_post_id, notification_data_id);
+
+alter table `forum_notification`
+    add constraint fk_forum_notification_forum_post_id
+        foreign key (forum_post_id) references forum_post (id)
+            on delete cascade on update cascade;
+
+-- table: Notification
+
+alter table `Notification` drop foreign key `FK_notification_user`;
+alter table `Notification` drop foreign key `FK2D45DD0B599425F6`;
+
+alter table `Notification` drop key `FK2D45DD0B599425F6`;
+alter table `Notification` drop key `FK2D45DD0B895349BF`;
+
+rename table `Notification` to `notification`;
+
+alter table `notification` change `mailed` `mailed` bit(1) not null after `version`;
+alter table `notification` change `notificationData_id` `notification_data_id` bigint(20) default null;
+
+alter table `notification`
+    add constraint fk_notification_user_id
+        foreign key (user_id) references user (id)
+            on delete cascade on update cascade;
+
+-- table: NotificationData
+
+alter table `NotificationData` drop foreign key `FK_notification_data_user_caused_by`;
+alter table `NotificationData` drop foreign key `FK_notification_data_project`;
+alter table `NotificationData` drop foreign key `FK_notification_data_peer_review`;
+alter table `NotificationData` drop foreign key `FK_notification_data_milestone`;
+alter table `NotificationData` drop foreign key `FK_notification_data_group`;
+alter table `NotificationData` drop foreign key `FK2DCAC355FCDADF61`;
+alter table `NotificationData` drop foreign key `FK2DCAC3558D40D1B9`;
+alter table `NotificationData` drop foreign key `FK2DCAC3554D07E0A9`;
+
+alter table `NotificationData` drop key `FK_notification_data_group`;
+alter table `NotificationData` drop key `FK_sqjaj3jb6t9lsw1l2p8ex8jnb`;
+alter table `NotificationData` drop key `FK2DCAC355FCDADF61`;
+alter table `NotificationData` drop key `FK2DCAC355B2E2AD78`;
+alter table `NotificationData` drop key `FK2DCAC3558D40D1B9`;
+alter table `NotificationData` drop key `FK2DCAC35542E9AC7B`;
+alter table `NotificationData` drop key `FK2DCAC355C1813915`;
+alter table `NotificationData` drop key `FK2DCAC3554D07E0A9`;
+
+rename table `NotificationData` to `notification_data`;
+
+alter table `notification_data` change `type` `type` varchar(255) default null after `event`;
+alter table `notification_data` change `source` `source` longtext default null after `type`;
+alter table `notification_data` change `additionalSource` `additional_source` longtext default null after `source`;
+alter table `notification_data` change `DTYPE` `subclass` varchar(31) not null after `additional_source`;
+
+alter table `notification_data` change `seminar_id` `final_seminar_id` bigint(20) default null after `subclass`;
+alter table `notification_data` change `idea_id` `idea_id` bigint(20) default null after `final_seminar_id`;
+alter table `notification_data` change `mileStone_id` `milestone_id` bigint(20) default null after `idea_id`;
+alter table `notification_data` change `request_id` `peer_request_id` bigint(20) default null after `milestone_id`;
+alter table `notification_data` change `review_id` `peer_review_id` bigint(20) default null after `peer_request_id`;
+alter table `notification_data` change `project_id` `project_id` bigint(20) default null after `peer_review_id`;
+alter table `notification_data` change `group_id` `project_group_id` bigint(20) default null after `project_id`;
+alter table `notification_data` change `causedBy_id` `caused_by_user_id` bigint(20) default null after `project_group_id`;
+
+alter table `notification_data`
+    add constraint fk_notification_data_final_seminar_id
+        foreign key (final_seminar_id) references final_seminar (id)
+            on delete cascade on update cascade;
+
+alter table `notification_data`
+    add constraint fk_notification_data_idea_id
+        foreign key (idea_id) references idea (id)
+            on delete cascade on update cascade;
+
+alter table `notification_data`
+    add constraint fk_notification_data_milestone_id
+        foreign key (milestone_id) references milestone (id)
+            on delete cascade on update cascade;
+
+alter table `notification_data`
+    add constraint fk_notification_data_peer_request_id
+        foreign key (peer_request_id) references peer_request (id)
+            on delete set null on update cascade;
+
+alter table `notification_data`
+    add constraint fk_notification_data_peer_review_id
+        foreign key (peer_review_id) references peer_review (id)
+            on delete cascade on update cascade;
+
+alter table `notification_data`
+    add constraint fk_notification_data_project_id
+        foreign key (project_id) references project (id)
+            on delete cascade on update cascade;
+
+alter table `notification_data`
+    add constraint fk_notification_data_project_group_id
+        foreign key (project_group_id) references project_group (id)
+            on delete cascade on update cascade;
+
+alter table `notification_data`
+    add constraint fk_notification_data_caused_by_user_id
+        foreign key (caused_by_user_id) references user (id)
+            on delete set null on update cascade;
+
+-- add foreign key from notification to notification_data
+
+alter table `notification`
+    add constraint fk_notification_notification_data_id
+        foreign key (notification_data_id) references notification_data (id)
+            on delete cascade on update cascade;
+
+-- add foreign key from forum_notification to notification_data
+
+alter table `forum_notification`
+    add constraint fk_forum_notification_notification_data_id
+        foreign key (notification_data_id) references notification_data (id)
+            on delete cascade on update cascade;
+
+-- todo: NotificationEvent, JPA-mapping
 
 /* Useful SQL