2010-02-19 5 views
4

Je développe une application de gestionnaire de contacts à l'aide de SQL Server 2008 (base de données basée sur les services). La plupart des contacts ont plusieurs e-mails ou plusieurs numéros de téléphone. Y a-t-il un moyen de stocker un tableau en tant que type de données dans SQL Server? Ou est-ce que quelqu'un a une alternative à cette façon?Banque de stockage dans SQL Server 2008

+3

ce que cela a à voir avec WPF? –

Répondre

12

Vous devez créer des tables distinctes, avec une ligne par numéro de contact ou adresse e-mail.

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 

Cela vous permettra de modifier les numéros individuels/e-mails, les supprimer, les ajouter, etc., sans avoir besoin d'un programme externe de déballer un tableau. Mais si vous voulez vraiment le stocker dénormalisé, vous pouvez transformer le tableau en une chaîne délimitée. . mettre un délimiteur entre chaque adresse e-mail (avec la magie appropriée pour s'assurer qu'une adresse ne contient pas déjà le délimiteur) puis le diviser au retour.

+0

Les points-virgules fonctionnent bien en tant que délimiteur de courrier électronique. En fait, certaines bibliothèques prennent automatiquement en charge les adresses délimitées par des points-virgules. –

3

Il n'y a pas de type tableau dans SQL.

Vous devez créer une table de numéros de téléphone et stocker un numéro de téléphone par ligne et utiliser une clé étrangère (appelée, par exemple, person_id) pour faire référence à la table de personnes.

2

Une autre option que vous pouvez utiliser est de stocker les informations de contact en tant que document XML dans un champ de type XML dans votre table. Je ferais seulement ceci si je n'essaye pas de rechercher des personnes basées sur une certaine partie de cette information de contact. Par exemple, si vous pensez que vous pourriez trouver intéressant de trouver tous vos contacts qui ont des numéros de téléphone avec un indicatif régional spécifique, vous voudrez en faire un tableau séparé et le relier au lieu de le stocker de cette façon. Je sais que vous pouvez réellement interroger le XML dans SQL Server 2008, mais cela dépend vraiment du nombre d'enregistrements que vous allez avoir dans votre liste de contacts, car l'analyse de tout ce XML sur un grand nombre de données sera très lente comparée avoir des tables séparées.

+0

J'utilise beaucoup les colonnes XML - et elles * peuvent * être une option. Ma recommandation principale cependant, est de savoir si les données doivent être * jamais * interrogées ou modifiées en dehors de l'entité XML-as-an, puis de la promouvoir dans une colonne avec DRI. – user2864740

0

Vous pouvez utiliser une variable de table, pour l'utiliser, vous devez utiliser une table de création DDL, mais vous devez d'abord écrire at (@). Avec cela, vous avez un tableau .... mais vous ne pouvez pas stocker cela sur une table, car une table est un tableau lui-même. Je vous ai vraiment besoin d'avoir une structure de données à l'intérieur de votre table, vous devriez utiliser un XML. Comme je comprends depuis SQL Server 2000 a plusieurs fonctionnalités pour travailler avec XML. Peut-être que si vous pouvez me dire plus de détails de vos raisons de le faire ... Je peux vous donner plus d'idées!

J'espère que mon answear peut vous aider à