Нормализовать или денормализовать: хранить контактную информацию (номера телефонов) в отдельной таблице? Производительность поиска?

Я разрабатываю приложение базы данных, в котором хранится простая контактная информация (имя / фамилия и т. Д.), А также мне нужно хранить номера телефонов. Помимо телефонных номеров я должен хранить то, для чего они предназначены (мобильный, бизнес и т. Д.) И, возможно, дополнительный комментарий для каждого.

Мой первый подход состоял в том, чтобы нормализовать и сохранить телефонные номера в отдельной таблице, чтобы у меня были «контакты»; и мои «номера телефонов»; Таблица. Таблица 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 Join, необходимого для получения информации.

К сожалению, я не очень хорошо разбираюсь в таких вопросах, как проблемы с шириной таблицы (я читал, что это может вызвать проблемы, если он становится слишком большим / слишком большим количеством столбцов и возникают проблемы с производительностью?), А также это может означать, что когда яsearch номер телефона, который я должен искать в 4 полях вместо 1, если я храню его в отдельной таблице.

Мое приложение выполняет около 80% операций поиска / поиска данных, поэтому эффективность поиска является важным фактором.

Я ценю вашу помощь в поиске правильного способа сделать это. Отдельная таблица или все это в одном? Спасибо!

Ответы на вопрос(6)

Ваш ответ на вопрос