asp.net-mvc - 图像数据库组织

标签 asp.net-mvc database database-design entity-framework-4.1 ef-code-first

我很好奇我应该如何在我的应用程序中组织图像存储。它们将存储在磁盘上的某个地方,路径/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/

相关文章:

html - 如何生成带图标的 Html.ActionLink

c# - 异步一直向下问题

database - 根据 IANA 时区数据库,是否有位置 -> 时区名称的数据库

ASP.NET Web 应用程序

mysql - 将用户帐户和管理员帐户分开更安全吗?

asp.net-mvc - ASP.Net MVC具有缓存的数据库驱动菜单

javascript - 显示新行中现有项目的表行中的值

php - MySQL时间重叠

php - 将查询从用户输入导出到 Excel - 只有 HTML 部分可见

c# - 如何向我的模型添加固定值属性?