Мне нужно создать базу данных с тегами изображений для школьного проекта.База данных для тегов изображений
Сайт будет иметь Изображения, Теги и пользователи. Evey Image получает теги с одним или несколькими тегами (такие вещи как: лето, пляж, Tyoko и т. Д.), Но мне также нужно отслеживать историю добавления и удаления тегов.
Решение, которое я придумал было иметь таблицу TagHistory так:
public class TagHistory
{
public virtual int TagHistoryId { get; set; }
public virtual DateTime Date { get; set; }
public virtual User TaggedBy{ get; set; }
public virtual Image Image { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
Так текущие метки на изображении было бы просто изображения последняя запись TagHistory.
Это вызывает проблемы, однако, для поиска, потому что только последние записи в TagHistory подсчитывают, что мне сначала нужно получить все текущие TagHistories для каждого изображения и , затем заготовьте фильтрацию. Это то, что я придумал для поиска всех изображений, содержащих конкретный тег:
var curTagHis = from tagHistory in ctx.TagHistories
group tagHistory by tagHistory.Image
into groups
select groups.OrderByDescending(th => th.Date).FirstOrDefault();
var images = from tagHistory in curTagHis
where tagHistory.Tags.Any(t => t.TagID == tag.TagID)
select tagHistory.Image;
И я полагаю, что это будет только хуже, как я добавляю больше возможностей.
Я думал, что, возможно, мне нужно придумать дизайн, который разбивает текущие теги изображений, а также историю тегов на отдельные объекты. Будет ли это хорошим направлением, или есть ли другой способ сделать это? Я предполагаю, что это уже проблема.