J'ai une petite question au sujet d'une base de données que je suis la conception et en vous assurant qu'il est normalisé ...question de la normalisation de la simple base de données
J'ai une table à la clientèle, avec une clé primaire de customerId. Il a une colonne StatusCode qui a un code qui reflète l'état du compte des clients à savoir. 1 = Ouvert, 2 = Fermé, 3 = Suspendu etc ...
Maintenant je voudrais avoir un autre champ dans la table client qui indique si le compte est autorisé à être suspendu ou non ... certains clients seront automatiquement suspendu si elles briserai conditions commerciales ... d'autres pas ... donc les champs de table pertinents seront comme si:
clients (CustomerId (PK): StatusCode: IsSuspensionAllowed)
maintenant, les deux champs dépendent sur la clé primaire car vous ne pouvez pas déterminer l'état ou si des suspensions sont autorisées sur un client particulier à moins que vous connaissiez le client spécifique, sauf bien sûr lorsque le champ IsSuspensionAllowed est défini sur YES, le le client ne devrait jamais avoir un StatusCode de 3 (Suspendu).
Il semble que d'après la conception de tableau ci-dessus, il est possible que cela se produise à moins qu'une contrainte de vérification soit ajoutée à ma table. Je ne vois pas comment une autre table pourrait être ajoutée à la conception relationnelle pour l'appliquer, mais seulement dans le cas où IsSuspensionAllowed est défini sur YES et que StatusCode est défini sur 3 lorsque les deux dépendent l'un de l'autre. Donc, après ma longue explication, ma question est la suivante: est-ce un problème de normalisation et je ne vois pas un design relationnel qui fera respecter cela ... ou est-ce juste une règle d'affaires qui devrait être appliquée avec un vérifier la contrainte et la table est en fait encore normalisée.
Cheers,
Steve
Remerciements, Je suis en pleine normalisation et la "clé entière et rien que la clé" donnait quelques doutes. J'ai senti qu'il pourrait y avoir une dépendance transitive entre Status et IsSuspended. Comme vous l'avez mentionné, chaque attribut est spécifique au client.Je reconnais que j'aime utiliser des clés de substitution dans la plupart des situations pour la standardisation. La seule fois où je ne le fais habituellement, c'est quand il y a une norme déjà développée, comme la monnaie, ou dans des tableaux représentant des relations plusieurs-à-plusieurs. Je prends votre commentaire sur l'amélioration de la lisibilité à bord et je vais considérer que le code ne change pas. À la votre – Steven