2010-12-09 51 views
0

J'ai récemment dû utiliser une application dans laquelle la plupart des tables ne se référencent pas l'une l'autre via des clés primaires, mais s'appuient plutôt sur des champs synthétiques supplémentaires. Par exemple, disons qu'il y a des tables Person (id, name, token) et Pet (id, name, personToken). Une personne peut avoir beaucoup d'animaux domestiques. Pet.personToken serait une clé étrangère référençant Person.token. Maintenant, si je créais le schéma, j'utiliserais simplement Person.id pour référencer les enregistrements dans celui-ci. On m'a dit que l'application utilise des colonnes "token" pour faciliter la migration des données entre différents serveurs.Utilisation de champs synthétiques supplémentaires à la place des clés primaires pour référencer des tables

Ma question est, est-ce quelque chose assez commun ou est-ce simplement un design bizarre?

+0

Quel est le type de données des clés primaires, c'est-à-dire 'id' et comment se compare-t-il au type de données' tokens'? En outre, quelle est la logique pour générer 'id' contre les' tokens 'correspondants? – InSane

+0

Les ID sont généralement des entiers auto-incrémentés. Les jetons sont souvent des chaînes entrées manuellement par l'utilisateur quelque part. –

Répondre

1

Je ne peux pas dire si c'est commun dans l'industrie dans son ensemble, mais j'ai vu la même chose dans un certain nombre d'applications que j'ai déjà effectuées.

Je pense que c'est une conception étrange qui finit par être mise en place parce que les conceptions initiales du système n'ont pas été suffisamment prises en compte.

1

Cela semble être simplement un design étrange.

Je n'avais jamais vu quelque chose comme ça auparavant.

Cela semble être exagéré, et je devrais voir les implémentations Index/clé étrangère. Aussi ne voudrait pas voir la mise en œuvre de générateur de jetons ...

Quand vous dites la on m'a dit que l'application utilise des colonnes « jeton » pour le bien de la migration des données plus facile entre les différents serveurs. est-ce pour la réplication? Ou simplement du test au développement?

Dans l'ensemble, cela ne semble pas être le meilleur design que j'ai rencontré.

+0

Dans la plupart des cas, les jetons sont des chaînes (varchar) attribuées manuellement à chaque enregistrement lors de sa création. Dans le cas de mon exemple inventé Person.token pourrait être quelque chose comme SSN de la personne ou un ID abitrary. Par environnement, ils signifiaient des choses comme le développement, le test et ainsi de suite. –

+0

Même ainsi, cela ne semble toujours pas la meilleure approche ... –