Я разрабатываю приложение базы данных, в котором хранятся простые контактные данные (имя/фамилия и т. Д.), А также я должен хранить номера телефонов. Помимо телефонных номеров, я должен хранить то, за что они предназначены (мобильный, бизнес и т. Д.) И, возможно, дополнительный комментарий для каждого.Нормализовать или Денормализовать: сохранить контактные данные (номера телефонов) в отдельной таблице? Результаты поиска?
Мой первый подход состоял в нормализации и сохранении номеров телефонов в отдельной таблице, так что у меня есть мои «Контакты» и моя таблица «PhoneNumbers». В таблице номера телефонов будет выглядеть так:
Id int PK
ContactId int FK<->Contacts.Id
PhoneNumber nvarchar(22)
Description nvarchar(100)
Однако было бы сделать вещи намного проще и сохранить SQL Регистрация при извлечении, если я просто хранить эту информацию как часть записи каждого контакта (при условии, что я ограничиваю общее # номеров телефонов, которые можно сохранить, чтобы сказать 4 числа).
Однако, я в конечном итоге с «уродливой» структуры, как это:
PhoneNumber1 nvarchar(22)
Description1 nvarchar(100)
PhoneNumber2 nvarchar(22)
Description2 nvarchar(100)
и т.д. и т.п.
Это выглядит дилетантским для меня, но здесь преимущества я вижу:
1) В ASP.NET MVC я могу просто прикрепить входные текстовые поля к свойствам объекта LINQ, и я покончил с добавлением и обновлением записей.
2) Нет необходимости использовать SQL для получения информации.
К сожалению, я не очень хорошо разбираюсь в таких проблемах, как проблемы с шириной таблицы (я читал, что это может вызвать проблемы, если оно слишком велико или слишком много столбцов и что проблемы с производительностью возникают?), А затем это будет означать, что когда I поиск для номера телефона Мне нужно было бы посмотреть 4 поля вместо 1, если бы я сохранил его в отдельной таблице.
Мое приложение имеет около 80% поиска/поиска данных, поэтому эффективность поиска является важным фактором.
Я ценю вашу помощь в поиске правильного пути для этого. Разделить таблицу или сохранить все в одном? Спасибо!
Я поставил ответ ниже, но один дополнительный совет - увеличить первоначальную производительность и прочитать о создании соответствующих индексов в соответствии с вашей настройкой LINQ to SQL. Кроме того, мониторинг производительности БД является продолжающейся вещью, поскольку таблицы растут и, возможно, меняются функциональные возможности, лучше регулярно анализировать производительность БД, а не ждать, пока пользователи будут жаловаться, что их опыт страдает. – MadMurf
это отличное решение ... пока вам не понадобится 5 телефонных номеров вместо 4. Нормализовать для обслуживания. –