SQL 表在某些情况下的命名约定

Naming convention for SQL tables under certain circumstances

我目前正在为一个新的 Rails 项目创建数据库模式,我想把事情做好,所以我最好问一下!

想象一下:我有一个名为“articles”的 table,这些文章应该有标签。我现在要做的事情比较简单。创建另一个名为“tags”的 table 和名为“article_tags”的第三个。 每篇文章和标签都有一个唯一的 ID,“article_tags”是映射 table,它将正确的文章 ID 和标签 ID 组合在一起。

表格:

- articles
- tags
- article_tags (mapping)

我目前的"problem"是这样的:不仅文章有标签而且我的“用户”(另一个table)。这些标签必须位于两个不同的 table 中,这将导致一些非常奇怪的命名。

表格:

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

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

您有任何(一般)技巧可以改进这些 table 的命名,因为您在上面看到的内容并没有让我很高兴。 ..

我想你可以用 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 个表:users、articles、taggings、tags。