【问题标题】:SQL Server constraints about Relations between tablesSQL Server 对表之间关系的约束
【发布时间】:2020-04-08 00:22:03
【问题描述】:

我一直在从事一个 SQL Server 项目,该项目允许购物网站的用户插入他们对所购买产品的评论。

基本上,我有 4 个表:

  • Customer:(客户 ID、用户名、电话号码、等级)
  • Product: (Product_ID, Product_code, Name)
  • Review: (Review ID, Title, Content, Product_ID, Customer_ID)
  • Bill: (Bill_ID, Date, Product_ID, Customer_ID)

我有两个问题:

  • 首先,我不知道如何强制只有购买了产品的人才能对其进行评论。
  • 其次,我不知道如何在客户对产品进行评论后将客户表中的等级提高一定数量的积分(奖励积分)。

谁能告诉我如何解决这些问题,尤其是在 SQL Server 代码中?

【问题讨论】:

  • 您如何知道客户是否购买了产品?在您的数据模型中尚不清楚。顺便说一句,我建议删除这个问题并将其拆分为。你在问两个问题。

标签: sql sql-server


【解决方案1】:

您可以采取几种方法来保护您的 Review 表不插入此类记录,最好在服务器端或客户端代码中处理这些记录,但作为数据库的设计点,我认为最好是:

设计您的Review 表,如:

(Review_ID, Title, Content, Bill_ID)

并将您的 Bill_Id 列设置为不允许 NULL,以便每个评论记录都必须与账单(购物)记录相关,然后您可以处理代码中的错误,警告用户或...

此外,如果您的评分仅与复习有关,您可以设置奖金(评分)评价的比率,这样评分将类似于:

SELECT 5*COUNT(*)  -- for example two reviews = 10 bonus
FROM Review
GROUP BY Customer_ID

还有一次,我建议您在代码中而不是在数据库中处理所有这些问题。

另一个建议是(如果您的应用程序的逻辑和业务基于数据库 - 购物网站不是!!) - 是为 INSERT 操作创建一个存储过程,如 usp_ReviewInsert 并在您的代码作为用户想要发布评论,然后您的存储过程处理所有验证内容(例如 Bill 和 Review 之间的关系)和所有更新内容(例如将等级更新为更高)以及插入操作本身。

【讨论】:

  • 非常感谢!你的回答对我很有用
  • 太好了。您可以将此标记为答案,以便您的问题得到解答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
相关资源
最近更新 更多