两张桌几乎相同

时间:2012-09-14 13:30:14

标签: database-design

我正在开发Android应用程序和JSON Web服务。双方都有一个数据库,它们都有相同的数据库模式。

在客户端,订单,QAP和缺陷是服务器端数据库的副本。我无法在这些表中添加更多行。

用户将拥有一个包含缺陷名称和四列的表单:CRSCRFMAMI。在这四列上,用户将插入一些值。缺陷的名称为Defect.description,CRS,CRF,MA和MI值将成为当前电子报告的一部分。

要存储这些值(CRS,CRF,MA和MI),请使用 eReportDefect

我的问题是用户可以添加更多缺陷。如果我可以在缺陷表中添加更多行,我就不会有问题,但我不能。为了解决这个问题,我添加了 UserDefect 表,但我不确定这是否是一个好方法,因为我有两个表, eReportDefect UserDefect ,几乎相同。

对于填写在EReport中的每个缺陷,我都有“另一个问题”,我可以拥有零个,一个或多个图像(表格 eReportDefImg UserDefImg )。

这个设计“OK”还是可以改进?

enter image description here

1 个答案:

答案 0 :(得分:0)

我可以在主键定义中看到一些“老派”方法。 ;-)关于表eReportDefect,您的密钥是多余的,因为我理解“defectId”已经是唯一的,因此“qapId”和“eReportId”只会导致索引要更大,因此更慢 - 在这种情况下,列位置也不是最好的。它在DefectDefectImg表中是正确的,而同样的错误在eReportDefImg范围内。

好的,回到这一点,如果你不能修改eReportDefect表,就没有其他方法可以创建另一个表。

另一件事,图像。如果我理解正确,您可以修改表eReportDefImg,因此不需要UserDefImg表,甚至不需要Image表。您可以使用一个DefectImg表来代替这三个表:

PK image_id
FK userDefectId
FK defectId

如果userDefectId为空,则defectId不是NULL并且指向eReportDefect,反之亦然。这将通过UserDefectImgeReportDefImg表节省存储和耗时的连接。如果一个图像可以容纳多个缺陷,那么实际上需要这些。