Question

Je question suivante:

« Quelle forme normale fait une clé de substitution violent? »

Ma pensée était la 3ème forme normale, mais je ne suis pas tout à fait sûr qu'il est juste une hypothèse que je fais. Quelqu'un pourrait-il me l'expliquer?

Était-ce utile?

La solution

On peut dire une clé de substitution n'est pas la clé naturelle de la table, donc on pourrait dire de violer rien ', mais la clé «principe de 3FN. Dans la pratique, une clé de substitution est juste un support de place pour la clé naturelle, si cet argument est académique au mieux.

Certaines formes normales obscures nécessitent des clés composites pour devenir pertinentes. 5NF vient à l'esprit dans ce cas car elle nécessite plusieurs clés composites qui se chevauchent sur un M:. Relation M pour une violation 5NF soit possible

Autres conseils

On peut dire que, il ne fonctionne pas.

Ajout d'une clé de substitution est une décision de mise en œuvre (pour respecter le fonctionnement du SGBDR) pris au moment de la mise en œuvre. Au cours de la modélisation et la normalisation, vous devriez finir avec BCNF (3NF un peu plus strictes et plus correct) sans clés de substitution

C'est, l'introduction des clés de substitution au début du processus de conception est erronée. Même si nous le faisons ...

Il ne fonctionne pas. Les clés de toute nature ne suffisent pas à violer toute forme normale. Il est l'ensemble des dépendances vous attendent la table pour représenter qui définit si une NF est satisfaite ou non.

Il est vrai que l'ajout d'une clé de substitution n'implique un ensemble supplémentaire de dépendances sur cette touche. Par définition ces dépendances supplémentaires sont joindre les dépendances implicites, ce qui signifie super-clés par exemple 5NF et DKNF ne sont pas violés. La seule exception possible est si un sous-ensemble des attributs (clé partielle) de la mère porteuse est un facteur déterminant dans son propre droit. Étant donné que « substitution » désigne normalement une seule clé d'attribut dont les valeurs sont dépendant de clé arbitraire telle partielle est peu probable.

6NF pourrait être violé par l'ajout de l'attribut clé de substitution, mais si oui, cela est dû simplement à l'ajout d'un attribut -. Ce n'est pas un problème spécifique avec les clés de substitution

La réponse acceptée est incorrecte; les réponses données par @sqlvogel et @gbn sont corrects.

touches sont des touches de substitution non motrices domaine qui se dressent dans des clés naturelles (ceux qui ont des dépendances fonctionnelles qui dérivent du domaine).

Par exemple, nous pourrions avoir une table avec des touches indépendantes qui ne se chevauchent, (une table nommée People avec id, ssn et email comme des clés). Les deux ssn et email sont les clés naturelles (nous avons décidé que, étant donné juste un numéro de sécurité sociale ou tout simplement un e-mail que nous pouvons identifier de manière unique une personne). id est une clé de substitution - une clé que nous avons ajouté dans le but exprès d'identifier de manière unique une personne. Les gens tendent à ne pas avoir ids, mais les relations ont souvent une clé de substitution id nommé. Donc, la clé de id ne provient pas du domaine de Personhood.

Cela dit, id, email et ssn déterminent chacun fonctionnellement tous les autres attributs sur la table Person. Ils sont tous les candidats clés (et donc SuperTouches).

violations de BCNF se produisent lorsque soit des attributs non-clés déterminent fonctionnellement d'autres attributs ou si une partie seulement d'une clé candidate détermine d'autres attributs. Étant donné que chaque attribut lui-même est une clé candidate, aucune violation de BCNF existent.

Ne pas une clé doivent être minimale?

Et si une clé de substitution se trouve dans une clé naturelle composite? Par exemple, une table de Filmstitle et original_release_date se combinent pour former une clé naturelle, et un champ id agit comme une clé de substitution. Est-ce pas la touche {title, original_release_date} violent l'exigence selon laquelle une clé soit minimale?

Ceci est une idée fausse à propos de la définition de minimalité. Tout simplement parce que la clé de substitution consiste à moins d'attributs que la clé naturelle ne signifie pas qu'il est la clé minimale singulière. Une clé candidate est minime si aucun sous-ensemble de la clé existe qui est aussi une clé candidate. title ne permet pas d'identifier de manière unique un Film et ne ni original_release_date. Par conséquent, même dans le cas où une clé de substitution se trouve dans une clé naturelle composite, il n'y a pas eu violation de forme normale.

Ils violent 3FN.

C'est OK quand vous avez un modèle normal et décider de dénormaliser ici et là judicieusement. Mais pas quand vous le modèle avec les mères porteuses pour commencer.

  • Comment savez-vous que vous violez 3FN?

Une citation du livre "Utilisation SQLite", Jay A. Kreibich, O'Reilly

Le troisième forme normale, ou 3NF, étend le 2FN pour éliminer transitive clés Encies. En fonction Une dépendance transitive est quand A dépend de B, et B dépend de C, et donc une fonction de C. 3NF exige que chaque colonne de clé non primaire a une dépendance directe (non transitive) sur la clé primaire.

...

Une bonne façon de reconnaître les colonnes qui peuvent se briser 3NF est de chercher paires ou ensembles de colonnes non liées qui doivent être en synchronisation avec les uns des autres.

Un autoincremental PK dans une entité où aucune clé exist naturelle n'est pas un substitut. Un substitut est un autoincremental PK ajouté à une table où une clé naturelle existait. Cela dit, les deux clés, la PK porteuse et la clé de l'entreprise (les utilisateurs clés de recherche) doivent être syncronized parce que si le ne sont pas synchronisés, les données sont perdues pour l'utilisateur. Voilà comment vous savez que vous violez 3NF.

Un cas de c'est un problème du plataform Bitcoin a où et attaquant de-synced la clé de substitution et la clé d'affaires utilisateurs résultant ont perdu leur Bitcoins.

Une citation de Greg Maxwell, de développeur de noyau ou Bitcoin:

... à des experts de la base de données: le vrai problème est que le mont Gox (et d'autres échanges) utilisent un numéro de transaction de substitution plutôt qu'une clé naturelle dans leurs bases de données: « La faille est pas tant Bitcoin comme il est en échange des systèmes. De nombreux échanges utilisent le tx-id identifier de manière unique les transactions, mais il se trouve, un attaquant peut changer le tx-id sans changer la transaction réelle, rediffusée la transaction modifiée (créant effectivement un double-dépenses) et si sa transaction modifiée est acceptée dans un bloc au lieu de transaction légitime, l'attaquant reçoit ses pièces de monnaie et peut porter plainte avec l'échange qu'il n'a pas. L'échange sera ensuite vérifier leur db, récupérez les tx-id de lui, regardez vers le haut dans le blockchain et ne pas trouver il. Ils ne pouvaient donc conclure que l'opération a échoué et en effet créditer le compte des pièces de monnaie. ... Une solution de simple est de ne pas utiliser le tx-id pour identifier les transactions sur le côté de l'échange, mais le (Montant, adresse, horodatage) à la place. "

Citation ici et ici

Alors demandez-vous ceci:

  • fait ce tableau a seul attribut non PK que si changé serait arbitrairement empêcher l'utilisateur de récupérer les données?

Si c'est le cas, vous violez 3NF.

Mais ... parfois on doit dénormaliser (violer les formes normales en connaissance de cause) pour la performance ou par souci de simplicité. Par exemple, quand une clé naturelle composite est trop long (dépasse trois colonnes selon PDMs principes de conception ) et vous devez créer un FK à cette table.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top