【问题标题】:Is it okay to reference a third table in a many-to-many join table?可以在多对多连接表中引用第三个表吗?
【发布时间】:2013-12-01 23:49:23
【问题描述】:

我正在为项目和任务设计一个关系数据库。我希望项目和任务能够按类别分类或分组。

如果一个项目由两个或多个用户共享,我希望每个用户都能够单独对项目进行分类。此外,我希望用户能够彼此共享整个类别,包括该类别中的所有项目和任务。因此,这是我根据基本 ERD 提出的架构:

这是我在 Rails 中的主要模型:

class User < ActiveRecord::Base
  has_many :user_projects
  has_many :user_categories
  has_many :projects, :through => :user_projects
  has_many :categories, :through => :user_categories
end

class Project < ActiveRecord::Base
  has_many :user_projects
  has_many :users, :through => :user_projects
  has_many :tasks, :as => :taskable
end

class Task < ActiveRecord::Base
  belongs_to :taskable, :polymorphic => true
end

class Category < ActiveRecord::Base
  has_many :user_categories
  has_many :users, :through => :user_categories
  has_many :tasks, :as => :taskable
end

可以像这样在 User_Project 连接(联结)表中包含 category_id 外键吗?另外,您总体上是否看到此架构有任何问题?任何帮助将不胜感激。

【问题讨论】:

  • 这个设计看起来不错,只要确保你也为外键添加索引

标签: sql ruby-on-rails database database-design


【解决方案1】:

既然您问我们是否发现架构有任何问题,...,

任务和项目之间的关系不明确。如果是 taskable_id,那是一个奇怪的列名。为什么不使用 project_id?

也缺乏灵活性。您说您希望允许用户共享类别,您的架构似乎支持这一点。我没有看到任何允许两个用户在同一个项目上处理不同任务的东西。这似乎是现实生活中可能发生的事情。

我对 User_Category 表感到困惑。类别是否适用于用户和项目?

【讨论】:

  • 感谢您的意见。可任务名称基于多态模型的 Rails 约定。我仍然需要为任务和用户添加关系。一个用户可以有多个项目/任务类别,并且一个项目/任务类别可以被多个用户共享,所以 User_Category 表只是一个标准的连接表来支持这种多对多关系。
猜你喜欢
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多