3

我目前正在开发一个票务系统,该系统允许我们的用户根据自己的需要提交票证。即,如果部门“A”正在提交一个故障单,他们可以有某些类型的问题类别(例如“供应”或“打印机”)以及与所选类别有关的详细信息。我已经制定了部分数据库设计,我正在寻找一些关于它的反馈。我从来没有自己从头开始建立一个系统,所以我有点紧张。

这是我的数据库设计的草稿版本

问题表

Id | CreatedBy | CreateDate | Status | Owner | AssignedTo | AssignmentDate | 
-----------------------------------------------------------------------------

设备问题明细表

Id | IssueId | Serial # | Make | Model | ....
---------------------------------------------

供应问题明细表

Id | IssueId | SupplyId | ItemId | QTY | UnitOfMeasurement
-------------------------------------------------------------

网络问题明细表

Id | IssueId | Supervisor |  Details | 
-------------------------------------------------------------

备注表

Id | IssueId | Note | CreatedBy | CreateDate
-------------------------------------------------------------

提前致谢

4

4 回答 4

3

我会拆分您的问题表,以便问题和分配是分开的。另外,我会添加一个问题类型表并向问题添加一个 IssueTypeId 列

问题

Id、IssueTypeId、CreatedBy、CreateDate、状态、所有者

问题类型

身份证、姓名

作业

Id、IssueId、AssignedTo、AssignmentDate、活动

如果以后需要,这将允许多个人被分配到一个问题。它还允许记录从问题中取消分配的人的历史。问题类型条目如下:1:设备,2:供应,3:网络

有几个不同的问题类型可能是可以管理的,但如果你有很多,用 Ikke 建议的键/值表方法替换“详细信息”表可能会更好。

于 2010-03-26T19:35:06.147 回答
2

你的设计很棒。单独的表格包含每种类型问题的详细信息正是正确的方法。

不要听从那些认为你应该拥有键/值对的人的建议。这种方法使某些事情变得更容易,但是当您尝试做其他事情时,它很快就会变成一场噩梦。您可以随意使用完整的 RDBMS。用它!

每个表格中的每一行都代表了一个关于世界的真实命题。DB 设计越能反映您试图追踪的重要现实,那么您的情况就越好。

如果将来您需要跟踪更多详细信息,请添加更多列。如果事实证明还有其他问题类型,则添加更多表格。问题类型表什么也没增加。

在创建报告或对此数据进行分析时,遵循这一原则将带来巨大的好处。

您应该考虑遵循 OG 的建议,允许每个问题有多个受让人,或跟踪分配的历史。这取决于系统的使用方式或需要报告的内容。请记住,您不能报告未存储的数据。

于 2010-03-26T20:02:32.093 回答
1

这是一个可能的解决方案,但它不是很灵活。如果出现新类型的问题,您将不得不更改数据库。

另一种解决方案是将所有这些不同的表放入一个具有键值对字段的表中。这种方法的缺点是您必须在应用程序中定义键,并且数据库无法检查所有信息是否都存在。

这是您必须考虑的问题。可以有更多的解决方案,但我现在想不到。

于 2010-03-26T19:34:58.707 回答
1

在设计时开始考虑你将如何使用这些数据。您需要运行什么样的报告,人们将如何收到有关问题更改的通知,您将如何选择分配给任务的人员(您可能需要表格来存储可用于工作的人员及其技能集(他们可以分配给什么样的任务),您需要允许什么样的附件以及在哪里存储该信息(屏幕截图可以帮助解决问题)。您需要什么样的查找表才能删除你的应用程序有问题吗?你需要任何类型的数据审计吗?你是否需要主管授权某些类型的问题?是否可以自动分配人员,或者你是否需要在确定谁之前跟踪他们已经掌握的内容可用。您是否希望能够确定完成任务所需的数据以确定事情何时迟到?您说某些部门只能提交某些类型的工单,存储这些数据的表在哪里?换句话说,您确实需要深入了解细节并满足要求。

顺便说一句,不要让任何人说服您使用键值存储,这是在关系数据库中存储数据的绝对最糟糕的方式。您不仅会遇到性能问题,而且会失去很多正确设置字段限制的能力(例如是否需要),并且对于某些需要频繁转换的信息,您被迫选择糟糕的数据类型执行功能的正确数据类型。

于 2010-03-26T20:18:53.270 回答