当我正在开发一个内部站点时,我实验室的人员可以通过中央数据库订购某些材料,以保持事情的可管理性。
一个人会下订单(可以是一个项目,也可以是多个项目,每个项目都有不同的数量等),我会将其记录到数据库中。但是,当我决定如何设置数据库时,我会看到两个选项:
选项 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 |
----------------------------------------
我想第二个选项的优点是每行中的冗余信息较少 - 相反,第一个选项的优点是我只需维护一个表,而不是两个表。
我应该使用最初更容易处理的单个表,还是使用多个表来遵守数据库规范化最佳实践?你用来决定走哪条路的过程是什么?