我很好奇我应该如何在我的应用程序中组织图像存储。它们将存储在磁盘上的某个地方,路径/url 存储在数据库中,但我的应用程序变得复杂,图像组织让我感到困惑。我使用的技术是 ASP.NET MVC 3 + EF 4.1 Code First(事实证明,复杂关系很难处理)。
这是一个基于家庭的应用程序,因此有一个 Family 表、Member 表和一个 FamilyMember 表链接到两个。还有一个 FamilyEvent 和 MemberEvent 表来跟踪家庭或成员生活中的事件。
用例
一个成员(member)可以上传多张个人资料照片(可能要放在“个人资料”相册里?)
成员可以上传“家庭”照片,附加到家庭对象,并放入家庭的某种类型的相册中。
成员(member)可以添加成员(member)事件,并将多张图片附加到成员(member)事件。
成员(member)可以添加家庭事件,并将多张图像附加到家庭事件。
这些是基本用例。
我的想法
包含 ID、描述和上传者的用户 ID 的基本“图片”表。
MemberProfilePicture 表,包含 id、pictureId、memberId 等...
带有 id、pictureId、[member id?]、membereventid 等的 MemberEventPicture 表...
带有 id、pictureId、[familyId ?]、familyeventid 等的 FamilyEventPicture 表...
这将允许家庭或成员稍后将图片“链接”到另一张个人资料照片/成员事件/或家庭事件。
我的问题
这是正确的,还是我把它复杂化了?除了多个表来表示不同事物的图像之外,我看不到任何其他方式,它们都引用基本图片表。任何人都可以就如何改进这个模型提出任何建议吗?虽然我知道可能有许多定义需要更正,但我正在寻找有关如何组织我的应用程序的图像方面的解决方案,或者对我已有的东西进行改进。
最佳答案
您首先使用 EF 代码,所以让我们谈谈代码而不是表格。您可以通过只有一个图片类并将许多图片与成员、家庭等相关联来实现您的用例。
获取此代码
public class Family
{
public int Id { get; set; }
public virtual ICollection<Picture> Pictures { get; set; }
public virtual ICollection<Member> Members { get; set; }
}
public class Member
{
public int Id { get; set; }
public virtual ICollection<Picture> Pictures { get; set; }
}
public class Picture
{
public int Id { get; set; }
public String Location { get; set; }
}
将生成 3 个表、家庭、成员、图片,图片表具有两个外键 Family_Id 和 Member_Id。此模型允许将单张照片与成员、家庭或两者相关联。
从可伸缩性的角度来看,我会避免将图像二进制文件存储在数据库中并使用 ORM 来访问二进制文件。更好的想法是将图片存储在文件系统或像 MongoDBs GridFS 这样的“专用”服务器中。
关于asp.net-mvc - 图像数据库组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8103191/