Итак, у вас есть модель данных, которая выглядит примерно так:
ProjectFile{
path:string
infile<<-->>ProjectFile.infile
}
Это будет работать, потому что (1) отношения базовых данных имеют направленность / мощность и (2) каждый объект уникален.Где вы можете попасть в проблему с правилами удаления.Вы в значительной степени должны использовать No Action
или Nullify
в этом случае, или рискуете отключить каскадное удаление.Это, в свою очередь, создает риск создания orphaned
объектов, которые не имеют связей и которые трудно найти и удалить в графе объектов.
Лучшая модель будет кодировать больше информации в самих отношениях.Похоже, что реальные файловые объекты, которые вы моделируете, имеют две отдельные связи с другими файловыми объектами: (1) Каждый экземпляр имеет другие экземпляры, которыми он манипулирует, и (2) каждый экземпляр имеет другие экземпляры, которые им манипулируют.Итак, ваша модель должна отражать следующее:
ProjectFile{
path:string
toManipulateFiles<<-(nullify)->>ProjectFile.manipulatedByFiles
manipulatedByFiles<<-(nullify)->>ProjectFile.toManipulateFiles
}
Это делает явным соотношение типов между объектами и позволяет быстро и легко получить нужные объекты для любой конкретной операции.Вы можете использовать Nullify
в одной взаимосвязи, не ставя объект напротив другой.
Хотя это не сразу очевидно, отношения - это не просто линии на графической модели, это реальные живые объекты, которые могут нести много информации.Вы должны разработать с учетом этого.