我正在设计我的第一个大小合适的项目,我想确保我在这里正确的道路,所以我想我会由社区来管理它。
我有供应商向公司提交产品。供应商选择他们想要提交的公司,并提出公司选择的问题页面。到目前为止,我有一个公司表,一个供应商表和产品表。每个都有自己的主键,很容易。我的问题是我的表名为提交,开始将每个新提交的所有内容绑定在一起。我试图摆脱拥有千列的提交表,因为公司都想提出不同的问题。如果我有
Table Submissions
submission_id
date
product_id FK
vendor_id FK
company_id FK
and
Table Questions
question_id
question
and to bridge the many to many
Table Questions_Submissions
questions_submissions_id
submission_id FK
question_id FK
answer
这是规范化的推荐路径吗?如果是这样,列回答包含布尔和字符串结果会有什么危害吗?或者我应该以某种方式将布尔问题分解为另一个表?我预计未来几年会有数百万行数据,并且我希望确保从一开始就没有设计出这个错误。如果您在此设计中看到明显的错误或红旗,请收到任何反馈。
答案 0 :(得分:2)
到目前为止,我有一个公司表,一个供应商表和产品表。每个都有自己的主键,很容易。
每一行都有自己的ID号。这与通过规范关系得到的并不完全相同。在关系数据库中,重要的是不识别行,它标识行代表的内容。
所以,例如,这个表
Table Questions
question_id
question
可能很容易得到看起来像这样的数据。
question_id question
--
1 What is your name?
2 What is your name?
3 What is your name?
4 What is your name?
5 What is your name?
每一行都是唯一标识的,但每个问题(重要的)都不是。您需要{question}上的唯一约束。
我有供应商向公司提交产品。
Table Submissions
submission_id
date
product_id FK
vendor_id FK
company_id FK
您需要{product_id,vendor_id,company_id}或{date,product_id,vendor_id,company_id}的唯一约束。
您还需要一个供应商产品表。您的表允许供应商向公司提交任何产品 - 包括他们不销售的每种产品。
供应商选择他们想要提交的公司,并提出公司选择的问题页面。 (强调补充)
架构中没有任何内容存储公司选择的问题。
列回答包含布尔值和字符串结果
是否有任何危害
您可以将任何常见数据类型表示为字符串。但是使用此结构,您不能将布尔值约束为两个值。如果添加数值结果的可能性,则不能将它们约束为合理的值。
答案 1 :(得分:0)
这当然是一种方法,它看起来很不错。
你可以用查询中的答案和一些if语句做一些聪明的事情来处理不同类型的答案,但它确实给解决方案增加了一些复杂性,所以你应该考虑一下你试图用什么来解决这个问题。答案。
对于布尔值,您可以轻松地使用" true"或"假"在varchar字段中,并对它们进行计数。如果您需要获得数字或日期的答案,直接在查询中获得总和或平均值,您可以将答案拆分为类型。