客户/供应商满意度调查的sql结构

时间:2019-04-26 11:08:54

标签: sql

我需要构建一个表格以发送给多个客户。每个客户将回答5个有关其当前供应商的问题。他们将能够从下拉列表中选择与之合作的供应商,对于每个供应商,客户将回答每个问题,并根据从供应商处获得的服务质量在1到5之间打一个单选按钮。每个供应商的问题都是相同的。

如何为此构建Sql表结构?

我考虑过要建立两个表,即客户和供应商。客户表每行有一个客户,其中一列是客户名称,另一列是(数组?)供应商。

相反,供应商表将是每行一个供应商,其名称和5个问题以及相对答案作为列。客户表将在供应商列中具有外键,该外键将与供应商表进行通信。

问题是,每个客户在供应商的问题栏中都有不同的条目,所以我不知道如何为要填写表格的每个客户区分单个供应商。

您将如何处理?

预先感谢

2 个答案:

答案 0 :(得分:2)

这是我将如何操作的简单ERD:

ERD of client/supplier survey DB

说明

您已经拥有的表:

  • 客户表直接存储有关客户的数据。
  • 供应商表直接存储有关供应商的数据。

然后我添加了:

  • 专用的问题表使您可以将问题与数据库架构分离。您将来可以随意将问题作为此表中的行添加/删除。

最后,没有为关系添加更多的列,而是为关系提供了自己的表。不要害怕拥有更多的桌子。

  • ClientSuppliers 表记录了客户与供应商之间的链接。这将有助于确定谁将调查问题发送给哪个供应商。
  • ClientSuppliersAnswers 表记录特定客户对有关特定问题(请注意3个FK)的特定问题的答复。

答案 1 :(得分:1)

我会尝试解释一下。

但是首先,如果您要正确设计数据结构,则必须学习很少的东西:

(这仅适用于RDBMS,如果您需要NoSQL结构:您将需要再加一点袖子)

作为建议,我将提供一种我希望在数据建模中非常清楚的方法:

  • 首先:使用后面的结构定义所有术语

|名称 |类型[alpha;字母数字数值布尔值约会时间;实体] |适当的描述 |哪个实体依赖

  • 第二个:定义您的所有关系和基数 例如:1个客户= n个供应商/ 0个供应商= n个客户

  • 第三:设计您的关系模型 (*第四:在保修期内至少需要预期的性能)

  • 第五:如果您跳过第四部分,则通过将加湿的手指抬到天空来选择接收结构的技术。
  • 第六:设计物理模型(将在硬件上放置什么)

现在,您在这里做什么

在PostgreSQL rdbms上,这是一种可能的解决方案:

create table supplier (id int primary key, suppliers_name varchar(50));
create table client (id int primary key, client_name varchar (50) unique);
create table question (id int primary key, question_definition varchar(500));
create table question_client (id int primary key, id_suppliers int references supplier(id), id_client int references client (id), id_question int references question(id), question_date timestamp, answer varchar (500));

现在:为什么?

有了您提供给我的大量信息,我认为您只需要一张桌子,为什么不呢? 问题(客户名称varchar,供应商名称varchar,answer_to_question_1 varchar,answer_to_question_2 varchar [...])

并将问题保留在中间件而不是数据库中。

此表格在很多方面都是错误的,我相信您已经弄清楚了其中的一些,但是我已经看了这么长时间,我想解释一下为什么这么错。

  • 第1课:没有双倍数据请记住:双倍数据是一场噩梦。当您只需要在一个客户客户“ Smith”上进行比赛但有人将其注册为“ Smiss”时,便是活人。谁知道它是否相同?注册客户的家伙?抱歉:现在不在公司内。客户端?是的:告诉您的客户,他为您支付了您无法完成的工作的报酬。您将会收到。 (例外情况很少,但我不能在一篇文章中告诉所有人)。

因此,在本课程中,我们定义的结构如下:

  • 问题(question_description varchar)
  • 客户(名称为varchar)
  • 供应商(名称为varchar)

但是如何链接所有这些呢?

  • 第2课:主键。许多建模会告诉您,您需要使用唯一的字段作为主键。或它们的组合。例如:您可能会想使用CLIENT名称作为主键。好的。将来您还会有另一个同名客户...为什么不呢?你能预测未来吗?您认为您的医疗保健号码是唯一的吗?好的:您确定会在将来吗?每天都在变化。我的建议:始终使用一列int主键

  • 第3课:应用常规表格:网上有很多例子,为什么我的帖子已经有些冗长了,无法解释所有内容。但是相信我,那就去做。您将了解为什么要学习它们。

我们现在有什么?

  • 客户(id int PK,名称为varchar)
  • 供应商(id int PK,名称为varchar)
  • 问题(id int PK,question_definition varchar)

现在,我们可以将所有这些链接与下表: QUESTION_CLIENT(id int PK,id_client int REF,id_question int REF,id_supplier int REF,答案varchar)

此时,我有一个datetime属性,可以让您自由地向客户回答一次以上的问题,并确定您何时进行操作。

关于关系数据库建模还有很多要说的,但是我希望这是一个很好的开始,让您回答:“您的方法将如何发展?”将来自己一个人。

希望这会有所帮助;)