所以我希望用户拥有多个投资组合,而在投资组合中,它可以包含多个股票。它应该像has_many虽然关系一样直截了当。但我也希望用户能够命名投资组合,因为在投资组合模型中,我们将有两列,user_id和stock_id。我应该在哪里将“name”属性放入模型中?如果我有一个名为“名字”的第三栏,那不是多余的吗?因为,用户1的投资组合1包含股票3,4,5。这将包含三行,如
user_id | stock_id | name
---------+----------+------------
1 | 3 | portfolio1
1 | 4 | portfolio1
1 | 5 | portfolio1
设计这种关系的更好解决方案是什么?
由于
答案 0 :(得分:2)
您的投资组合模型似乎名不副实。在我看来,你的模型看起来应该更像这样:
class User < ActiveRecord::Base
has_many :portfolios
end
class Portfolio < ActiveRecord::Base
belongs_to :user
has_many :stocks, :through => :portfolios_stocks # join table
# has the `name` attribute
end
class Stock < ActiveRecord::Base
has_many :portfolios, :through => :portfolios_stocks
end
答案 1 :(得分:2)
假设有以下要求......
...这个数据库模型应该让你入门:
BTW,这个模型使用自然键方法。您也可以使用代理键,例如:
每个都有利有弊,但这是一个不同的主题......
答案 2 :(得分:0)
从您的描述:用户拥有多个投资组合,在投资组合中,它可以包含多个股票
你应该为用户提供一个表
UserID, UserAttribute1, UserAttribute2, ...
投资组合的一个表
PortfolioID, UserID, portfolioAttribute1, portfolioAttribute2, ...
和一张股票表。
StockID, PortfolioId, stockAttribute1, stockattribute2, ...
在用户表中,userID是主键。在投资组合表中,portfolioID是主键,UserID是外键,因此您可以将投资组合链接回用户。
如需进一步阅读,您可以研究Database normalization
答案 3 :(得分:0)
用户表
id
股票表
id | portfolio_id
投资组合表
id | user_id | name
这是组织关系的一种方式。每个用户都有许多投资组合,每个股票属于一个投资组合。这使您能够在不必修改库存数据的情况下更改用户之间的投资组合。
请记住,根据您认为更重要的内容,还有其他组织关系的方式。