我正在学习MySQL,偶然发现了一个创建数据库以跟踪条形码扫描中的制造零件的练习。零件需要知道其创建扫描和完成扫描。完成扫描将确定它是好零件还是坏零件。
这似乎是一个循环依赖性和参照完整性问题。我的问题是,如果不是我建议的选项A或选项B,什么是解决这种依赖关系的最佳方法?我想听听最能优化查询速度的查询方法,该查询根据零件状态及其完成情况来查询有多少优质零件。
(PartStateId引用具有状态名称的表。可能的值可能是Good,Bad,NotDone)。
选项A:
Parts: PartId int, CurrentPartStateId int, CreatedTime timestamp, FinishedTime timestamp, Barcode varchar, FOREIGN KEY (CurrentPartStateId) REFERENCES Partstates(PartStateId),
Scans: ScanId int, PartId int, PartStateId int, ScanTime timestamp, ScanParams varchar, FOREIGN KEY (PartStateId) REFERENCES Partstates(PartStateId), FOREIGN KEY (PartId) REFERENCES Parts(PartId),
专业版:
骗局
选项B:
Parts: PartId int, CreatedScan int, FinishedScan int, Barcode varchar, FOREIGN KEY (CreatedScan) REFERENCES Scans(PartStateId), FOREIGN KEY (FinishedScan) REFERENCES Scans(PartStateId),
Scans: ScanId int, PartId int, PartStateId int, ScanTime timestamp, ScanParams varchar, FOREIGN KEY (PartStateId) REFERENCES Partstates(PartStateId), FOREIGN KEY (PartId) REFERENCES Parts(PartId),
专业版:
骗局
编辑:
选项C:
Parts: PartId int, FinishedScan int nullable, Barcode varchar, FOREIGN KEY (FinishedScan) REFERENCES Scans(PartStateId),
Scans: ScanId int, PartId int, PartStateId int, ScanTime timestamp, ScanParams varchar, FOREIGN KEY (PartStateId) REFERENCES Partstates(PartStateId), FOREIGN KEY (PartId) REFERENCES Parts(PartId),