Сохранить массив в SQL Server 2008

#c# #sql-server-2008

#c# #sql-server-2008

Вопрос:

Я разрабатываю приложение contact manager с использованием SQL Server 2008 (база данных на основе сервиса). У большинства контактов есть несколько электронных писем или несколько телефонных номеров. Итак, есть ли способ сохранить массив как тип данных в SQL Server? Или у кого-нибудь есть альтернатива этому способу?

Комментарии:

1. какое это имеет отношение к wpf?

Ответ №1:

Вы захотите создать отдельные таблицы со строкой для каждого контактного номера или адреса электронной почты.

 CREATE TABLE Contacts (contactId int, name varchar(128), etc, etc
CREATE TABLE ContactEmail (contactId int, emailAddress varchar(128), etc
CREATE TABLE ContactPhone (contactId int, phoneNumber varchar(128), etc
  

Это позволит вам изменять отдельные номера / электронные письма, удалять их, добавлять и т.д., не требуя внешней программы для распаковки массива.

Но если вы действительно хотите сохранить его в денормализованном виде, вы могли бы преобразовать массив в строку с разделителями. . поместите разделитель между каждым адресом электронной почты (с соответствующей магией, чтобы убедиться, что адрес еще не содержит разделителя), затем разделите его на обратном пути.

Комментарии:

1. Точки с запятой хорошо работают в качестве разделителя электронной почты. Фактически, некоторые библиотеки автоматически поддерживают адреса, разделенные точкой с запятой.

Ответ №2:

Нет, в SQL нет типа массива.

Вы должны создать таблицу phonenumbers и сохранить по одному номеру телефона для каждой строки использования и использовать внешний ключ (называемый, например, person_id) для ссылки на таблицу person.

Ответ №3:

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

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

Я знаю, что вы действительно можете запросить XML в SQL Server 2008, но это действительно зависит от того, сколько записей у вас будет в вашем списке контактов, поскольку разбор всего этого XML для большого количества данных будет очень медленным по сравнению с использованием отдельных таблиц.

Комментарии:

1. Я часто использую столбцы XML — и они могут быть одним из вариантов. Однако моя главная рекомендация заключается в том, что если данные должны когда-либо запрашиваться или изменяться вне XML-как-объекта, то переместите их в столбец с помощью DRI.

Ответ №4:

Вы можете использовать табличную переменную, для этого вам следует использовать таблицу создания DDL, но сначала вам нужно написать at (@). При этом у вас есть массив …. но вы НЕ МОЖЕТЕ сохранить это в таблице, потому что таблица сама по себе является массивом. Если вам действительно нужно иметь структуру данных внутри вашей таблицы, вы должны использовать XML. Насколько я понимаю, начиная с SQL Server 2000, есть несколько функций для работы с XML.

Возможно, если вы сможете рассказать мне более подробно о ваших причинах для этого… Я могу предложить вам еще больше идей!

Я надеюсь, что мой answear сможет вам помочь