[英]How should I design the database relationship in this situation
因此,我希望用户拥有多个投资组合,并且在投资组合中,它可以包含多个股票。 它应该和has_many关系一样简单。 但是我也希望用户能够命名投资组合,因为在投资组合模型中,我们将有两列,user_id和stock_id。 我应该在哪里将“名称”属性适合模型? 如果我有第三列称为“名称”,那不是多余的吗? 因为,例如,用户1具有包含股票3、4、5的投资组合1。 这将包括三行,例如
user_id | stock_id | name
---------+----------+------------
1 | 3 | portfolio1
1 | 4 | portfolio1
1 | 5 | portfolio1
设计这种关系的更好的解决方案是什么?
谢谢
您的投资组合模型似乎命名错误。 在我看来,您的模型应该更像这样:
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
假设以下要求...
...此数据库模型应该可以帮助您入门:
顺便说一句,此模型使用自然键方法。 您还可以使用代理键,例如:
每个人都有优点和缺点,但这是一个不同的主题...
根据您的描述:用户拥有多个投资组合,并且在投资组合中,它可以包含多个股票
您应该为用户提供一张桌子
UserID, UserAttribute1, UserAttribute2, ...
用于投资PortfolioID, UserID, portfolioAttribute1, portfolioAttribute2, ...
一个表PortfolioID, UserID, portfolioAttribute1, portfolioAttribute2, ...
和一个用于股票的表。
StockID, PortfolioId, stockAttribute1, stockattribute2, ...
在用户表中,userID是主键。 在投资组合表中,PortfolioID是主键,而UserID是外键,因此您可以将投资组合链接回用户。
为了进一步阅读,您可以研究数据库规范化
用户表
id
库存表
id | portfolio_id
投资组合表
id | user_id | name
这是组织关系的一种方式。 每个用户都有许多投资组合,每只股票都属于一个投资组合。 这使您能够更改用户之间的投资组合,而不必修改库存数据。
请记住,还有其他方法可以组织关系,这取决于您认为更重要的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.