【问题标题】:Database structure for bug reporting database [closed]错误报告数据库的数据库结构[关闭]
【发布时间】:2013-08-05 07:02:56
【问题描述】:

作为一个提高我对 php、OOP 和 PDO 知识的个人项目,我将设计一个错误报告数据库,如 Atlassian Jira、fogbugz 等

我对数据库结构有基本的了解,但是我只使用过一个数据库。

在这个简化的场景中,假设我们将有以下表格:

  1. 用户
  2. 错误
  3. 项目
  4. 问题类型
  5. 优先级

我的第一个想法是每个公司都需要一个新的数据库,因为如果我将错误数据库与每个人的错误混合在一起,它会影响查询速度的返回。这可能会导致拥有大量数据库,因为这是一个新概念,我只是想看看是否有更好的方法。

我假设我将自动生成一个新数据库,其中包含上述 5 个表的默认填充字段,位于名为 db_company_56 的数据库下,其中 56 是公司的 ID。

用这么多数据库维护东西可能会有点混乱,我想知道有没有办法将它们存储在 phpadmin 的子文件夹下,从环顾四周我看不到明显的方法。那么我采取的路线是否合理,还是有更好的方法来做这样的事情?

如果你有更多的阅读材料,我可以自己搜索一下,那会很棒,我真的不知道在什么关键字下搜索。

【问题讨论】:

  • 首先您需要正确使用术语。您只需要一个数据库,但需要几个
  • 并且不要为不同的公司使用不同的表,而只使用您列出的结构并使用适当的索引。
  • 您只需在表结构中包含一个Company 表即可。
  • 或许你可以窥探现有软件的数据库结构,比如 Mantis bug tracker。
  • @str "你只需要一个数据库,但需要几个表。"我同意,但有时,为了监管政策,您必须将各种客户的数据保存为单独的数据库。作为一个个人项目,这可能不是问题......

标签: php mysql database database-design


【解决方案1】:

在为它设置数据库时,有几种方法可以处理任何情况,但如果我处于您的位置,这就是我将如何设置它。正如 cmets 中所提到的,您的想法比您应该的要高——除非安全是一个主要问题并且您不想在同一个数据库中存储不同的公司记录,您应该只需要一个数据库了解所有信息。

我假设公司会有多个项目。

正如 cmets 中提到的 str ,您想要的是多个表。我将为用户及其各自的数据创建一个表,为错误创建一个表,其中包含公司、项目、问题类型、优先级、您可能想要的任何其他信息(报告用户等)的列,以及另外一个列:id相对于公司或更可能的项目的数字。这不能是 AUTO_INCREMENT 列,但仍然可以管理(我稍后会解释)。

您可以通过使用多个 WHERE 条件来显示公司中单个项目的错误,例如:

SELECT * FROM 'bugtable' WHERE company = 'company_name' AND project = 'project_name' ORDER BY bugid ASC

这将显示来自指定公司的指定项目的所有结果。添加新的错误记录时,很容易分配一个新的 ID 号。将变量分配给查找最高 id 的查询,例如:

SELECT 'bugid' FROM 'bugtable' WHERE company = 'company_name' AND project = 'project_name' ORDER BY bugid DESC

然后,将 id 加 1 并使用它来提交新的错误记录。简而言之,存储错误报告所需的只是一个表。希望这会有所帮助!

【讨论】:

  • 感谢您的详细回复,我想我的想法是,如果我的数据库大小是大小的 100 倍,即使我使用 where company = x,它也需要 100 倍的时间。听起来所有回复的差异都会很小,如果数据库大小并不重要,只要我索引并运行 WHERE 子句,那么这会大大简化事情吗?
  • 将公司/项目分离到单独的表中可能会给您带来更好的时间,因为它没有运行两个 WHERE,但我猜这种差异只会在大型数据库中很明显。这主要取决于您希望在单个数据库中专门用于多少表。
猜你喜欢
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 2017-03-27
  • 2016-12-06
  • 2012-07-10
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多