2012-02-15 117 views
0

我正在设计我的第一个大小适中的项目,我想确保我在这里的正确路径,所以我想我会运行它的社区。布尔和字符串值在同一个表

我有供应商提交产品给公司。供应商选择他们想要提交的公司,并提出公司选择的问题页面。到目前为止,我有一张公司表,供应商表和产品表。每个都有自己的主键,很简单。我的问题是与我提交的表格有关的问题,它们将每个新提交的内容都捆绑在一起。我想摆脱拥有千列的提交表,因为这些公司都想提出不同的问题。如果我有

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

到目前为止,我有一张公司表,供应商表和产品表。每个都有自己的主键,很简单。

每行都有自己的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,COM​​PANY_ID}唯一约束或{日期,PRODUCT_ID,VENDOR_ID,COM​​PANY_ID}。

您还需要一个供应商产品表。您的表格允许供应商将任何产品(包括他们不销售的每种产品)提交给公司。

的供应商选择他们想要提交给该公司带来了由公司选择问题的页面。 (强调添加)

模式中没有存储公司选择的问题。

有具有柱回答任何伤害包含布尔和字符串结果

您可以表达几乎所有常用的数据类型为字符串。但是通过这种结构,你不能将布尔值限制为两个值。如果添加数字结果的可能性,则无法将它们限制为理智值。

+0

非常感谢您的反馈。确切地说,我希望社区可以提供的回应类型。 – 2012-02-15 15:44:31

0

这当然是一种解决方法,它看起来不错。

你可以用答案和查询中的一些if语句来处理不同类型的答案,但它确实增加了解决方案的一些复杂性,所以你应该考虑你想要做什么答案。

对于布尔值,您可以轻松地在varchar字段中使用“true”或“false”,并对它们进行计数。如果您需要直接在查询中获得数字或日期的答案,则可以将答案分为不同的类型。

+0

谢谢Brian。我不确定是否需要考虑布尔值与字符串相关的空间。光盘空间很便宜,所以如果它不被认为是一个大问题,我宁愿去真/假,是/否以避免稍后转换一些代码行。 – 2012-02-15 03:46:00