Я пытаюсь реализовать дизайн базы данных с помощью Objection.js, но я не знаю, как определить отношения наследования с несколькими категориями, которые являются взаимоисключающими.
Рассматриваемый случай выглядит следующим образом: я хочу реализовать лайки для постов, комментариев и ответов. Насколько я знаю, «самое расширяемое решение - иметь только одну« базовую »таблицу и« наследовать »от нее все остальные таблицы». как указано в другом вопросе ТАК. Идея состоит в том, чтобы связать подобное с сущностью, а сущность должна быть либо постом, комментарием, либо другой сущностью.
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
В Objection.js вы реализуете отношения следующим образом:
class Entity extends Model {
static tableName = 'entities';
static relationMappings = {
Post: {
relation: Model.HasOneRelation,
modelClass: Like,
join: {
from: 'post.id',
to: 'like.postId'
}
}
}
}
Однако, если я делаю это, я не знаю, как определить, что это также может быть комментарием или ответом. Не только пост.
Есть ли способ архивировать это? Если нет, я должен использовать другую библиотеку JS? Должен ли я изменить свою схему, чтобы она работала с Objection.js?
Соответствующие ссылки:
Реализация комментариев и лайков в базе данных
http://vincit.github.io/objection.js/#relations