Организация базы данных изображений - PullRequest
1 голос
/ 12 ноября 2011

Мне любопытно, как мне организовать хранение изображений в моем приложении.Они будут где-то храниться на диске, а путь / URL-адрес хранятся в базе данных, но мое приложение стало сложным, и организация изображений оставляет меня озадаченным.Я использую технологию ASP.NET MVC 3 + EF 4.1 Code First (которая оказывается сложной при сложных отношениях).

Это приложение на основе семейства, поэтому есть таблица Family, таблица Memberи таблицу FamilyMember для ссылки на два.Также есть таблица FamilyEvent и MemberEvent для отслеживания событий в жизни семьи или члена.

Варианты использования

Участник может загружать несколько изображений профиля (возможно, для добавления в альбом «профиля»?)

Участник может загружать«семейные» фотографии, которые необходимо прикрепить к объекту «Семейство» и поместить в альбом определенного типа для семьи.

Участник может добавить событие участника и прикрепить несколько изображений кСобытие members.

Участник может добавить семейное событие и прикрепить несколько изображений к семейному событию.

Это базовые варианты использования.

Мои мысли

Базовая таблица "Picture" с идентификатором, описанием и, возможно, идентификатором пользователя загрузчика.

Таблица MemberProfilePicture с идентификатором,pictureId, memberId и т. д. *

Таблица MemberEventPicture с идентификатором, pictureId, [идентификатор участника?], membereventid и т. д. *

Таблица FamilyEventPicture с идентификатором, pictureId, [familyId?], familyeventid и т. д. *

Это позволит семье или члену по существу "связать" фотографию позже с другим профилем / событием участника / или семейным событием.

Myвопрос

Это правильно, или я слишком усложняю это?Я не вижу другого способа, кроме нескольких таблиц, представлять изображения для разных вещей, которые все ссылаются на базовую таблицу изображений.Кто-нибудь может дать какие-либо предложения относительно того, как я могу улучшить эту модель?Хотя я понимаю, что может быть много определений, которые нужно исправить, я ищу решения, касающиеся того, как организовать аспект отображения моего приложения, или улучшения того, что у меня уже есть.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2011

Вы используете EF Code Сначала давайте поговорим о кодах, а не о таблицах. Вы можете реализовать свои варианты использования, имея только один класс Picture и связав множество изображений с Member, Family и т. Д.

Принимая этот код

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.

1 голос
/ 12 ноября 2011

Что бы я сделал, это три таблицы.

Таблица 'picture', в которой хранится уникальный идентификатор для каждого изображения и местоположения. Таблица «Профиль», в которой есть ваши данные о профиле. Третья таблица «связывания» состоит из pictureId и profileId

Если я хочу связать изображение A с профилем X, я просто добавляю "A, X" к таблице ссылок. То же самое для событий или чего-то еще. Если будут отношения многие ко многим, это самый чистый путь (я предполагаю, что одна и та же картинка может быть в нескольких профилях).

Надеюсь, я правильно понял вашу проблему.

...