2016-12-30 5 views
0

В настоящее время я создаю схему базы данных для нового проекта Rails, и я хочу, чтобы все было правильно, поэтому я лучше спрошу!Соглашение об именах для таблиц SQL при определенных обстоятельствах

Представьте себе: у меня есть таблица под названием «articles», и эти статьи должны иметь теги. То, что я сейчас сделаю, относительно просто. Создайте еще одну таблицу под названием «теги», а третий - «article_tags». Каждая статья и тег имеют уникальный идентификатор, а «article_tags» - это таблица сопоставления, которая объединяет нужные идентификаторы статей и тегов идентификаторов.

Таблицы:

- articles 
- tags 
- article_tags (mapping) 

"Проблема" Сейчас у меня это: не только статей, есть теги, но и мои "пользователей" (другая таблица). Эти теги должны быть в двух разных таблицах, которые затем приводят к некоторому довольно странному наименованию.

Таблицы:

- articles 
- article_tags (no mapping) 
- article_article_tags (mapping???) 

- users 
- user_tags (no mapping) 
- user_user_tags (mapping???) 

Есть ли у вас какие-либо (общие) советы, как улучшить именования этих таблиц, потому что вы можете видеть выше, не делает меня очень счастливым ...

+0

Являются ли теги одинаковыми для статей и пользователей? –

+0

Нет, поэтому мне нужны две таблицы для тегов :( – krebas

+0

вместо повторения слова, я бы использовал множественные версии для первых экземпляров их, например 'article_article_tags', это может показаться немного странным, пока вы не привыкнете к нему, но его можно легко прочитать как «статьи» article_tags'. ... или у вас может быть одна таблица «тегов» с столбцом для указания типа тега. – Uueerdo

ответ

1

Я думаю, что вы можете использовать polymorphic association, чтобы это сделать, что-то вроде этого:

class User 
    has_many :taggings, as: :taggable 
    has_many :tags, through: :taggings 
end 

class Article 
    has_many :taggings, as: :taggable 
    has_many :tags, through: :taggings 
end 

class Tagging 
    belongs_to :taggable, polymorphic: true 
    belongs_to :tag 
end 

class Tag 
end 

Вам нужно всего 4 таблицы: пользователи, статьи, теги, теги.

+0

Эй, спасибо за ваш полезный ответ! – krebas