Database 设计数据库

Database 设计数据库,database,database-design,Database,Database Design,基本上,我的工作是使用数据库作为后端开发web应用程序。我一直在做的是, 根据客户的要求 我画了一个基本的草图 桌子是什么样子的 这些表中的字段以及一些一对一或多对一或多对多关系 虽然我在这些方面并不完美,但我试图从我过去从事的项目中找出这种关系应该是怎样的。但是在我的脑海里仍然有一些疑问 如果客户机要求他需要某个特定的数据,我会尝试通过直接SQL查询或scritp(在大多数情况下是PHP)来实现,如果我根本无法找到该特定请求的查询 现在,我的问题来了 基于我的关系 在开发表格的过程中, 什么样

基本上,我的工作是使用数据库作为后端开发web应用程序。我一直在做的是, 根据客户的要求

我画了一个基本的草图 桌子是什么样子的 这些表中的字段以及一些一对一或多对一或多对多关系 虽然我在这些方面并不完美,但我试图从我过去从事的项目中找出这种关系应该是怎样的。但是在我的脑海里仍然有一些疑问

如果客户机要求他需要某个特定的数据,我会尝试通过直接SQL查询或scritp(在大多数情况下是PHP)来实现,如果我根本无法找到该特定请求的查询

现在,我的问题来了

基于我的关系 在开发表格的过程中, 什么样的工作有限制吗 客户可以问吗?我的意思是 这就是,客户会要求 要列出所有的独立程序吗 产品,其数量,相关 类别,所有的计数 类别,每个类别中的产品 类别及其价格,以及 所有类别的价格和 总价格等等

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

现在,如果有任何请求可能需要更长的执行时间,开发人员可以通过分解该请求来满足该请求吗? 我需要告诉他为什么需要这种分解吗? 如果他觉得我不可能一下子做到呢

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

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

有什么看法吗


谢谢。

付账的人可以要求他们想要的任何东西。如果他们的要求真的没有道理,那么试着让他们明白原因

业务需求不应该仅仅因为“难以”实现而被更改或删除

设计数据库架构以反映域模型,并将其标准化为至少3NF


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

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

大多数查询可以在一次选择中完成,但这不会阻止您查看视图/子选择/存储过程

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


不要让输出决定您如何设计数据库,这可能会导致您走上错误的道路。您需要以最适合应用程序的标准化方式存储数据。

您应该了解客户需求的一般原则,例如,用户希望执行的任务。然后,您可以将每个用户故事作为一个工作单元进行成本计算。应该可以一次处理一个用户故事,这样您就可以商定交付它们的顺序

最好将每个故事/查询单独看待。通过这种方式,您可以根据客户机的需要从计划中添加或删除功能。如果您发现了常见的模式,您可以在进行过程中重构它们


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

听起来您只需要提高数据设计技能。正如astander所建议的那样,一个正确设计/规范化的数据库不会遇到您所担心的问题。但是,如果你只是从错误中不断学习,那么学习设计数据库的正确方法需要很多时间。当我刚开始从事web开发时,我发现了一个巨大的帮助,可以向您展示如何避免自己陷入困境。还有一个关于如何在数据库上编写好的查询的问题。这两本书并不能教会你所有需要知道的东西,但是它们给了你一个很好的基础。p> 基于我的关系 在开发表格的过程中, 什么样的工作有限制吗 客户可以问吗

客户可以真正要求任何东西。客户并不总是理性的。帮助客户思考他们的需求是你工作的一部分

我想说的是 客户会要求他列出所有 独立产品,它们的数量, 关联类别,所有 类别,每个类别中的产品 类别及其价格,以及 所有类别的价格和总额 价格等等

所有这些查询听起来都可以通过SQL实现。要列出单个产品,请使用SELECT语句。要获得计数,请使用count。结伴 d类别使用联接。使用SUM获得总价

现在,如果有任何请求可以 可能需要更长的时间进行测试 执行,开发者能满足吗 通过分解 要求我需要告诉他为什么会这样吗 这个故障有必要吗

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

如果他 觉得自己做不到 一枪就搞定了

说服他不要这样做。如果你想保住他的生意,你不想让他认为你很愚蠢

他要求的每一份报告都是必要的 要在单个查询中吗?还是会在那里 是否需要借助PHP 处理一个循环并基于 我得到的价值,我放了一些 适用以下规则的条件: 客户想要什么

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

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


你是为自己工作吗?如果是这样的话,有时需要经验来找出最好的方法。并向stackoverflow发帖:

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

也就是说,让我直接回答你的一些问题:

现在,如果有任何请求可以 可能需要更长的时间进行测试 执行,开发者能满足吗 通过分解 请求

是的,你可以细分请求。 并不是每一个要求都能得到满足 一个查询。 我需要告诉他这是为什么吗 有必要休息吗

除非他问。只要你符合要求,你就可以了。如果他知道如何做得更好,那他为什么要雇用你? 如果他觉得我没有能力怎么办 一枪就完成了吗

再一次,如果他知道更好的方法 然后对数据库和报告进行编码 他为什么雇用你? 他要求的每一份报告都是必要的 要在单个查询中吗?还是会在那里 是否需要借助PHP 处理一个循环并基于 我得到的价值,我放了一些 适用以下规则的条件: 客户想要什么

不,不是每件事都能在一个小时内完成 单个查询,取决于 报告的复杂性。
关系数据库的设计将对是否可以有效地完成任务产生巨大影响。我倾向于说这是你申请中最关键的部分。 绘制表格设计的过程正常。但是在那之后,你应该回顾一下你的不同用例,看看你的数据库设计是否能够处理每一个用例。 然后,您可以与客户讨论,以确保某些情况永远不会发生。e、 g:你能确认一个产品总是属于一个类别,而且只属于一个类别吗


也就是说,客户确实可以要求规范中的任何内容。您可以自由地接受、拒绝或向他解释为什么他的规格不现实。如果你在没有明确规格的情况下开发一个固定价格的产品,你的处境很糟糕,这是你的错

但是编写查询假设您已经考虑了数据库设计。我假设模式设计将遵循数据的最佳模式。这个问题似乎更倾向于查询的设计。在谷歌搜索之后,我最近开始关注面向普通人的数据库设计。如果遇到了严重的问题,我很抱歉。我想在某个时候我们都处在你的位置上我认为在这个领域长寿的关键是不断学习。18年后,我几乎每天都能学到新东西!当你开始对某个特定的话题产生不确定的感觉时,这是做一些研究的好标志。信心会随着经验而来。嘿,JPro,如果你认为我的帖子是答案,请把它记下来。谢谢你,布莱恩!我非常喜欢你的回答,那就是“为了设计而设计”,设计师们对于手头的任何问题都有两条途径,规范化和非规范化。反规范化正是试图解决性能问题,或者换句话说,将输出考虑在内,以确定案例的最佳设计。