наилучший подход к проектированию базы данных, если таблицы имеют одинаковые столбцы?

#database

#База данных

Вопрос:

Мой вопрос просто. Я могу объяснить с помощью изображения. Я создам базу данных, и это ВСЕ таблицы базы данных с одинаковыми столбцами (IsDeleted, isActive, CreatedDate, UpdateDate, CreatedUserId и т.д.) Каков наилучший подход к разработке этой базы данных? Должен ли я, как в первой таблице, определять, что все таблицы имеют одинаковые столбцы, или как во второй, что ВСЕ таблицы связаны с базовой таблицей?

просто пример введите описание изображения здесь

Ответ №1:

В вашем случае больше подходит первый подход.

Комментарии:

1. Вы должны сохранить все поля, принадлежащие пользователю, в таблице user.

Ответ №2:

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

Ответ №3:

В общем, вы должны сохранять все поля, которые принадлежат User в User таблице, за несколькими исключениями:

  • необязательность; если есть набор полей, которые применяются только к подмножеству пользователей, у вас может получиться таблица «один к одному», которая отделена от User, поскольку она не будет полезна для большинства пользователей. Например, если у вас была Employee таблица, содержащая сведения, применимые только к менеджерам, вы могли бы разделить Manager таблицу только с информацией, относящейся к этому менеджеру.

  • удобочитаемость при наличии очень большого количества полей, которые являются взаимно однозначными с User : если это вызывает беспокойство, вы могли бы разделить User на несколько таблиц, каждая из которых имеет дело с одним предметом о пользователе, например, контактной информацией пользователя, платежной информацией пользователя и т.д.

  • производительность, например, ваша производительность снизилась, потому что вам нужно постоянно запускать какое-либо обновление, которое блокирует всю User таблицу для доступа к одному или двум значениям в этой таблице. В этом случае вы могли бы разбить User на несколько таблиц, чтобы все это не блокировалось при каждом запуске.