具有一行的表与具有垂直列表的表

时间:2014-11-18 13:41:05

标签: sql sql-server database sql-server-2008 database-design

我正在使用sql server 2008。 我们有一个表,用于存储有关使用我们的应用程序的客户端的信息。 它的简化版本如下所示:

--------------------------------------------------------------------------------------------
| ClientName | Address1   | Address2 | PostalCode | ClientFullName | ClientNameAbbreviated |  
--------------------------------------------------------------------------------------------
| Name       | 111 Street | 222 Ave  | A1A 1A1    | Full Name      | FN                    |
--------------------------------------------------------------------------------------------

此表包含数据,以便报告和常规应用信息可以抓取数据而不是 将它硬编码为值或变量。该表只有一行。

我正考虑将此表格转换为以下格式,以便于阅读。 此表仅用于在应用程序开头填充类,然后该类用于检索整个程序中的信息。当客户端需要更多,更少或不同的信息而不是结构更改时,以下格式将允许更改为插入,删除和更新。由于此表中只有一行,因此除了可能增加字段长度外,它永远不需要进行结构更改。

-----------------------------------------------
| ID                     | Value              |
-----------------------------------------------
| ClientName             | Company Name       |
| Address1               | 111 Street         |
| Address2               | 222 Ave            |
| PostalCode             | A1A 1A1            |
| ClientFullName         | Full Company Name  |
| ClientNameAbbrevation  | CN                 |
-----------------------------------------------

我想知道数据库设计的优缺点是什么,如果有任何不成文的数据库设计黄金规则,我打算实施这个设计?

- EDIT -------------------------------------------- ---------------------------

感谢您的评论到目前为止。

  • 点:打破3NF
  • 结论:因为第一个例子只有一行,所以不适用于这种情况。
  • 要点:所有值都是相同的数据类型,因此无法强制执行检查。
  • 结论:一个好点,让我倾向于第一个设计,但由于某些业务规则,检查约束可能无法在此表上执行。

1 个答案:

答案 0 :(得分:0)

当需要的结构变化时,您使用名称/值对。例如,您存储产品,50%具有材料组合,2%具有CPU类型,3%具有rpm,20%具有能量等级。您可以使用genric方法,而不是构建可能有一千个这样的属性的表。但是你需要付出代价:dbms不知道你的内容,也无法帮助你确保完整性。

在您的情况下,如果没有dbms的帮助,您就不需要这么做了。所以不要这样做。保持你的表原样,让dbms知道什么是字符串,数字,日期,什么是强制性的,什么是可选的,什么必须是有效的国家ISO代码或正好13个字符的字符串,以便它可以确保正确性。