2011-08-27 5 views
1

Je conçois la base de données pour l'annuaire de base de Web (ASP.NET) - logiciel de gestionnaire de contact.
Chaque contact peut a différents types de téléphone .. (Accueil, travail, Mobile, etc ...) ici est ma conception de base de données: enter image description here
type de téléphone contient par exemple:Conception de base de données de répertoire

  • Accueil
  • Travail
  • Urgence ou tout ce que l'utilisateur veut.


M Est-ce bien la conception?
Je pense que je vais avoir un problème avec cette conception que je ne peux pas afficher les contacts avec tous leurs numéros (je veux dire chaque contact avec tous ses numéros dans une rangée et non par numéro de contact). Quelle est votre suggestion? Je dois afficher tous les contacts avec tous les types de téléphone Dans une grille. Je pense que je vais avoir un problème avec la conception actuelle.

+1

Vous seriez en mesure de le faire avec une procédure stockée (légèrement en désordre). La conception elle-même est très propre, et je ne peux pas penser à un design où vous seriez en mesure d'organiser tous les numéros de téléphone dans un modèle de grille avec une simple requête SQL sans connaître tous les PhoneType à l'avance. –

+0

Avez-vous fini par comprendre cela? – bryanmac

Répondre

0

Je pense que je vais avoir problème avec cette conception que je ne peux pas afficher contacts avec tous leurs numéros dans une grille à l'utilisateur. Quelle est votre suggestion ?

Vous pouvez le faire avec une requête simple.

select c.contactid, c.contactname, 
     pt.typetitle, 
     pn.phoneno 
from contact c 
inner join phonenumber pn on pn.contactid = c.contactid 
inner join phonetype pt on pt.phonetypeid = pn.phonetype 

Pour l'intégrité des données, vous allez avoir besoin de quelques contraintes uniques en plus de vos contraintes de clé primaire. Si j'étais vous, je considérerais les contraintes UNIQUE sur ContactName, TypeTitle et la paire (ContactID, PhoneType). En fait, la paire (ContactID, PhoneType) est probablement une meilleure clé primaire que PhoneID; envisager de supprimer PhoneID entièrement.

+0

J'ai essayé votre requête. Par exemple, si le contact avec le nom John a trois numéros, votre requête renvoie trois lignes, mais je dois afficher les téléphones de contact dans une rangée. J'ai édité la dernière rangée de ma question Je pense que c'est plus clair maintenant – Shahin

+0

Vous pouvez utiliser PIVOT, mais puisque vos utilisateurs peuvent ajouter les catégories qu'ils aiment, vous ne pouvez pas garantir que vous allez produire une ligne qui ne nécessitera pas de défilement horizontal. Vos vies deviennent plus faciles si vous pouvez changer cette condition. –