2008-11-20 5 views
2

Disons que j'ai une table dans une base de données SQL Server 2000 appelé TransactionType:maintien ids dans la base de données qui correspondent à des énumérations de logiciel client

CREATE TABLE [dbo].[TransactionType](
    [ID] [int] NOT NULL, 
    [Description] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
CONSTRAINT [PK_TransactionType] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
) ON [PRIMARY] 
) ON [PRIMARY] 

J'ai alors une table de transaction avec une colonne appelée TransactionTypeID, calée au large de la Colonne ID de la table TransactionType. Mon application client .net est responsable de l'insertion des enregistrements de transaction et de la spécification du type de transaction. Ma première pensée était d'avoir une énumération définie, en castant l'énumération à un nombre entier et en passant cette valeur à la base de données. Le problème est que potentiellement, quelqu'un pourrait aller dans la base de données et modifier l'un des ID dans la table TransactionType, rendant les ID de la base de données désynchronisés avec les ID dans l'énumération des applications client. Donc, après ma longue période d'érection, ma question est la suivante: existe-t-il des modèles/techniques de conception que d'autres utilisent pour lutter contre ce problème?

Répondre

1

Vous pouvez envisager d'utiliser un système de codage lâchement lié (non appliqué) à la table enfant. Disons que c'est une couleur, votre table enfant peut ressembler à ceci.

ID | Name 
------------ 
GRN | Green 
PURP| Purple 
YELL| Yellow 
RED | Red 

Maintenant vous avez une carte d'identité que si vous avez affiché sans une jointure, est très utile à un être humain, et si vous avez besoin d'un « nom » plus précise/détaillée valeur, vous pouvez joindre ou récupérer. Donc, évidemment, lorsque vous affichez l'entrée parent (disons que c'est un fruit), vous n'avez pas besoin d'effectuer la jointure. En outre, il n'y a jamais une bonne raison de changer l'ID

ID | Name | Color 
----------------- 
1 | Banana | YELL 
2 | Apple | RED 
3 | Cherry | RED 

Gardez à l'esprit que ce système ne doit pas être utilisé si vous prévoyez d'ajouter beaucoup de types d'enfants, mais si vous allez seulement avoir une douzaine, il peut être un bon raccourci. Ce n'est pas non plus une bonne idée si vous envisagez d'avoir beaucoup de «fruits» car un CHAR/VARCHAR n'est pas un moyen efficace d'obtenir vos données. Mais pour 99% des bases de données disponibles, cette méthode fonctionnera très bien.

Questions connexes