Supposons que j'ai un objet client qui possède toutes les propriétés standard du client (nom, adresse, contact, etc.). Nous recevons un nouveau client (Acme) qui a une demande très précise que les factures que nous lui envoyons aient notre code d'identification comme code à barres. Nous ne voulons pas cela pour tous les autres clients, nous avons donc l'intention de le faire comme un cas particulier pour Acme. Maintenant, supposons que beaucoup de clients ont ces petites demandes uniques. Quelle serait la meilleure façon en mode ces données:Propriétés spéciales de l'entité et normalisation de la base de données
Je vois des possibilités de couple et leurs avantages/compromis:
1) Hardcoded, au point de l'écart, la vérification des ID ou le nom du client. Avantages: Moins d'effort, point d'intégration unique
Compromis: code peu fiable, très sujet à l'erreur. La modification des drapeaux nécessite un nouveau déploiement. Difficile de trouver des écarts à mesure que les propriétés augmentent en nombre.
2) Colonnes DB sur le client pour chaque propriété. Les drapeaux seront mis à vrai pour le client, faux pour tout le reste. Avantage: Relativement simple, les propriétés peuvent être modifiées à la volée.
Tradeoff: rend les bases de données très larges et le schéma bâclé. À mesure que d'autres propriétés sont ajoutées, les données deviennent de plus en plus ingérables. Le code sera également bâclé car de nombreuses propriétés inutiles devront être mappées.
3) Mappage de propriétés codées en dur. Une carte qui contient des propriétés spéciales pour les clients. La carte peut ensuite être demandée pour des propriétés spéciales, et le flux de code peut sortir de là.
Avantages: Un seul point de gestion.
Inconvénient: codé en dur. Les identifiants/noms de clients figureraient dans le code. Faire des changements nécessite des déploiements.
4) Table CustomerProperty avec colonnes clé/valeur.
Avantages: Propre. Un seul point de gestion. Dynamique.
Inconvénients: Complexe relatif, comparé aux autres solutions. De toute évidence, les choix varient en fonction des circonstances. Si nous avons des centaines d'écarts, il serait important d'avoir un seul point de gestion. Si c'était vraiment une déviation unique, je pense que # 1 serait correct, quoique hackish.
J'ai mes opinions sur ce qui est mieux dans ce cas .... mais j'aimerais connaître les opinions de tout le monde.
2, et peut-être 1, assez bien pour un tel cas. Mais vous avez spécifiquement dit «supposons que beaucoup de clients ont ces petites demandes ponctuelles», ce qui signifie qu'il s'agit d'une situation récurrente, que vous devrez soutenir au fil du temps, et à mon avis 4 est la voie à suivre. Utilisez certainement un modèle comme Lumpynose, contenant beaucoup d'informations descriptives sur chaque cas particulier. –