2010-06-18 6 views
1

J'ai une entité qui a 4 types de propriété différents qui peuvent avoir une seule valeur pour chaque cas qui sont booléen, décimal, chaîne ou texte. Je ne veux pas définir la table avec 4 colonnes boolean, decimal, nvarchar et ntext. Que recommanderiez-vous pour couvrir ce cas?Besoin de recommandation pour une structure de table

Mise à jour:

J'utilise MS SQL Server.

Voici la définition de classe:

public class Foo 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
    public bool BooleanValue { get; set; } 
    public decimal DecimalValue { get; set; } 
    public string NVarcharValue { get; set; } 
    public string NTextValue { get; set; } 
} 
+1

Avez-vous une définition de classe ou quelque chose que vous pouvez partager pour illustrer votre problème? – slugster

+0

Certaines bases de données prennent en charge un type de données 'sql_variant', mais s'attendent à des difficultés si vous souhaitez modifier DBM. – msw

Répondre

1

Je présume que vous voulez utiliser MS SQL Server.

Si tel est le cas, je n'utiliserais pas ntext Ce type de données doit être supprimé dans les futures versions de SQL Server. Si vous devez vraiment utiliser un type de données non Unicode, utilisez nvarchar. Une autre restriction de l'utilisation ntext est que vous ne pouvez pas le convertir en un grand nombre des autres types de données. Sur les 30 types de données impairs, vous ne pouvez convertir que ntext en six d'entre eux.

Ce que vous pouvez faire dans ce scénario est la structure de table suivante.

Create Table dbo.PropertyInformation 
(
PropertyId int identity(1,1) not null, 
PropertyName varchar(50) not null, 
PropertyTypeId int not null, 
PropertyValue nvarchar(max) 
) 

ajouter ensuite une table de consultation pour stocker vos types de propriété

Create table dbo.PropertyTypes 
(
PropertyTypeId int identity(1,1) not null, 
PropertyType varchar(50) not null 
) 

Vous pouvez stocker tout type de valeur dans la colonne PropertyValue nvarchar convertit à presque tous les autres types de données - en dehors de l'image. Lisez le PropertyType de la table de recherche et convertissez la valeur de PropertyValue à la volée dans votre application.

Bien que, avez-vous une raison pour laquelle vous ne voulez pas avoir 4 colonnes différentes pour stocker les valeurs de propriété?

ntext datatype information

Casting & Converting in SQL Server (La matrice des conversions autorisées est à peu près à mi-chemin bas de la page)

0

Vous pouvez définir 4 tables pour chacune des propriétés et chaque ligne de chaque tableau aurait une clé étrangère l'entité à laquelle il appartient.

Questions connexes