我有一个方案的“最佳实践”问题。休眠映射:从一列到多个表
场景: DB中的多个实体,例如Document,BlogPost,Wiki可以由个人共享。不是为每个实体创建一个分享表,而是创建一个共享表。问题是,如何将分享表映射到不同的实体?
我有三个选项,请告诉哪个选项最好,如果有更好的选项。
选项1: 创建表股份:
SHARES
id (unique)
entityId (non DB enforced FK to DOCUMENTS, WIKIS, POSTS etc.)
entityType
sharedBy
sharedWith
sharedDate
这里,ENTITYID将是一个FK到documentId,wikiId,等帖子ID等,并会的EntityType身份是什么类型的ENTITYID是。
这具有在休眠建模问题,创造共享时到实体映射,如share.getDocument()或share.getWiki()等等
选项2: 创建表股份其中仅持有共享信息,然后创建将分享与实体关联的解决表。
SHARES
id(PK)
sharedBy
sharedWith
sharedDate
shareType (helper field for searches)
SHARES_DOCUMENTS
share_id (unique ID and FK, one to one with SHARES)
document_id (FK to DOCUMENTS)
SHARES_POST
share_id (unique ID and FK, one to one with SHARES)
post_id (FK to POSTS)
more share tables here.
所以,休眠明智的,分享可以有一对一的对每个共享类型(如share.getDocument(),share.getPost(),并且将shareType识别哪个关系是“活性”)
选项3 选项1类似,但创建单独的列,而不是实体ID
SHARES
id (unique ID)
documentId (FK to DOCUMENTS, nullable)
postId (FK to POSTS, nullable)
wikiId (FK to WIKIS, nullable)
sharedBy
sharedWith
sharedDate
sharedType
在这里,每列可以映射到相应的实体,但它们是空。 sharedType可以识别哪个关系是“活动的”。因此,问题是,哪种做法最好,既有数据库智能化,也有hibernate映射(最终查询,性能明智)。
由于 M.相反
看一看http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html –
谢谢,将会看看这个。但这真的是遗产问题吗?或者可以使用继承来解决它。如果每个解析表都有附加的派生信息,那么它们可以有资格获得继承,但它们只包含与不同实体的关系。此外,大多数继承示例/文档不会尝试将单个列链接到不同的实体。他们确实有独立的领域,进一步定义他们。 –
第二个想法是,与不同实体的关系确实“进一步定义它们”。我将研究多个具有单表选项的类,并查看它是如何工作的。 –