Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于表之间关系的SQL Server约束_Sql_Sql Server - Fatal编程技术网

关于表之间关系的SQL Server约束

关于表之间关系的SQL Server约束,sql,sql-server,Sql,Sql Server,我一直在从事一个SQL Server项目,该项目允许购物网站的用户插入他们对所购买产品的评论 基本上,我有4个表: 客户:(客户ID、用户名、电话号码、等级) 产品:(产品ID、产品代码、名称) 审查:(审查ID、标题、内容、产品ID、客户ID) 账单:(账单ID、日期、产品ID、客户ID) 我有两个问题: 首先,我不知道如何强制只有购买产品的人才能查看它 其次,我不知道如何在客户对产品进行审查后,将客户表中的分数提高一定数量的分数(奖励分数) 有谁能告诉我如何解决这些问题,特别是SQL

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

基本上,我有4个表:

  • 客户
    :(客户ID、用户名、电话号码、等级)
  • 产品
    :(产品ID、产品代码、名称)
  • 审查
    :(审查ID、标题、内容、产品ID、客户ID)
  • 账单
    :(账单ID、日期、产品ID、客户ID)
我有两个问题:

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

有谁能告诉我如何解决这些问题,特别是SQL Server代码中的问题吗?

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

将您的
审查
表格设计为:

(Review_ID, Title, Content, Bill_ID)
并将您的
Bill\u Id
列设置为不允许空,以便每个审核记录都必须与账单(购物)记录相关,然后您可以处理代码中的错误,警告用户或

此外,如果您的分数仅与复习有关,您可以设置复习的奖金(分数)比率,使分数如下:

SELECT 5*COUNT(*)  -- for example two reviews = 10 bonus
FROM Review
GROUP BY Customer_ID
还有一次,我建议您在代码中处理所有这些,而不是在数据库中


另一个建议是(如果应用程序的逻辑和业务是基于数据库的,而购物网站不是!!)-为
INSERT
操作(如
usp\u ReviewInsert
)创建一个存储过程,并在用户想要发布评论时在代码中调用它,然后存储过程处理所有验证内容(如账单和审核之间的关系)以及所有更新内容(如将分数更新到更高)以及插入操作本身。

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

将您的
审查
表格设计为:

(Review_ID, Title, Content, Bill_ID)
并将您的
Bill\u Id
列设置为不允许空,以便每个审核记录都必须与账单(购物)记录相关,然后您可以处理代码中的错误,警告用户或

此外,如果您的分数仅与复习有关,您可以设置复习的奖金(分数)比率,使分数如下:

SELECT 5*COUNT(*)  -- for example two reviews = 10 bonus
FROM Review
GROUP BY Customer_ID
还有一次,我建议您在代码中处理所有这些,而不是在数据库中


另一个建议是(如果应用程序的逻辑和业务是基于数据库的,而购物网站不是!!)-为
INSERT
操作(如
usp\u ReviewInsert
)创建一个存储过程,并在用户想要发布评论时在代码中调用它,然后存储过程处理所有验证内容(如账单和审核之间的关系)以及所有更新内容(如将分数更新到更高)以及插入操作本身。

您如何知道客户是否购买了产品?您的数据模型中不清楚。顺便说一句,我建议删除此问题并将其拆分为到。您提出了两个问题。您如何知道客户是否购买了产品?您的数据模型中不清楚。顺便说一句,我建议删除此问题并将其拆分为。您提出了两个问题。非常感谢!您的答案对meso good非常有用。您可以将此标记为答案,这样您的问题将得到回答。非常感谢!您的答案对meso good非常有用。您可以将此标记为答案,这样您的问题将得到回答。