对于一个项目,我开发了一个能够向用户显示某些信息的应用程序。信息存储在数据库中,应用程序可以将它们混合在一起,以便对用户有意义。
数据库有点像这样:
名为Animal
的(超级)类表,其中PK为AnimalId
,列为Type
。每种动物的独立表格,以及它们自己的特定列。每个表都有一个PK Id
,如HorseId
,DogId
等。AnimalId
是每个Ids
的FK。我有另一个名为Owner
的表,其中PK为OwnerName
。
Owner
可以有多个动物,动物可以拥有多个所有者。因此,AnimalId
与Animal_Owner
一起用于链接表OwnerName
。应用程序显示动物列表,在用户选择一个动物后,应用程序显示链接所有者列表。这也是相反的方式。
在应用程序中,Owner
,Horse
等都是模型类,Animal
是动物类的超类,Id
和Type
是超类属性。
在应用程序中,我尝试使用集合,以最小化对数据库的调用。因此,每次启动列表(例如动物列表)或从数据库中提取关联的所有者时,它们也存储在集合(HorseCollection
,OwnerCollection
等)中。每次需要特定信息时,应用程序首先检查其Collection,如果找不到该信息,它将执行对数据库的调用,然后将信息存储在Collection中。
以下问题是我挣扎的问题。从可用所有者列表中选择Owner
后,我会从链接表(或关联的集合)中获得Id
,但我不知道{{1}来自哪个动物表1}}实际上是。我可以调用数据库(表Id
)来询问哪个Animal
属于Type
,但这意味着每次用户选择某个东西时,我都需要调用数据库;我希望尽可能避免。
我无法实例化Id
的集合,并且使用与其他集合相同的原则,因为它是一个抽象类。
这件事的正确行动是什么?或者我的方法首先是错误的? 如果您需要更多信息或者我不够具体,请告诉我。