2 таблицы:
- представления
- загрузки
Идентичная структура:
item_id, user_id, время
Я должен быть взволнован?
Я не думаю, что существует проблема, как таковая.
При проектировании БД существует множество различных параметров, и некоторые (например, производительность) могут иметь приоритет.
Вот пример: даже если структуры (и, я полагаю, индексирование) идентичны, возможно, "представления" имеют больше записей и к ним будут обращаться чаще. Уже одно это может быть хорошей причиной не нагружать его записями из загрузок.
Кроме того, тот факт, что они идентичны сейчас, не означает, что они будут идентичны в будущем: представления и загрузки, в конце концов, разные, так что рано или поздно одно или оба могут обзавестись дополнительным полем или двумя.
С точки зрения моделирования E/R я не вижу в этом проблемы, пока они представляют две семантически разные сущности.
С точки зрения реализации, это зависит от того, как вы планируете запрашивать эти данные:
При рассмотрении вопроса о том, стоит ли объединять их в одну таблицу, вам также следует принять во внимание другие факторы, такие как:
Крис Дейт и Дэйв Макговеран формализовали "Принцип ортогонального проектирования". Грубо говоря, он означает, что при проектировании базы данных следует избегать возможности допускать один и тот же кортеж в двух разных реляторах. Цель состоит в том, чтобы избежать определенных типов избыточности и двусмысленности, которые могут возникнуть в результате.
Возможно, это не всегда практически осуществимо, и не всегда ясно, когда именно нарушается принцип. Однако я считаю, что это хорошее руководящее правило, хотя бы потому, что оно позволяет избежать проблемы дублирования логики в коде доступа к данным или ограничениях, т.е. это хороший DRY принцип. Избегайте наличия таблиц с потенциально пересекающимися значениями, если нет ограничений базы данных, которые предотвращают дублирование между ними.
Это зависит от контекста - что такое View
и что такое Download
? Подразумевает ли Download
View
(как еще это было бы загружено)?
Возможно , что у вас есть четко определенные, отдельные концепции, но это запах, который я хотел бы исследовать дальше. Кажется вероятным, что просмотр и загрузка каким-то образом связаны, но ваша модель ничего не показывает.
Вы хотите сказать, что обе таблицы имеют первичный ключ item_id? В этом случае поля имеют одно и то же имя, но не имеют одинакового значения. Один - это view_id, а другой - download_id. Вы должны соответственно переименовывать свои поля, чтобы избежать такого рода недоразумений.
Эти таблицы одинаковы СЕЙЧАС, но в будущем схема может измениться. Если они представляют две разные концепции, то хорошо бы держать их отдельно. Что если вы хотите иметь внешний ключ из другой таблицы к таблице загрузок, но не к таблице представлений, если бы они были одной и той же таблицей, вы не смогли бы этого сделать.
Я думаю, что ответ должен быть "это зависит". Как заметил кто-то другой, если схема одной или обеих таблиц, скорее всего, будет меняться, то нет. Я могу придумать и другие случаи (упрощение модели безопасности путем предоставления доступа приложениям/пользователям к одной или другой таблице).
Сказав это, я работаю с унаследованной БД, где это является проблемой. У нас есть несколько одинаковых таблиц для счетов-фактур клиентов. Данные фактически перемещаются между ними на разных этапах жизненного цикла обработки. Это создает сложную путаницу при попытке доступа к данным. Эта проблема была бы легко решена с помощью флага состояния в исходной схеме, но теперь у нас есть более 20 лет кода, написанного для многотабличной версии.
Короткий ответ: зависит от того, почему это одна и та же схема :).