Im trying to implement a database design using Objection.js but I don't know how to define an inheritance relationship with multiple categories that are mutually exclusive.
The case in question is as follows: I want to implement likes for posts, comments, and replies. As far as I know, "The most extensible solution is to have just one "base" table, and "inherit" all other tables from it." as stated in another SO question. The idea is to link a like to an entity and for an entity to be either a post, comment or another entity.
User
id PK int
name string
Entity
id PK int
Like
userId int Fk >- User.id
entityId int Fk >- Entity.id
Article
id PK int Fk >- Entity.id
author int FK >- User.id
title string
text string
Comment
id PK int Fk >- Entity.id
articleId int FK >- Article.id
authorId int FK >- User.id
text string
--There can be more entities like reply, image, etc
In Objection.js you implement a relationship as follows:
class Entity extends Model {
static tableName = 'entities';
static relationMappings = {
Post: {
relation: Model.HasOneRelation,
modelClass: Like,
join: {
from: 'post.id',
to: 'like.postId'
}
}
}
}
However if a do that I don't know how to define that it can be also comment or reply. Not only Post.
Is there a way to archive this? If not, should I use another JS library? Should I change my schema to make it work with Objection.js?
Relevant links: