正在开发一个内部网站,允许我实验室的人员通过中央数据库下达某些材料的订单,以保持可管理性。
一个人会下订单(可以是一个项目,也可以是多个项目,每个项目都有不同的数量等),我会将其记录到数据库中。但是,当我决定如何设置数据库时,我会看到两个选项:
选项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 |
----------------------------------------
我猜第二个选项的优点是每行中的冗余信息较少 - 相反,第一个选项的优点是我只需要维护一个表,而不是两个。
我应该使用一个最初更容易处理的表,还是使用多个表来遵守数据库规范化最佳实践?您使用什么方法来决定走哪条路?
答案 0 :(得分:1)
我曾在一些程序员的宠物项目已经扩展到几十年(在我之前)之前成为数万行代码的工作。该计划在阳光下完成了所有事情,实在是一团糟。它变得一团糟,因为程序员想要快速做事并且不遵守永恒的编码原则。
所以作为一个混乱的具体例子。有一个数据库表,其中包含200到300列。它总是有问题,你不能把它分解成更直观的结构,因为这将是一个巨大的项目。你正在通过合理化“在一个地方塞满所有东西,因为它更容易”谬误来开始滚雪球。
始终使数据库尽可能地封装,规范化,高效和直观。即使现在更难,未来必须处理代码的程序员也会感谢你。此外,如果人们看到你在代码中制造混乱,甚至是琐碎的项目,你将不会被选择在太空船上练习你的飞船,这些飞船在未来35年的某个时间里从小行星带上挖掘资源。做一份漂亮的工作,因为你想被委以更重要的事情。
答案 1 :(得分:0)
我发现规范表可能是更好的方法:)