1

我很好奇我应该如何在我的应用程序中组织图像存储。它们将存储在磁盘上,并将路径/ URL存储在数据库中,但是我的应用程序变得复杂,图像组织让我感到莫名其妙。我使用的技术是ASP.NET MVC 3 + EF 4.1 Code First(这在复杂的关系中证明是困难的)。图像数据库组织

这是一个基于家庭的应用程序,所以有一个家庭表,会员表和一个FamilyMember表链接到两个。还有一个FamilyEvent和MemberEvent表来跟踪家庭或成员生活中的事件。

使用案例

成员可以上传多张资料图片(可能在“个人资料”的专辑放?)

成员可以上传“家庭”的照片,被连接到家庭对象,并为家庭投入某种类型的专辑。

会员可以添加会员活动,并将多个图像附加到会员活动。

会员可以添加家庭活动,并将多个图像附加到家人的活动中。

这些是基本用例。

我的想法

基地 “图片” 表ID,描述,也许上传的用户ID。

与ID,pictureId,MEMBERID等MemberProfilePicture表...用ID,pictureId,[会员ID?],membereventid等

MemberEventPicture表...用ID,pictureId

FamilyEventPicture表,[familyId?],familyeventid等...

这将允许一个家庭或成员基本上将图片“链接”到另一个个人资料图片/会员活动/或家庭活动。

我的问题

这是正确的,还是我过于复杂吗?除了多个表格以外,我没有看到其他任何方式来表示不同的东西,这些东西都涉及基本图片表格。任何人都可以提出任何建议,以了解如何改进此模型?虽然我知道可能有很多定义需要更正,但我正在寻找解决方案,以便如何组织我的应用程序的成像方面,或者改进已有的方面。

回答

1

我会做的是有三张桌子。

'图片'表为每个图片和位置存储唯一的ID。 这个'个人资料'表有你的个人资料的dtails。 由pictureId和profileId组成的第三个“链接”表

如果我想将图片A链接到配置文件X,我只需在链接表中添加“A,X”。事件或任何事情都是一样的。如果将有多对多的关系,这是最简洁的方式(我假设相同的图片可以在多个配置文件中)。

希望我正确理解你的问题。

+0

所以基本上我提出的是要走的路。图片表,ProfilePicture,MemberPicture,FamilyEventPicture表格等... – Jack

+0

您不需要多个XXXXXPicture图表。如果你想要一个链接器,你可以放置一个'枚举'。 – Haedrian

+0

你是什么意思?你说我可以通过链接表(比如ProfilePicture)将图片A链接到配置文件X.这不是说说事件是一样的吗?事件和图片的链接表(EventPicture)? – Jack

2

您使用EF Code First,让我们来谈谈代码而不是表格。您可以通过只有一个图片类并将许多图片与会员,家庭等相关联来实现您的使用案例。

采取这种代码

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这样的“专用”服务器上。

+0

但是不把图片绑定到特定的成员和/或家庭限制我的解决方案?此外,为什么图片表会有会员和家庭的FK,这不会限制我每张图片吗? – Jack

+0

您可以将图片与家人或成员或两者关联,因此它不会限制您的解决方案。 – saintedlama