设计数据库

时间:2010-01-28 16:40:48

标签: database database-design

基本上我的工作是使用数据库作为后端开发Web应用程序。到目前为止我一直在做的是,
基于客户的要求,

  • 我画了一个基本的草图 表是,它们的样子如何
  • 这些表中的字段以及一些一对一或多对一或多对多关系

虽然我对这些事情并不完美,但我试图弄清楚这些关系应该与我过去的项目有什么关系。但在我看来,仍有一些疑点。

如果客户端询问他想要一个特定的数据,我试图通过直接SQL查询或者想到scritp(在大多数情况下是PHP)来实现它,如果我无法找出一个查询全部用于该特定请求。

现在,我的问题出现了。

  

基于我的关系   在开发桌子时想出来,   是什么限制?   客户可以问?我的意思是说   这是,客户会问他   希望列出所有的indidual   产品,它们的数量,相关的   类别,所有的计数   类别,每个产品   类别和它们的价格,总和   所有的类别价格和   如此总价格如此。

这只是一个解释我情况的请求的例子。

现在,如果有任何请求可能需要更长的时间来执行,开发人员是否可以通过分解请求来满足此请求? 我需要告诉他为什么这种分解是必要的吗? 如果他觉得我不能一次性做到这一点怎么办?

他要求的每份报告都需要单一查询吗?或者是否需要借助PHP来处理一个循环并根据我得到的值,我提出一些条件来应用客户想要的规则?

做这种工作的更好方法是什么?

任何观点?

感谢。

7 个答案:

答案 0 :(得分:4)

这通常取决于所使用的数据库。

大多数查询可以在一个选择中完成,但是这个shoudl永远不会阻止你查看 Views / Sub Selects / Stored Procedures

您应该能够以这种方式处理大多数查询,所以我建议:

不要让输出决定你如何设计数据库,这可能会导致你走错路。您需要将数据存储在适合应用程序的最规范化的区域中。

答案 1 :(得分:1)

很多问题!

  

基于我的关系   在开发桌子时想出来,   是什么限制?   客户可以问?

客户可以真正要求任何东西。客户并不总是理所当然的。帮助客户满足他们的需求是你工作的一部分。

  

我的意思是,这是   客户会问他想要所有列表   不计其数的产品,他们的数量,   相关类别,所有计数   类别,每个产品   类别和它们的价格,总和   所有类别价格和总额   价格等等。

使用SQL可以发现所有这些查询。要列出单个产品,请使用SELECT语句。要获得计数,请使用COUNT。要获取关联类别,请使用JOINS。使用SUM获得总价格。

  

现在,如果有任何请求可以   可能需要更长的时间   执行,开发人员可以满足   通过打破这个要求   请求?我需要告诉他原因吗?   这有必要吗?

是的 - 打破请求可以帮助客户了解他们的需求。

  

如果他怎么办?   我觉得自己无能为力   它一次性拍摄?

否则说服他。如果你想保住他的生意,你不希望他认为你是愚蠢的。 :)

  

他要求的每份报告是否都需要   在单个查询?还是会的   任何需要得到PHP的帮助   处理一个循环并基于   我得到的价值,我把一些   适用规则的条件   客户想要吗?

真的取决于你的技能水平。如果您足够了解SQL,则可以在一个查询中获得大部分数据。如果你不是那么好,那么你可能会做一些查询,然后在php中循环它们。通常,在SQL中完成所有操作会更快。

  

做这种工作的更好方法是什么?

你自己在为自己工作吗?如果是这样,有时只需要经验就能找到最好的方法。 (并发布到stackoverflow:)

答案 2 :(得分:0)

支付账单的人可以要求任何他们想要的东西。如果他们要求的确实没有意义,那么试着让他们看到原因。

不应仅仅因为实施起来而难以更改或删除业务需求。

设计数据库架构以反映域模型并规范化至少3NF。

通常,可以实现聚合查询(例如通常用于驱动报告的查询)以利用索引和RDBMS特定功能来减少其运行时间。

答案 3 :(得分:0)

您应该查看requirement specification的一般原则并代表客户的需求,例如user stories,这是用户希望执行的任务。然后,您可以将每个用户故事作为一个工作单元。应该可以一次处理一个用户故事,因此您可以就提供它们的顺序达成一致。

最好将每个故事/查询视为单独的。这样,您可以根据客户端的需要在计划中添加或删除功能。如果您发现常见的模式,您可以在进行时重构它们。

许多问题来自于试图过度优化或过度概括的人。除非您发现它们开始重叠,否则我会单独编写每个查询。

答案 4 :(得分:0)

听起来你只需要提高数据设计技巧。正如旁观者所说,正确设计/规范化的数据库不会遇到您担心的问题。但是,如果你不断从错误中学习,那么学习设计数据库的正确方法需要花费大量的时间。当我开始作为网络开发者时,我发现Database Design for Mere Mortals给了你如何避免将自己画成角落的巨大帮助。关于如何在数据库上编写好的查询,还有一个companion book。这两本书不会教你所知的一切,但它们会给你一个很好的基础。

答案 5 :(得分:0)

听起来你缺乏信心。这些是开发人员每天面临的问题。我认为你认识到可能存在的弱点并且正在采取措施改进是件好事。花点时间了解有关数据库和查询的更多信息。

那就是让我直接回答你的一些问题:

  

现在,如果有任何请求可以   可能需要更长的时间   执行,开发人员可以满足   通过打破这个要求   请求?

  • 是的,你可以分解请求。 不是每个请求都可以满足 单个查询。
  

我需要告诉他为什么会这样   分解必要吗?

  • 只有他问。只要你符合要求,你应该没事。如果他知道怎么做更好的方式,那他为什么雇用你呢?
  

如果他觉得我没有能力怎么办?   一次性做到这一点?

  • 再一次,如果他知道更好的方式 然后编码数据库和报告 他为什么雇用你?
  

他要求的每份报告是否都需要   在单个查询?还是会的   任何需要得到PHP的帮助   处理一个循环并基于   我得到的价值,我把一些   适用规则的条件   客户想要吗?

  • 不,不是一切都可以在 单一查询,这取决于 报告的复杂性。

答案 6 :(得分:0)

关系数据库的设计将对可以完成的任务(以有效的方式)产生巨大影响。我倾向于说这是你申请中最重要的部分 您绘制表格设计的过程是可以的。但之后你应该检查你的不同用途案例,看看(只用铅笔和纸)你的数据库设计是否能够应对它们。
然后,您可以与您的客户讨论,以确保某些案例永远不会发生。 (“例如:您能否确认产品将始终属于1且仅属于1类别”)。

那就是说,客户确实可以在规格中提出任何问题。您可以自由地接受,拒绝或向他解释为什么他的规格不切实际。如果您在没有明确规格的情况下以固定价格开发,那么您的情况很糟糕,这是您的错...