同一个表中的布尔值和字符串值

时间:2012-02-15 03:26:35

标签: mysql database-design data-modeling

我正在设计我的第一个大小合适的项目,我想确保我在这里正确的道路,所以我想我会由社区来管理它。

我有供应商向公司提交产品。供应商选择他们想要提交的公司,并提出公司选择的问题页面。到目前为止,我有一个公司表,一个供应商表和产品表。每个都有自己的主键,很容易。我的问题是我的表名为提交,开始将每个新提交的所有内容绑定在一起。我试图摆脱拥有千列的提交表,因为公司都想提出不同的问题。如果我有

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

这是规范化的推荐路径吗?如果是这样,列回答包含布尔和字符串结果会有什么危害吗?或者我应该以某种方式将布尔问题分解为另一个表?我预计未来几年会有数百万行数据,并且我希望确保从一开始就没有设计出这个错误。如果您在此设计中看到明显的错误或红旗,请收到任何反馈。

2 个答案:

答案 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字段中,并对它们进行计数。如果您需要获得数字或日期的答案,直接在查询中获得总和或平均值,您可以将答案拆分为类型。