【问题标题】:How to display combined information from one table to another?如何将组合信息从一个表显示到另一个表?
【发布时间】:2019-03-31 12:49:43
【问题描述】:

我正在为我的应用程序计划一个数据库。我是新手,所以请耐心等待。这是它的简化版本:

我将在 ASP.NET MVC 5 中使用代码优先方法和实体框架。

我的问题是如何在表Orders 中添加另一列Total_Price,该列将根据包含在同一订单中的商品价格显示该订单的总价格?这在 SQL Server 中是否可行,还是必须编写 C# 代码才能执行?

编辑:

Products 表将为每个单独的产品添加一个 Price 列。

【问题讨论】:

  • 那种东西应该只是在插入订单时计算或存储。另外,不要使用文本数据类型。它已被弃用近 15 年。使用 varchar,名称或产品描述肯定不需要超过 8,000 个字符。
  • 欢迎来到 SO。你可以在任何一个中做到这一点。您能分享一下您在尝试实现此功能时遇到的问题吗?
  • 我真的更喜欢CustomerId 而不是ID 然后CustomerIdOrder 表中的CustomerId 有意义的名称,看看它是如何匹配的?如果您确实需要巨大的价值可能性,请同意其他人使用VARCHAR(MAX) 而不是TEXT
  • @dfundako - 是的,不会让它“更好”恕我直言 - 这是一个数据库图,可能最好有一个代码示例的代码示例,但我们在这里:)

标签: sql-server asp.net-mvc-5 code-first


【解决方案1】:

我会创建一个 Orders VIEW 来计算 Total_Price 并让您的应用程序点击视图而不是表格。

另一种选择是将Total_Price 作为计算列添加到表中。计算必须调用一个函数来从其他表中查询商品的价格

【讨论】:

  • 只是为了成为“那个人”并为看似简单的应用程序添加复杂性:如果商品的价格上涨或下跌会发生什么?
  • @dfundako 好吧,这取决于价格是否保留为历史记录。如果不是,那么订单的Total_Price 会随着商品价格而波动,这可能会很糟糕。它没有显示在存储价格的 ERD 中。最好的位置是在Order_Items 表中,每个项目的价格将只针对该订单保留。这允许价格历史保持不变,并允许对特定订单进行特殊定价。
  • 如何实现第二个选项?另外@dfundako 我可能会使用ON UPDATE,所以当我更改产品的价格时,它们会在其他地方更改。虽然我必须先尝试一下,这也取决于 Alleman 建议的功能。
  • @Shepherd 计算列?谷歌SQL Server Computed Column using function 的例子。
  • @Shepherd 不值得一个完整的答案,但我会插入订单价格 1 次,从不碰它。当客户在下单一年后打电话给您,而您必须将其拉起时,您不希望有不同的总数,因为您的商品价格因通货膨胀而上涨。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2018-03-21
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
相关资源
最近更新 更多