J'ai retardé le développement de cette partie de mon application pour la seule raison que je veux faire cela de façon circulaire mais que je ressens une mauvaise idée de ce que mes professeurs me rappellent à l'école.Relations de base de données circulaires. Bon, mauvais, exceptions?
J'ai une conception d'un système de commande, sans tenir compte du tout ce qui ne concerne pas cet exemple, je suis parti avec:
- CreditCard
- client
- Commander
Je le veux pour que,
- Cust omers peuvent avoir des cartes de crédit (0-n)
- Les clients ont des commandes (1-n)
- Les commandes ont un client (1-1)
- les commandes ont une carte de crédit (1-1)
- crédit les cartes peuvent avoir un client (1-1) (ids uniques afin que nous puissions ignorer l'unicité du numéro de cc, mari/femme peut partager des instances cc ect)
Fondamentalement, la dernière partie est où la question apparaît, parfois crédit les cartes sont refusées et elles souhaitent en utiliser une autre, cela nécessite de mettre à jour leur carte 'actuelle' mais cela ne peut que changer la carte utilisée pour l'ordre du chapeau, pas les autres commandes que le client peut avoir sur le disque.
Effectivement ceci crée une conception circulaire entre les trois tables.
solutions possibles: Soit
Créer la conception circulaire, donner des références:
- cc ref à l'ordre,
- ref client cc
- ref client pour commander
ou
- ref client cc
- ref client commander
- créer une nouvelle table qui fait référence à tous les trois ids de table et mettre unique sur l'ordre de sorte qu'une seule cc peut être courant à cet ordre à tout moment
Essentiellement les deux modélisent le même design mais traduisent différemment, je préfère cette dernière option à ce moment parce qu'elle semble moins circulaire et plus centrale. (Si cela fait même sens)
Mes questions sont,
- si tout sont les avantages et les inconvénients de chacun?
- Quels sont les pièges des relations/dépendances circulaires?
- Est-ce une exception valide à la règle?
- Y a-t-il une raison pour laquelle je devrais choisir le premier sur le dernier?
Merci et faites-moi savoir s'il y a quelque chose dont vous avez besoin clarifié/expliqué.
--update/Edit--
J'ai remarqué une erreur dans les exigences je. Fondamentalement laissé tomber la balle en essayant de simplifier les choses pour SO. Il y a une autre table pour Payments qui ajoute une autre couche. La capture, les commandes peuvent avoir plusieurs paiements, avec la possibilité d'utiliser des cartes de crédit différentes. (Si vous voulez vraiment savoir même d'autres formes de paiement). En déclarant cela ici parce que je pense que le problème sous-jacent est toujours le même et cela ne fait qu'ajouter vraiment une autre couche de complexité.
+1. bonne, réponse claire. –
Merci, pour clarifier, vous voulez stocker des détails cc avec la commande chez TOS dans une nouvelle table, en le stockant effectivement de manière redondante (ce n'est pas si mal dans ce cas)? Ou vouliez-vous simplement garder la référence à la table CC? – Louis
Pour clarifier cela, il doit être dans une nouvelle table indépendamment de la table de commande ne peut pas être modifié pour contenir des détails de CC car nous traitons également avec d'autres types de paiement. – Louis