2010-01-28 124 views
2

基本上我的工作是开发使用数据库作为后端的Web应用程序。我一直在做,直至现在的问题是,
Basded在客户的要求,设计数据库

  • 我画的 表是什么基本的描述,他们怎么看起来像那些表中
  • 领域和一些一对一或多对一或多对多的关系

尽管我对这些事情并不完美,但我试图弄清楚我的过去项目中的关系应该如何上。但在我看来,这仍然存在一些疑问。

如果客户端询问他想要一个特定的数据,我试着通过直接SQL查询来实现它,或者认为scritp(在大多数情况下是PHP),如果我根本无法弄清楚查询特别要求。

现在,来了我的问题。

根据我 想通了,同时开发表, 在那里什么 客户端可以问任何限制的关系?我的意思 这是说,客户会问他 希望列表中的所有indidual 产品,它们的数量,相关 类别的
类别中的所有罪名,该产品在每个 类别和其价格,总计 所有类别的价格和 总价格如此之多。

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

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

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

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

任何视图?

谢谢。

回答

0

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

业务需求不应该被改变或删除,因为它可能很难实现。

设计您的数据库模式以反映域模型并规范化为至少3NF。

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

4

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

大多数查询可以在一个单一的选择来实现,但这种shoudl从不看查看/子选择/存储过程阻止你。

你应该能够处理大部分的查询以这种方式,所以我会建议:

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

+0

这就是'为设计而设计',设计师有两条途径来解决任何问题在手边,规范化和非规范化。反规范化正是试图解决性能问题,换句话说就是将输出考虑在内以决定最佳设计。 – 2010-01-29 14:44:02

0

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

最好将每个故事/查询看作是单独的。这样,您可以根据客户的需求添加或删除功能。如果你发现常见的模式,你可以随时重构它们。

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

+0

但编写查询假定您已经考虑了数据库设计。 – Tom 2010-01-28 16:54:43

+0

是的。我想我假设模式设计将遵循数据的最佳模式。这个问题似乎更倾向于查询的设计。 – Joe 2010-01-28 16:56:52

0

听起来你只是需要提高你的数据设计技能。正如我们所建议的那样,正确设计/规范化的数据库不会遇到您所担心的问题。但是,如果你只是不断从错误中学习,那么学习设计数据库的正确方法需要很长时间。当我开始作为网络开发人员时,我发现Database Design for Mere Mortals有助于向您展示如何避免将自己绘制到角落。关于如何在数据库上编写好的查询还有companion book。这两本书不会教你所知道的一切,但它们给你一个很好的基础。

+0

数据库设计为单纯的凡人是我最近开始遵循最近现在谷歌搜索 – JPro 2010-01-28 18:01:19

1

很多问题!

根据我 想通了,同时开发表, 在那里什么 客户端可以问任何限制的关系?

客户可以真正要求什么。客户并不总是理性的。帮助客户考虑他们的需求是您工作的一部分。

我的意思是说这个就是, 客户会问他想要列表中的所有 的indidual产品,它们的计数, 相关类别的 类别中的所有罪名,该产品在每个 类别和他们的价格,所有类别价格总和 和价格总和 等等。

所有这些查询听起来都可能与SQL有关。要列出单个产品,请使用SELECT语句。要计算使用COUNT。要获得关联的类别,请使用JOINS。使用SUM来获得总价。

现在,如果有,可以 可能需要更长的时间 exection任何要求,可以开发满足 通过分解 请求,这个请求?我需要告诉他为什么 这个分解是必要的吗?

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

如果他 觉得我没有能力做到 它在一个镜头?

否则说服他。如果你想保持他的生意,你不希望他觉得你很愚蠢。 :)

他请求的每个报告都需要 在单个查询中吗?或将有 任何需要借助PHP 处理一个循环,并根据我得到的 值,我把一些 条件应用规则, 客户端要?

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

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

你正在为自己工作吗?如果是这样,有时候只需要经验就能找出最好的方法。 (并张贴到计算器:)

+0

非常感谢您回答 – JPro 2010-01-28 18:07:27

+0

嘿JPro,如果你认为我的帖子是答案,请标记它。 谢谢 – 2010-01-28 20:22:56

+0

祝福布赖恩!我非常喜欢你的答案。 – 2010-01-29 14:50:53

0

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

那说让我直接回答大家的一些问题:

现在,如果有,可以 可能需要更长的时间 exection任何要求,可以开发满足 ,打破了这一请求请求 ?

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

我需要告诉他这是为什么 打破必要吗?

  • 只有当他问。只要你符合要求,你应该没问题。如果他知道如何做到这一点,那么他为什么聘用你?

如果他觉得我不是在单杆做这件事的能力 ?

  • 再次,如果他知道一个更好的办法 编写数据库和报表然后 他为什么要录用你?

是每一份报告,他询问需要 是在单个查询?或将有 任何需要借助PHP 处理一个循环,并根据我得到的 值,我把一些 条件应用规则, 客户端要?

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

你在分析我的时候是正确的 – JPro 2010-01-28 18:11:52

+0

如果遇到严重的问题,我很抱歉。我想我们在某个时候都处于你的位置。:)我认为这个领域长寿的关键是不断学习。 18年后,我几乎每天都会学到新的东西!当你开始对某个特定主题有那种不确定的感觉时,这是做一些研究的好标志。信心会随着经验而来。 – DMKing 2010-01-28 19:54:21

0

关系数据库的设计将会对可以做什么(以有效的方式)或不可以做什么产生巨大的影响。我倾向于说它是你的应用程序中最关键的部分。
您绘制表格设计的过程是可以的。但在此之后,您应该查看不同的使用案例,并查看(仅使用铅笔和纸张)数据库设计是否能够应对每个案例。
然后,您可以与您的客户讨论,以确保一些案件永远不会发生。 (例如:“你能确认一个产品总是属于1个,只有1个类别”)。

也就是说,客户确实可以在规格中提出任何要求。你可以自由接受,拒绝或向他解释为什么他的规格是不现实的。如果你开发一个没有明确规格的固定价格,那么你处于一个糟糕的境地,这是你的错......