在MySQL中管理客户订单的最佳实践

时间:2013-01-25 16:21:09

标签: mysql database

正在开发一个内部网站,允许我实验室的人员通过中央数据库下达某些材料的订单,以保持可管理性。

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

选项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        |
----------------------------------------

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

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

2 个答案:

答案 0 :(得分:1)

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

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

始终使数据库尽可能地封装,规范化,高效和直观。即使现在更难,未来必须处理代码的程序员也会感谢你。此外,如果人们看到你在代码中制造混乱,甚至是琐碎的项目,你将不会被选择在太空船上练习你的飞船,这些飞船在未来35年的某个时间里从小行星带上挖掘资源。做一份漂亮的工作,因为你想被委以更重要的事情。

答案 1 :(得分:0)

我发现规范表可能是更好的方法:)

相关问题