У меня есть сценарий разработки таблиц, и я, не являясь администратором базы данных, хотел бы получить более масштабные мнения.
Скажем, вас просят записать информацию о домах для зоны метро, начиная с небольшого квартала (200 домов), но в конечном итоге вырастая до 5000000+ домов.
Вам необходимо хранить базовую информацию: ID # (уникальный лот №, который мы можем использовать в качестве уникального индекса), Addr, City, State, Zip. Прекрасный, простой стол справится с этим.
Но каждый год вас попросят записать дополнительную информацию обо всех домах - и КАКАЯ информация будет меняться каждый год. Так, например, в первый год вас просят записать фамилию владельца и квадратные метры. На второй год вас просят сохранить фамилию, но выбросить квадратные метры и вместо этого начать собирать имена владельцев.
Наконец - каждый год количество дополнительных столбцов будет меняться. Можно начать с 2 дополнительных столбцов, затем перейти к 6 в следующем году, а затем вернуться к 2.
Таким образом, один табличный подход состоит в том, чтобы попытаться добавить пользовательскую информацию в виде столбцов в домашних таблицах, чтобы была только одна таблица.
Но у меня есть ситуация, когда кто-то выложил таблицы для этого как:
Столбцы "Таблица дома": ID, Адр, Город, Штат, Zip - по одному ряду на дом
ID Addr City State Zip
-------------------------------------------
1 10 Maple Street Boston MA 11203
2 144 South Street Chelmsford MA 11304
3 1 Main Avenue Lowell MA 11280
Столбцы «Пользовательская таблица данных»: ID, Имя, Значение - с таблицей, похожей на:
ID Name Value
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 Square Footage 1200
2 Square Footage 1930
3 Square Footage
Таким образом, есть несколько строк для каждой отдельной записи дома. Каждый год, когда необязательная информация требует изменений, эта таблица буквально перестраивается, поэтому в следующем году она может выглядеть так:
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 First Name John
2 First Name Harry
3 First Name Jim
В конце концов вы набираете 100 000 рядов домов И за год появляется 10 дополнительных частей информации; вторая таблица теперь содержит 1 000 000 строк информации, многие из которых содержат избыточную (описание) информацию. В целом требования к базе данных состоят в том, что людям потребуется получать информацию о строках дома + соответствующие значения настраиваемых полей тысячи раз в день.
Поэтому мой вопрос: будет ли это плохой (или ужасной) практикой вместо этого:
A) Разложите таблицу домов с предположением макс. Числа пользовательских столбцов (называемых, возможно, от «1» до «10») и вставьте эти пользовательские значения прямо в ряды домов.
ИЛИ
Б) Храните пользовательскую информацию в домашней таблице, но каждый год, когда меняются требования, перестраивайте домашнюю таблицу только с количеством столбцов, необходимых для пользовательской информации, с мыслью, что требования могут сойти с ума, и вы никогда не узнаете, сколько максимум дополнительные поля могут быть запрошены?
Спасибо, надеюсь, это имеет смысл!