1

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:

Implementing Comments and Likes in database

http://vincit.github.io/objection.js/#relations

tlalco
  • 352
  • 4
  • 19
  • 1
    Hi. What is relevant in your links to your design & problem and in what way? Please include everything necessary to a question in it, with anything that is expressible as text as text, and connect it to the rest of your question. (Don't expect readers to go elsewhere or to read a lot then guess what is applicable & why.) What would you like to do in terms of SQL or design (preferably in text not diagram) & what is the problem with "state a single table to join" in terms of if? See also [How can you represent inheritance in a database?](https://stackoverflow.com/q/3579079/3404097). – philipxy Nov 12 '18 at 20:38
  • Thanks for the feedback! I made some changes that I think made it better. – tlalco Nov 12 '18 at 22:10
  • 1
    You don't actually say what is a subtype of what. Also "where you can only choose one" is not clear. (Maybe you are trying to say that the subtypes are mutually exclusive.) Use enough words & sentences to clearly say what you mean. If you know some design method like ER or if you know the relational model or SQL it would be helpful if you described the tables & "relationships" (FKs) you would like. (If not, time to read a textbook on information modeling, the relational model & database design.) (A manual for a design tool, api or language to record designs is not a manual/tutorial on design.) – philipxy Nov 12 '18 at 22:33
  • Added table definitions and relations. – tlalco Nov 13 '18 at 05:07

0 Answers0