-1

当我正在开发一个内部站点时,我实验室的人员可以通过中央数据库订购某些材料,以保持事情的可管理性。

一个人会下订单(可以是一个项目,也可以是多个项目,每个项目都有不同的数量等),我会将其记录到数据库中。但是,当我决定如何设置数据库时,我会看到两个选项:

选项 1 将所有数据放入一个表中:

|   Salt   |    Name    |     Email     |   Product ID   | Quantity |Sent|
==========================================================================
|0000000001|John Doe    |john.doe@au.dk |175463          |25        |1   |
--------------------------------------------------------------------------
|0000000001|John Doe    |john.doe@au.dk |300146          |169       |1   |
--------------------------------------------------------------------------
|0000000001|John Doe    |john.doe@au.dk |855457          |5         |1   |
--------------------------------------------------------------------------
|0000000001|John Doe    |john.doe@au.dk |290142          |13        |1   |
--------------------------------------------------------------------------
|0000000002|Jane Doe    |jane.doe@au.dk |173755          |3         |0   |
--------------------------------------------------------------------------
|0000000002|Jane Doe    |jane.doe@au.dk |256984          |39        |0   |
--------------------------------------------------------------------------

许多行重复增加了读/写/更新速度并大大增加了存储空间。但它更简单,因为一切都在一个地方。

选项 2:

两张桌子。一个记录订单(并分配一个唯一的盐)。另一个记录订单详细信息(项目),并记录盐。盐在第二个表中不是唯一的,因为某些订单可能包含多个项目。这两个数据库是链接在一起的,例如,当我尝试拉出一个订单,并且所有按该订单放置的项目时,我将简单地搜索盐。

表格1:

|   Salt   |    Name    |     Email     |Sent|
==============================================
|0000000001|John Doe    |john.doe@au.dk |1   |
----------------------------------------------
|0000000002|Jane Doe    |jane.doe@au.dk |0   |
----------------------------------------------

表 2:

|   Salt   |   Product ID   | Quantity |
========================================
|0000000001|175463          |25        |
----------------------------------------
|0000000001|300146          |169       |
----------------------------------------
|0000000001|855457          |5         |
----------------------------------------
|0000000001|290142          |13        |
----------------------------------------
|0000000002|173755          |3         |
----------------------------------------
|0000000002|256984          |39        |
----------------------------------------

我想第二个选项的优点是每行中的冗余信息较少 - 相反,第一个选项的优点是我只需维护一个表,而不是两个表。

我应该使用最初更容易处理的单个表,还是使用多个表来遵守数据库规范化最佳实践?你用来决定走哪条路的过程是什么?

4

1 回答 1

1

在我工作的十年里(在我在那里之前),一个程序员的宠物项目已经扩展成数万行代码。该程序在阳光下做了所有事情,一团糟。由于程序员想要快速完成工作并且不遵守永恒的编码原则,因此它变得一团糟。

所以作为一个乱七八糟的具体例子。有一个包含 200 到 300 列的数据库表。它总是有问题,你不能把它分解成一个更直观的结构,因为那将是一个巨大的项目。你通过合理化“把所有东西都塞在一个地方,因为它更容易”的谬论来开始滚雪球。

始终使数据库尽可能地封装、规范化、高效和直观。即使现在更难,未来必须处理您的代码的程序员也会感谢您。此外,如果人们看到你在代码中弄得一团糟,即使是微不足道的项目,你也不会被选中在未来 35 年的某个时候在从小行星带开采资源的宇宙飞船上练习你的手艺。做一件漂亮的工作,因为你想被委以更重要的事情。

于 2013-10-11T13:22:27.097 回答