现在,我正在设计数据库,因此我没有任何代码。我希望使用sql server,asp.net,如果这是相关的。 我有大量的商店和大量的产品,成千上万。对于相同的pId,价格可能会因sId而异。我会像这样构建它: 1.一个"存储"包含字段的表(sId,名称,位置), 2.一个"产品"包含字段的表(pId,名称大小,类别,子类别)和 3." max(sId)"包含字段的价格表数量(pId,mrp,可用性)。 其中max(sId)是商店的总数。 我宁愿不做" max(pId)"包含字段(sId,mrp,availability)的表的数量,因为我需要为每个商店提供UI,以便他们可以更新各自商店的产品价格和可用性的详细信息。我还需要展示特定商店的一些产品,但我从不需要为任何特定产品展示一些商店。也就是说,不需要按产品搜索商店,但是需要按商店列出商品。 这是一个好方法还是我可以做得更好?
答案 0 :(得分:1)
您似乎走在正确的轨道上,我会提供一些建议。虽然不需要为任何特定产品显示某些商店,但您应该始终考虑需求将如何变化以及您的系统如何处理。构建您的系统,以便您可以轻松回答这些问题 - 哪些商店的ABC产品价格低于3美元/件?
如您所述,商店表应包含有关商店的信息。认真对待Aaron Bertrand的评论。以下一个开发人员可以读取的方式命名字段并确定它是什么。用户StoreID而不是sID。
StoreID StoreName ...other fields
------- --------------
1 North Chicago
2 East Los Angeles
产品表应包含有关产品的信息。将类别和子类别存储到不同的表中会更好。
ProductID ProductName ...other fields
--------- --------------
1 Bread
2 Soap
类别可以位于其自己的表中,具有层次结构。请参阅Hierarchal Data以及如何使用hierarchyid data type。这可能有助于找出每个顶级类别的深度,并帮助管理层决定他们是否过分分类,让每个人都感到悲惨,包括他们在不知不觉中。
多对多ProductCategory表可以将产品链接到类别。还保留历史表。更改产品类别时,请跟踪其内容和设置内容。它可能有助于回答诸如以下问题 - 过去6个月内有多少产品从农业转移到建筑类别?
多对多StoreProductPrice可以将商店和产品结合在一起,并且可以在那里定义价格。还要记住 - 价格也可能因客户而异。有些客户可能会在某个级别获得折扣。虽然这里讨论的内容可能太多,但如果出现支持客户折扣结构的要求,则应将其置于脑海中。
StoreProductID StoreID ProductID Price
-------------- ------- --------- -----
1 1 1 $4.00
2 1 2 $1.00
3 2 1 $4.05
4 2 2 $1.02
产品的可用性应通过库存管理数据库表完成。例如,您可能拥有Warehouse
的主表和Location
的主表。把它们放在一起就是WearhouseLocation
表。 WarehouseProduct
表可以将仓库,产品和单位汇集在一起。
或者,您的生产或采购工具可能会将数据转储到ProcuredProduct
表中。您的制造单位可能会锁定一部分产品,同时构建一些产品。您的销售部门可能会锁定他们试图销售的产品子集。换句话说,您的产品可能会不断获得分配。您可以运行查询以查找某个产品的可用性,这可能会有点费力。在任何此类分配期间,可以在单个表格中更新可用单位的数量(其中包含您可以轻松依赖的计算可用产品)。
所以......根据客户的需求,您正在构建的系统会变得相当复杂。我建议您考虑这些事情,并使您的数据库结构对预期的更改保持灵活性。规范化是一件好事,去规范化也有其优势。明智地使用它们。