2013-08-02 4 views
1

J'ai un site Web en cours où les utilisateurs créent des messages dans un flux et peuvent avoir plusieurs flux. Leur profil affichera un flux par défaut de leur choix.Comment résolvez-vous un paradoxe de base de données relationnelle?

Les 3 tables de ce paradoxe sont "accounts", "profiles" et "feeds". Une entrée dans les profils contient des informations supplémentaires sur un utilisateur. Ceci est dans une table séparée, car il peut être modifié plus souvent, et de nombreuses requêtes utilisent la table des comptes sans avoir besoin de cette information.

Un champ dans les comptes (profil) doit référencer un profil. Je l'ai fait, au lieu d'avoir des comptes de référence de profils, car sinon un compte pourrait exister sans profil. Un profil existant sans compte serait le résultat d'un compte désactivé (à condition que l'utilisateur ait explicitement choisi de ne pas retirer son profil du site).

Un champ dans les profils (default_feed) doit référencer un flux. Cela peut être changé souvent, et n'est pas nécessaire pour la plupart des requêtes, donc cela semble un endroit sensible pour ces données.

Un champ dans les flux doit référencer un compte; tous les flux ont un créateur.

Vous pouvez déjà voir mon problème, mais je vais élaborer: Je ne peux pas créer de compte sans créer de profil, ce que je ne peux pas faire sans faire un flux, ce que je ne peux pas faire Doit-je abandonner la fonctionnalité des profils pour les comptes désactivés (ce qui ne serait pas une grosse affaire, mais j'aimerais savoir s'il existe un autre moyen), ou y a-t-il un truc raisonnable qui va me permettre de résoudre le caractère paradoxal de cette relation? EDIT: J'ai réalisé que je pouvais simplement définir le champ default_feed afin qu'il soit nul, et que l'application gère ce cas particulier (ce qui ne devrait jamais arriver car un flux est créé avec le compte) avec un "cet utilisateur n'a pas de flux par défaut" message. J'aimerais quand même savoir si j'ai manqué une solution plus créative.

Répondre

2

Un moyen simple de rompre la dépendance consiste à rendre default_feed dans le profil nullable.

  • Commencez par créer un profil avec l'alimentation par défaut à null
  • Créez le compte qui fait référence à ce profil.
  • Une fois le compte configuré, créez le flux par défaut avec le compte créé en tant que propriétaire.
+0

Juste une minute après ma modification. Cela semble être la solution parfaite. –

Questions connexes