可以在多对多连接表中引用第三个表吗?

时间:2013-12-01 23:49:23

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

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

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

enter image description here

以下是我在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外键吗?另外,您是否看到此架构的任何问题?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

因为你问我们是否看到了一般的架构问题,......,

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

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

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