J'ai rencontré ce problème dans toutes les applications que j'ai écrites. Je voudrais une réponse finale par consensus!Comment puis-je stocker des méthodes de contact (ou des données typées similaires avec différents champs) de manière normalisée?
Est-ce la façon la plus normalisée/efficace/appropriée pour stocker les méthodes de contact ou d'autres données le long de ce modèle dans une base de données?
Contact { PK ContactId, ... }
ContactContactMethod {PK FK ContactId, PK FK ContactMethodId, Key, Comments }
AddressContactMethod {PK FK ContactMethodId, Line1, Line2, City, State, Zip }
EmailContactMethod {PK FK ContactMethodId, EmailAddress }
InstantMessengerContactMethod {PK FK ContactMethodId, IMClient, IMAddress }
PhoneContactMethod {PK FK ContactMethodId, ... }
WebsiteContactMethod {PK FK ContactMethodId, ... }
OtherContactMethod {PK FK ContactMethodId, ... }
Dois-je envisager un champ Xml pour ContactMethodData
sur la table ContactContactMethod
à la place?
Quelque chose se sent mal à propos AddressContactMethod, EmailContactMethod, etc tous partageant la même unicité des clés primaires.
pensé aussi sur une clé, paire de valeurs pour les données de contact, mais ce serait encore plus d'une douleur à la requête que le champ Xml.
(Directives de conception: chaque contact peut avoir plus d'un ou aucun de chaque type de méthode de contact, chacun avec une "clé" non unique comme "maison, travail, voiture rouge, etc" et commentaires mais aucun autre éléments de données entre les types)
Cela m'intéresse. Il semble que vous ayez un design décent, cependant, il couvre tous les cas que je peux penser à partir de vos lignes directrices de conception. Je suis d'accord avec votre commentaire sur XML et les données clé/valeur - celles-ci commencent à aller à l'encontre de l'objectif de la base de données. –
Juste curieux - pourquoi avez-vous le PK FK ContactMethodId sur tous les Adresse/Email/etc. les tables? Y aurait-il une table de base de ContactMethod à laquelle ils sont tous liés, ou pourraient-ils se suffire à eux-mêmes? –
@Andy ils sont liés à la table ContactContactMethod, qui sera probablement celui d'attribuer l'identité –