Схема БД, таблица с множеством столбцов

Я разрабатываю схему для системы управления обучающимися.

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

Проблема, которая у меня есть, когда вся эта информация представлена ​​в одной таблице, количество столбцов превышает 70 столбцов.

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

Я хотел бы знать, является ли это рекомендуемым подходом или нет. По моему мнению, отношения 1:1 будут представлять собой базу данных, которая является более нормализованной. Но если бы я этого не сделал, это привело бы к огромной горизонтальной таблице в качестве моей таблицы LearnerDetails.

Высоко ценю, если вы могли бы дать мне знать ваши мнения / предложения.

3 ответа

Решение

В большинстве столбцов таблицы нет ничего неправильного, если у вас есть 5NF или, по крайней мере, 3NF.

Но есть немало примеров, когда вертикальное разбиение (1::1) имеет смысл - взгляните на аналогичный вопрос.

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

Адрес, как правило, НЕ 1-1 отношения с человеком. Да, у большинства людей есть только один, но это не относится ко всем. Студенты, например, иногда живут неполный рабочий день с каждым из своих разведенных родителей. Я хотел бы предложить, чтобы адрес был выделен. Если вы храните телефонные номера, эти два, как правило, не находятся в отношении 1-1. У вас может быть телефон для звонков, номер телефона и номер домашнего телефона (стационарный). Все, что имеет хорошую возможность в конечном итоге вступить в отношения один-много, должно быть отделено с самого начала.

Если вы разделяете таблицы и хотите навязать взаимно-однозначное отношение, yuo может либо использовать идентификатор из родительской таблицы в качестве PK в дочерней таблице, либо иметь другой Pk для таблицы и установить уникальный индекс для поля FK. Не устанавливайте взаимную связь один-к-одному без способа принудительного применения в базе данных.

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

Другие вопросы по тегам