1

내 응용 프로그램에서 이미지 저장을 어떻게 구성해야하는지 궁금합니다. 그것들은 어딘가에 디스크에 저장 될 것이고, 경로/URL은 데이터베이스에 저장 될 것입니다.하지만 어플리케이션이 복잡해지고 이미지 조직이 나를 당황스럽게 만듭니다. 내가 사용하고있는 기술은 ASP.NET MVC 3 + EF 4.1 코드 우선 (복잡한 관계로 인해 어려움을 겪고 있음)입니다.이미지 데이터베이스 구성

이것은 가족 기반 응용 프로그램이므로 Family 테이블, Member 테이블 및 FamilyMember 테이블이 두 개에 연결됩니다. 또한 FamilyEvent 및 MemberEvent 테이블을 사용하여 가족 또는 구성원의 이벤트를 추적 할 수 있습니다.

사용 사례

회원국 (아마도 "프로필"앨범에 넣어하는 방법?) 회원은 "가족"사진을 업로드 할 수 있습니다

가 부착되는 다수의 프로필 사진을 업로드 할 수 있습니다 가족 개체, 그리고 가족을위한 앨범의 일부 유형에 넣습니다.

회원은 회원 이벤트를 추가하고 개의 복수 이미지를 회원 이벤트에 첨부 할 수 있습니다.

회원은 가족 이벤트를 추가하고 개의 복수 이미지를 가족 이벤트에 첨부 할 수 있습니다.

다음은 기본 사용 사례입니다.

내 생각 ID, 설명, 업 로더의 아마 사용자 ID와

자료 "화상"테이블. ID, pictureId, MEMBERID 등으로

MemberProfilePicture 테이블 ... ID, pictureId [회원 ID?] membereventid 등으로

MemberEventPicture 테이블 ... ID, pictureId와

FamilyEventPicture 테이블 , [familyId?], familyeventid 등 ...

이렇게하면 가족이나 회원이 사진을 나중에 다른 프로필 사진/회원 이벤트/또는 가족 행사에 "링크"할 수 있습니다.

내 질문

이 정확, 또는 내가 지나치게 복잡이 무엇입니까? 필자는 기본 그림 테이블을 참조하는 서로 다른 여러 가지 이미지를 나타 내기 위해 여러 테이블 이외의 다른 방법을 보지 못합니다. 누구든지이 모델을 개선 할 수있는 방법에 대한 제안을 할 수 있습니까? 수정해야 할 정의가 많다는 것을 알고 있지만, 이미 내 응용 프로그램의 이미징 측면을 구성하는 방법이나 이미 가지고있는 기능을 개선하는 방법에 대한 해결책을 찾고 있습니다.

답변

1

나는 3 개의 테이블을 가지고 있습니다.

각 그림 및 위치에 대한 고유 ID를 저장하는 '그림'테이블. 프로필에 대한 귀하의 dtails가있는 '프로필'테이블. pictureId와 profileId로 구성된 세 번째 '연결'테이블

그림 A를 프로필 X에 연결하려면 연결 테이블에 "A, X"를 추가하면됩니다. 사건이나 뭐든간에 똑같이.many-to-many 관계가있을 경우 이것은 가장 깨끗한 방법입니다 (동일한 그림이 여러 개의 프로파일에있을 수 있다고 가정합니다).

희망 귀하의 문제를 올바르게 이해했습니다.

+0

그래서 본질적으로 제가 제안한 것은 갈 길입니다. 그림 테이블, ProfilePicture, MemberPicture, FamilyEventPicture 테이블 등 ... – Jack

+0

하나 이상의 XXXXXPicture 테이블이 필요하지 않습니다. 하나의 링커가 필요하면 종류의 'enum'을 넣을 수 있습니다. – Haedrian

+0

당신은 어떻게 그걸 의미합니까? 당신은 그림 A와 프로필 X를 링크 테이블 (ProfilePicture)과 연결할 수 있다고 말합니다. 사건을 말할 때 그게 같지 않니? 이벤트와 그림을 연결하는 테이블 (EventPicture)? – Jack

2

EF 코드 사용하기 먼저 테이블이 아닌 코드를 말하자. Picture 클래스를 하나만 사용하고 회원, 가족 등과 많은 그림을 연결하여 사용 사례를 실현할 수 있습니다. 이 코드

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; } 
} 

촬영

이 외래 키 Family_Id 및 MEMBER_ID을 갖는 그림 테이블로 3 표, 가족, 회원, 그림을 생성합니다. 이 모델은 회원, 가족 또는 둘 모두와 한 장의 사진을 연관시킵니다.

확장 성 관점에서 필자는 이미지 바이너리를 데이터베이스에 저장하고 ORM을 사용하여 바이너리에 액세스하지 않도록 할 것입니다. 더 나은 아이디어는 그림을 파일 시스템에 저장하거나 MongoDB GridFS와 같은 "특수화 된"서버에 저장하는 것입니다.

+0

그러나 사진을 특정 회원 및/또는 가족에게 묶어 내 솔루션을 제한하지 않습니까? 또한, 왜 Picture Table은 FK to Member와 Family를 가지고 있는데, 각각 하나의 그림으로 제한하지 않습니까? – Jack

+0

그림을 가족이나 구성원 또는 둘 모두와 연결할 수 있으므로 솔루션이 제한되지 않습니다. – saintedlama