我需要构建一个表格以发送给多个客户。每个客户将回答5个有关其当前供应商的问题。他们将能够从下拉列表中选择与之合作的供应商,对于每个供应商,客户将回答每个问题,并根据从供应商处获得的服务质量在1到5之间打一个单选按钮。每个供应商的问题都是相同的。
如何为此构建Sql表结构?
我考虑过要建立两个表,即客户和供应商。客户表每行有一个客户,其中一列是客户名称,另一列是(数组?)供应商。
相反,供应商表将是每行一个供应商,其名称和5个问题以及相对答案作为列。客户表将在供应商列中具有外键,该外键将与供应商表进行通信。
问题是,每个客户在供应商的问题栏中都有不同的条目,所以我不知道如何为要填写表格的每个客户区分单个供应商。
您将如何处理?
预先感谢
答案 0 :(得分:2)
这是我将如何操作的简单ERD:
您已经拥有的表:
然后我添加了:
最后,没有为关系添加更多的列,而是为关系提供了自己的表。不要害怕拥有更多的桌子。
答案 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 [...])
并将问题保留在中间件而不是数据库中。
此表格在很多方面都是错误的,我相信您已经弄清楚了其中的一些,但是我已经看了这么长时间,我想解释一下为什么这么错。
因此,在本课程中,我们定义的结构如下:
但是如何链接所有这些呢?
第2课:主键。许多建模会告诉您,您需要使用唯一的字段作为主键。或它们的组合。例如:您可能会想使用CLIENT名称作为主键。好的。将来您还会有另一个同名客户...为什么不呢?你能预测未来吗?您认为您的医疗保健号码是唯一的吗?好的:您确定会在将来吗?每天都在变化。我的建议:始终使用一列int主键
第3课:应用常规表格:网上有很多例子,为什么我的帖子已经有些冗长了,无法解释所有内容。但是相信我,那就去做。您将了解为什么要学习它们。
我们现在有什么?
现在,我们可以将所有这些链接与下表: QUESTION_CLIENT(id int PK,id_client int REF,id_question int REF,id_supplier int REF,答案varchar)
此时,我有一个datetime属性,可以让您自由地向客户回答一次以上的问题,并确定您何时进行操作。
关于关系数据库建模还有很多要说的,但是我希望这是一个很好的开始,让您回答:“您的方法将如何发展?”将来自己一个人。
希望这会有所帮助;)