2009-06-03 7 views
1

J'ai 2 tables: une table d'appartenance et une table de liste de diffusion.Consolidation de données à partir de colonnes de tables différentes Problème de conception

[Members] 
Username 
Password 
EmailAddress 
MailingListOptIn [bit] 
Planes [bit] 
Boats [bit] 
Cars [bit] 
  • Les colonnes de fruits sont les préférences des utilisateurs.

et

[MailingList] 
EmailAddress 
MailingListOptIn 
  • Un mailinglist'er peut choisir de recevoir des bulletins d'information mais peuvent ne pas être nécessairement membre

Je voudrais commencer à stocker les préférences pour mailinglist'ers. Ma question est quelle serait la meilleure façon de consolider ces données de 2 tables?

J'ai testé la table des membres en ne stockant que des informations sur les membres, telles que le nom d'utilisateur, le mot de passe, etc. et une table de profils séparée stockant l'adresse e-mail et les préférences. Les membres et les préférences de liste de diffusion peuvent être stockés dans cette table de profil, mais je ne peux pas ajouter une contrainte FK, je ne peux donc pas ajouter un mailinglist.

Donc maintenant mes options sont:

  1. bâton avec les 2 tables mais introduisons en double « préférences » colonnes sur la table de listes de diffusion.
  2. Utiliser le tableau des profils individuels et l'intégrité référentielle des vis.

Ou peut-être y at-il un autre meilleur moyen?

Répondre

0

je le ferais comme ceci:

i) une table « personne » avec l'adresse e-mail comme clé

ii) une table « membre », seuls les membres auront un dossier dans ce tableau, lié à « personne » par emailaddress (également clé dans ce tableau)

iii) une « liste de diffusion » table, ayant un identifiant unique pour la liste de diffusion, la description et peut-être d'autres domaines

iv) un « mailingListSubscriber » table (une relation) avec l'adresse e-mail du pe rson et l'identifiant de la liste de diffusion.

Désolé d'ajouter des tables mais je pense que c'est le réglage minimal pour une normalisation adéquate compte tenu des exigences.

1
CREATE TABLE Profiles (
Username 
Password 
EmailAddress 
MailingListOptIn [bit] 
Planes [bit] 
Boats [bit] 
Cars [bit] 
); 

CREATE VIEW Members AS 
    SELECT * FROM Profiles WHERE Username IS NOT NULL 
    WITH CHECK OPTION; 

CREATE VIEW MailingList AS 
    SELECT EmailAddress, MailingListOptIn, Planes, Boats, Cars 
    FROM Profiles WHERE Username IS NULL 
    WITH CHECK OPTION;