我正在开发Android应用程序和JSON Web服务。双方都有一个数据库,它们都有相同的数据库模式。
在客户端,订单,QAP和缺陷是服务器端数据库的副本。我无法在这些表中添加更多行。
用户将拥有一个包含缺陷名称和四列的表单:CRS
,CRF
,MA
和MI
。在这四列上,用户将插入一些值。缺陷的名称为Defect.description
,CRS,CRF,MA和MI值将成为当前电子报告的一部分。
要存储这些值(CRS,CRF,MA和MI),请使用 eReportDefect 。
我的问题是用户可以添加更多缺陷。如果我可以在缺陷表中添加更多行,我就不会有问题,但我不能。为了解决这个问题,我添加了 UserDefect 表,但我不确定这是否是一个好方法,因为我有两个表, eReportDefect 和 UserDefect ,几乎相同。
对于填写在EReport中的每个缺陷,我都有“另一个问题”,我可以拥有零个,一个或多个图像(表格 eReportDefImg 和 UserDefImg )。
这个设计“OK”还是可以改进?
答案 0 :(得分:0)
我可以在主键定义中看到一些“老派”方法。 ;-)关于表eReportDefect
,您的密钥是多余的,因为我理解“defectId
”已经是唯一的,因此“qapId
”和“eReportId
”只会导致索引要更大,因此更慢 - 在这种情况下,列位置也不是最好的。它在Defect
和DefectImg
表中是正确的,而同样的错误在eReportDefImg
范围内。
好的,回到这一点,如果你不能修改eReportDefect
表,就没有其他方法可以创建另一个表。
另一件事,图像。如果我理解正确,您可以修改表eReportDefImg
,因此不需要UserDefImg
表,甚至不需要Image表。您可以使用一个DefectImg
表来代替这三个表:
PK image_id
FK userDefectId
FK defectId
如果userDefectId
为空,则defectId
不是NULL并且指向eReportDefect
,反之亦然。这将通过UserDefectImg
和eReportDefImg
表节省存储和耗时的连接。如果一个图像可以容纳多个缺陷,那么实际上需要这些。