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

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

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

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

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

Очень признателен, если вы дадите мне знать свое мнение / предложения.

0
Eranga Dissanayaka 30 Авг 2011 в 12:17

3 ответа

Лучший ответ

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

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

2
Community 23 Май 2017 в 11:47

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

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

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

2
HLGEM 30 Авг 2011 в 13:22

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

1
Patrick Honorez 30 Авг 2011 в 08:57