关于如何构建我的数据库的建议

时间:2014-07-20 06:09:31

标签: php mysql sql database

我在我的仪表板上取得了很好的进展我正在创建一个管道业务(My Own)我们专门从事新家庭,我正在尝试自动化我目前必须手动完成的许多流程,主要是任意的文书工作和工作管理。我还可以提供建筑商的链接,以便他可以跟踪房产的进度和历史。

这样做的一般要点是我可以创建一个新的房产,从那里为房产添加房屋计划,然后各种细节,如排水沟的长度,屋顶的类型,区域之间的距离可以添加到儿童桌。此信息将用于创建报价。

我想就如何构建所有这些建议提出一些建议。我正在使用php和mysql。

我每月都会从我的供应商处以CSV格式通过电子邮件向我发送价格数据库,因此我希望每月也在我的数据库中更新该表格。因此,每个新地址都可以使用该定价来创建报价,一旦生成报价,我可以将其保存到另一个表中,以便在设置定价时价格保持冻结。

我在报价方面的一个主要问题是如何将我的数据链接到定价表?因为我无法保证我得到的列表总是以完全相同的顺序,所以如果添加新产品,它会搞乱我所拥有的任何类型的id系统。

我在想,也许唯一的办法就是让每个项目在数据库中搜索确切的产品代码,这似乎是最符合逻辑的。

enter image description here

http://i.stack.imgur.com/sZQ1N.png

我附上了一张图片,试图弄清楚我应该如何构建它。这显然还包括一个定价清单以及许多其他表格,这些表格将成为房屋计划的子项。

属性表将成为主表,它将拥有与该属性相关联的所有者。因为这可以改变,如果出售等。然后一个房产有一个房屋计划添加到它,因为一些房产可以有多个房屋。

房屋计划表还有一些附属于该计划的阶段,“内部排水”,“外部排水”等,这些都将在页面上显示为母公司计划下面的卡片。

无论如何,我可能会让你感到困惑,但任何建议都非常感谢,甚至是一些好的建议。我已经搜索了但是我的搜索条件还有很多不足之处,所以我不太确定要看。

谢谢你们

2 个答案:

答案 0 :(得分:2)

我假设您已经阅读了数据表的规范化。掌握正常形式将有助于您布置数据库。我建议您首先处理最有用和最重要的信息并使系统继续运行,否则您将失去动力,因为这将是一项艰巨的任务。

第一个建议是,您的ID列应该被适当地重命名,否则当您在深夜尝试找出您的外键关系不起作用时,您将会感到头疼。最好让您的ID列相关,而不是任意。有人说,有人会争辩说使用相关而不是任意的密钥会有更多的开销。我觉得收益超过了轻微的损失。

请记住,不要觉得您需要从一开始就将所有字段都放入数据库。如果您需要创建一个只包含主键和名称的表,那么您就拥有了ID,然后执行此操作。您可以稍后添加额外的字段。解决你今天要处理的事情后来担心附加内容。

回答关于引号的问题。您将为供应商,产品供应商产品创建一个表格(这是您将产品映射到供应商的地方)。你必须弄清楚他们的产品代码是否相同。这就是你的CSV数据库上的upc代码会很好,这将是关键词。斜体是您的主要钥匙。

  • 您有供应商表: SupplierID ,名称,地址等
  • 您拥有产品表: ProductID ,说明,价格(您销售时)以及您的产品和服务所需的任何其他相关信息。
  • 您有供应商产品表: SupplierID ProductID ,(SupplierSKU,UPC或供应商用于识别该产品的编号)。 CurrentPrice,SupplierDescription以及csv文件中包含的任何其他相关数据。
  • 您有行情表: QuoteID ,日期,ClientID等。
  • 你有你的QuotesDetails表: QuoteID QuoteDetailID (你也可以把它和产品ID的PK),ProductID,报价(你需要把它存储为价格改变,你不希望这改变),数量,总价格等......

您无需从一开始就将所有ProductID映射到SupplierSKU,您可以将PK设置为SupplierID,SupplierSKU,并将SupplierID和ProductID作为附加索引。如果他们都使用了UPC代码,那么你就可以免费使用它了,你可以将它作为你的ProductID使用,或者你也可以这样做。但是,您需要有一个导入代码才能将CSV文件导入数据库。如果您愿意,也可以将每个表作为单独的表,但这会增加系统的复杂性。

您的报价将使用您的ProductID。如果您使用自己的ProductID,那么在执行订单时最简单的就是拥有映射例程。如果您想获得幻想,可以从报价单生成订单或将其作为单独的系统。只有你可以决定你要花多少时间来编写前端,以及它将产生多大的差异。

使您的软件符合您的业务规则,而不是相反。所以,无论你现在这样做,软件都是这样做的。数据库应包含其中的所有规则,以使您的数据与业务规则保持一致。这是触发器和存储过程发挥作用的地方。在进一步迁移到另一个数据库之前,请确保调查此问题,因为MySQL / InnoDB短消息并不好玩。

另一个注意事项是,如果您的表格正确完成,则订单并不重要。这是理解数据库规范化发挥作用的地方,因为正常形式之一说记录和列的顺序是无关紧要的。它必须具有唯一的ID,ID可以是多个字段。

答案 1 :(得分:0)

你需要自己画一个Entity-relationship model。写出所有不同的"部分"将您建议的数据库作为单独的实体,然后考虑它们之间的相互关系。

这里没有人能够就理想的数据库结构给出建议,因为我们没有足够的上下文。您必须考虑存在的所有可能情况以及所有情况如何结合在一起。该图将帮助您做到这一点。一旦您制作了可视化模型,就可以构建模式。