Схема БД, таблица с множеством столбцов
Я разрабатываю схему для системы управления обучающимися.
В настоящее время у меня есть таблица LearnerDetails, в которой хранятся следующие категории информации. - данные учетной записи пользователя для входа в систему - контактные данные и домашний адрес - информация, касающаяся места жительства учащегося, включая информацию о гражданстве, текущие данные о визе, чтобы остаться в Великобритании и т. д. - информация о текущем состоянии пособия для учащегося - информация о текущем статусе занятости учащегося
Проблема, которая у меня есть, когда вся эта информация представлена в одной таблице, количество столбцов превышает 70 столбцов.
Одна вещь, которую я могу сделать, это то, что я могу разделить информацию в разных таблицах, представляющих упомянутые выше категории, и связать эти таблицы с их родительской таблицей LearnerDetails как отношения 1:1.
Я хотел бы знать, является ли это рекомендуемым подходом или нет. По моему мнению, отношения 1:1 будут представлять собой базу данных, которая является более нормализованной. Но если бы я этого не сделал, это привело бы к огромной горизонтальной таблице в качестве моей таблицы LearnerDetails.
Высоко ценю, если вы могли бы дать мне знать ваши мнения / предложения.
3 ответа
В большинстве столбцов таблицы нет ничего неправильного, если у вас есть 5NF или, по крайней мере, 3NF.
Но есть немало примеров, когда вертикальное разбиение (1::1) имеет смысл - взгляните на аналогичный вопрос.
Насколько широки колонны? Если ваша запись шире, чем размер страницы, то наличие одной широкой таблицы - это проблема производительности, ожидающая своего появления.
Адрес, как правило, НЕ 1-1 отношения с человеком. Да, у большинства людей есть только один, но это не относится ко всем. Студенты, например, иногда живут неполный рабочий день с каждым из своих разведенных родителей. Я хотел бы предложить, чтобы адрес был выделен. Если вы храните телефонные номера, эти два, как правило, не находятся в отношении 1-1. У вас может быть телефон для звонков, номер телефона и номер домашнего телефона (стационарный). Все, что имеет хорошую возможность в конечном итоге вступить в отношения один-много, должно быть отделено с самого начала.
Если вы разделяете таблицы и хотите навязать взаимно-однозначное отношение, yuo может либо использовать идентификатор из родительской таблицы в качестве PK в дочерней таблице, либо иметь другой Pk для таблицы и установить уникальный индекс для поля FK. Не устанавливайте взаимную связь один-к-одному без способа принудительного применения в базе данных.
Нет проблем с тем, чтобы иметь 70 или более столбцов, если это требуется для нормализации. Вы не упомянули, какие rdbms вы используете, но большинство поддерживают не менее 255 полей.