Database design 在创建DB设计之前,要弄清楚什么?

Database design 在创建DB设计之前,要弄清楚什么?,database-design,Database Design,我是网络开发新手,我的经理已经给我分配了购物车项目,我在编程方面还可以。但是,我不知道我应该如何开始任何项目的DB设计,我应该如何进行任何项目的BD设计,我应该如何思考这个方向,在创建DB设计之前我应该弄清楚什么事情,我应该如何思考实体以及它们之间的关系……请详细说明一下 答案在很大程度上取决于您的特殊需求。作为一个起点,为什么不下载一些开源购物车应用程序(如或),并分析它们的数据库设计?它们甚至可以满足您的需求,您不必重新发明轮子。答案在很大程度上取决于您的特定需求。作为一个起点,为什么不下载

我是网络开发新手,我的经理已经给我分配了购物车项目,我在编程方面还可以。但是,我不知道我应该如何开始任何项目的DB设计,我应该如何进行任何项目的BD设计,我应该如何思考这个方向,在创建DB设计之前我应该弄清楚什么事情,我应该如何思考实体以及它们之间的关系……请详细说明一下

答案在很大程度上取决于您的特殊需求。作为一个起点,为什么不下载一些开源购物车应用程序(如或),并分析它们的数据库设计?它们甚至可以满足您的需求,您不必重新发明轮子。

答案在很大程度上取决于您的特定需求。作为一个起点,为什么不下载一些开源购物车应用程序(如或),并分析它们的数据库设计?它们甚至可以满足您的需要,您不必重新发明轮子。

这是一个太宽泛的问题。但我建议你特别检查“设计过程”部分


另外,请务必让在设计数据库方面有更多经验的人对其进行审查

这是一个太宽泛的问题。但我建议你特别检查“设计过程”部分


另外,请确保您得到了在设计数据库方面有更多经验的人的审核。首先,找出您想要表示的所有实体,如客户、购物车、产品等

然后计算出每个属性需要哪些属性。例如,客户将拥有ID、姓名、地址、发货地址等。购物车将由一个客户ID和多个产品组成。不要太在意这里遗漏的细节,因为它们可以在以后添加

将属性分配给你的实体几乎肯定会将这些实体之间的关系放在你的脑海中。这是下一步,找出所有实体之间的关系

一旦你(认为你)拥有了所有这些,运行一些用例(新客户、向购物车添加物品的客户、结帐/付款等等)。这可能会出现一些你没有想到的事情,你可以调整你的实体/关系图来适应。记录这些用例并根据需要添加到它们中,当最终确定模式时,它们将是非常宝贵的

记住,无论如何,从第三个标准形式数据库模式开始。恢复到较低的性能形式是可以的(前提是您理解并缓解了其中涉及的问题),但这是很晚才会发生的事情,并且只有在3NF存在真正的性能问题时才会发生

第三种范式意味着表中的每一个非键列都依赖于键、整个键以及除了键以外的任何东西


举个例子,这里有一个基本的模式来帮助您:

   +--------------------+        +-----------------+
   | Products           |        | Customers       |
   +--------------------+        +-----------------+
+->| ProductId (pk)     |        | CustomerID (pk) |<-+
|  | Description        |        | Name            |  |
|  | StockLevel         |        | Address         |  |
|  | Cost               |        | ShippingAddress |  |
|  +--------------------+        +-----------------+  |
|                                                     |
|  +--------------------+        +-----------------+  |
|  | CartContents       |        | Cart            |  |
|  +--------------------+        +-----------------+  |
|  | CartID (pka,fk)    |------->| CartID (pk)     |  |
+--| ProductID (pkb,fk) |        | CustomerID (fk) |--+
   | Quantity           |        | Status          |
   +--------------------+        +-----------------+
+-------------++-----------------+
|产品| |客户|
+--------------------+        +-----------------+
+->|ProductId(主键)| CustomerID(主键)| CartID(主键)||
+--|ProductID(pkb,fk)| | CustomerID(fk)|--+
|数量| |状态|
+--------------------+        +-----------------+
这允许四个相当基本的实体,您可以添加更多,这取决于您需要什么。您可能希望处理批量购买、忠诚度计划和其他事项的特别优惠。购物车内容中的状态将是
initial
paidfor
已确认付款
已发货
已收到
等等,但一旦购物车完成结帐流程,您可能需要使用一个单独的
订单
表-我已尽可能地简化它


它还允许每个客户有多个购物车,当它不存在时,我觉得这是一个非常烦人的功能(换句话说,请实现这一点,没有什么比必须清除已设置的购物车以首先处理另一笔交易更烦人的了)。

首先,找出您想要表示的所有实体,如客户、手推车、产品等

然后计算出每个属性需要哪些属性。例如,客户将拥有ID、姓名、地址、发货地址等。购物车将由一个客户ID和多个产品组成。不要太在意这里遗漏的细节,因为它们可以在以后添加

将属性分配给你的实体几乎肯定会将这些实体之间的关系放在你的脑海中。这是下一步,找出所有实体之间的关系

一旦你(认为你)拥有了所有这些,运行一些用例(新客户、向购物车添加物品的客户、结帐/付款等等)。这可能会出现一些你没有想到的事情,你可以调整你的实体/关系图来适应。记录这些用例并根据需要添加到它们中,当最终确定模式时,它们将是非常宝贵的

记住,无论如何,从第三个标准形式数据库模式开始。恢复到较低的性能形式是可以的(前提是您理解并缓解了其中涉及的问题),但这是很晚才会发生的事情,并且只有在3NF存在真正的性能问题时才会发生

第三种范式意味着表中的每一个非键列都依赖于键、整个键以及除了键以外的任何东西


举个例子,这里有一个基本的模式来帮助您:

   +--------------------+        +-----------------+
   | Products           |        | Customers       |
   +--------------------+        +-----------------+
+->| ProductId (pk)     |        | CustomerID (pk) |<-+
|  | Description        |        | Name            |  |
|  | StockLevel         |        | Address         |  |
|  | Cost               |        | ShippingAddress |  |
|  +--------------------+        +-----------------+  |
|                                                     |
|  +--------------------+        +-----------------+  |
|  | CartContents       |        | Cart            |  |
|  +--------------------+        +-----------------+  |
|  | CartID (pka,fk)    |------->| CartID (pk)     |  |
+--| ProductID (pkb,fk) |        | CustomerID (fk) |--+
   | Quantity           |        | Status          |
   +--------------------+        +-----------------+
+-------------++-----------------+
|产品| |客户|
+--------------------+        +-----------------+
+->|ProductId(主键)| CustomerID(主键)| CartID(主键)||
+--|ProductID(pkb,fk)| | CustomerID(fk)|--+
|数量| |状态|
+--------------------+        +------------