Question

Je développe actuellement une petite relation client et de gestion de la facture pour mon client. Et j'ai couru dans quelques petits problèmes que je voudrais ne pas discuter.

Quelle est la meilleure pratique autour des commandes, des clients et des produits. Au cas où mon client est en mesure de supprimer les commandes, les clients et les produits?

Actuellement, j'ai conçu ma base de données autour du principe des relations entre la commande, le client et le produit comme celui-ci:

Client
ID
Nom
...

Produit
ID
Nom
Prix
...

Commander
ID
CustomerID
OrderDate
...

Ligne de commande
ID
OrderID
ProductID

Comme cela, je peux connecter toutes les différentes tables. Mais si mon client supprimer un produit, ce qui se passe quand il ouvre plus tard un ordre qu'il a créé il y a plusieurs mois qui avait cet élément en elle. Il serait parti, car il a été supprimé. Même chose pour le client.

Devrais-je simplement désactiver les produits et les clients lorsque le bouton de suppression est cliqué ou quelle est la meilleure pratique?

Si je permet de dire que le produit diable d'une chaque fois que mon client décide de le supprimer, ce qui se passe alors s'il tente ensuite d'ajouter un nouveau produit avec le même ID de produit comme un produit désactivé, devrais-je simplement activer à nouveau cet article?

S'il vous plaît partager votre sagesse: D

Était-ce utile?

La solution

« Si je permet de dire que le produit diable d'une chaque fois que mon client décide de le supprimer, ce qui se passe alors s'il tente ensuite d'ajouter un nouveau produit avec le même ID de produit comme un produit désactivé, devrais-je simplement activer à nouveau cet article? »

dépend entièrement de votre scénario d'entreprise - ce qui est unique dans la façon dont les clients maintiennent actuellement? (Dire manuellement?) Comment ils gèrent quand un ancien produit qui a été arrêté plus tôt soudainement reparaît? (Ont-ils la traitent comme un nouveau produit ou commencent à se référant à l'ancien produit?) Je suppose qu'il n'y a pas de bonnes ou de mauvaises réponses à ces questions, cela dépend de la fonctionnalité - il est toujours conseillé de comprendre les processus existants (moins le logiciel ) déjà suivi par les clients et les associer à la fonctionnalité du logiciel.

Pour exemple. vous pouvez toujours ajouter un 'Un produit avec ce code existe déjà - souhaitez-vous utiliser qu'au lieu de créer un nouveau? une sorte de message. En outre, les ids de produits que vous utilisez dans vos tables comme clés étrangères, et celles que vous utilisez pour montrer le client, mieux d'être différent - vous ne voulez pas les obtenir mélangés.

Autres conseils

Pourquoi voudriez-vous être en mesure de commandes supprimer? Je pense qu'un tel système bloquerait des ordres pour que vous savez que vous avez une bonne histoire. Même chose pour les clients, pourquoi les supprimer? Peut-être un moyen de « archive » eux, avoir à mettre un certain drapeau, de cette façon ils ne se présentent pas sur les listes de clients ou quelque chose.

En ce qui concerne la désactivation et la saisie d'un nouvel élément avec le même produit ID - Je ne sais pas pourquoi vous faites cela soit, chaque ID de produit est unique pour une raison, même si vous interrompez un produit, il devrait garder il est l'ID de produit afin que vous avez un disque. Mais si vous devez, vous pouvez mettre une contrainte dans les règles métier, quelque chose à l'effet de «S'il n'y a pas de produit qui est actif avec cet ID de produit, puis le permettre. Si nous avons un produit qui est actif et il a la même ID de produit, puis lancer une erreur « . Ainsi, vous permettez que pour un seul produit actif avec cet ID de produit - mais honnêtement, je pense que cela serait source de confusion, et la fin arrière, vous aurez envie d'utiliser un identifiant unique qui est immuable pour chaque produit lien entre les tables <. / p>

Au lieu de « supprimer » j'ajouter une colonne booléenne pour IsActive. De cette façon, vous ne serez pas perdre des données historiques. Par exemple, si elles sont en mesure de supprimer un client alors ils ne seront pas en mesure de regarder l'histoire en ce qui concerne ce client et il peut faire examiner les données statistiques difficile, voire impossible. Pour la table de commande, vous pourriez avoir une colonne qui représente quelque chose comme « courant », « annulé », « rempli » pour accomplir la même chose. Cette colonne doit être un code à une recherche / table des codes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top