繁体   English   中英

在这种情况下我应该如何设计数据库关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM