Re: Best way to design table to store attributes?
Date: Thu, 22 Jan 2009 16:53:31 -0400
Message-ID: <4978dcce$0$5485$9a566e8b_at_news.aliant.net>
carl.henthorn_at_gmail.com wrote:
> I have an entity that along with all of the usual attributes, has a
> set of 140 bit flag attributes that I need to track all yes/no values
> of. I started going down the path of creating a table 150 columns
> wide, but after typing a few of them thought there may be a better
> way. :-)
> I am thinking of creating a table like this:
> Create table details (
> DetailsID int identity(1000,1),
> Name nvarchar(40),
> Descr nvarchar(60),
> Category nvarchar(40) )
> Thus I can take what would have been my column headers and use them in
> Name field, throw what would have been the bit flag value and throw
> that into the description field. I would tie them together with a
> category value to combine them into logical groups.
> I have around 1.2 million entities to store this info for, so this new
> table will get long fast.
>
> Another passing thought was to store these sets of values as XML for
> each entity. I have to admit I dont know what the advantage is for
> that other than the row count savings. how easy would it be to search
> through a 140 field xml blob for 1 million entites?
>
> Any advice is appreciated on how to tackle this.
Before folks start pointing and laughing and snickering about you re-inventing EAV yet again, I thought I would point out that the simplest logical representation for a boolean in a relational system is simply the existence of a tuple in a relation.
Thus, a design that has 150 tables each with a single column theoretically suffices.
On the other hand, such a design would clearly violate the POOD. Some might question the principle of orthogonal design, but I think one ignores it at one's own risk when creating 150 tables with identical predicates.