想象一下,我有三个实体(EntityA
,EntityB
,EntityC
)可以有一些images
。所以有两种方式:
为每个实体制作一个image
表。这意味着EntityA
有一个名为image
的{{1}}表,AImages
和EntityB
的表格类似。
这种方法更智能,但有更多的表格。
有一个EntityC
表和另一个表名image
介于两者之间。
EntityType
表格有EntityType
列和EntityTypeId
,并有三条记录:name
,1,EntityA
,2,EntityB
。
然后在3,EntityC
表中:
如果我保存image
的记录,EntityA
表中的记录就是:image
第一列是1,1,name
,第二列是ImageId
,第三列是EntityTypeId
。
如果我保存image's filename
的记录,EntityB
表中的记录就是:image
如果我保存2,2,name
的记录EntityA
表中的记录就是:image
在此方法中,表的数量会减少,但查询会更长。
哪一个是优化的或任何其他方式...
答案 0 :(得分:1)
有一个图像表和另一个表名为EntityType的文件。
这将要求您手动强制执行参照完整性,即trickier than it looks。
所以:
答案 1 :(得分:0)
最简单的方法是将图像存储在各自表格的varbinary(max)
列中,而不是将它们分开。 SQL Server将以高效的行外方式处理它们。
根据使用的SQL Server版本和LOB的大小,您可以考虑FILESTREAM
或FILETABLE
feature。
答案 2 :(得分:0)
似乎有一个BaseEntity
表,其中包含其他实体的共享属性,对您有所帮助
实体A&实体B& EntityC将是BaseEntity的childes,它们的主键将是EntityBase表的主键。
它们之间的零或一关系将起作用。
将推荐在BaseEntity中使用名为entyty_type的鉴别器列。
其他集合(如图像和地址等)将连接到此EntityBase
表