views:

54

answers:

1

This question is an attempt to find a practical solution for this question.

I need a semi-schema less design for my SQL database. However, I can limit the flexibility to shoehorn it into the entire SQL paradigm. Moving to schema less databases might be an option in the future but right now, I' stuck with SQL.

I have a table in a SQL database (let's call it Foo). When an row is added to this, it needs to be able to store an arbitrary number of "meta" fields with this. An example would be the ability to attach arbitrary metadata like tags, collaborators etc. All the fields are optional but the problem is that they're of different types. Some might be numeric, some might be textual etc.

A simple design linking Foo to a table of OptionalValues with fields like name, value_type, value_string, value_int, value_date etc. seems direct although it descends into the whole EAV model which Alex mentions on that last answer and it looks quite wasteful. Also, I imagine queries out of this when it grows will be quite slow. I don't expect to search or sort by anything in this table though. All I need is that when I get a row out of Foo, these extra attributes should be obtainable as well.

Are there any best practices for implementing this kind of a setup in a SQL database or am I simply looking at the whole thing wrongly?

+1  A: 

Add a string column "Metafields" to your table "Foo" and store your metadata there as an XML or JSON string.

Doc Brown
Okay.That's one way to do it. Although I'd have to parse it out everytime on load.
Noufal Ibrahim
You have to parse it everytime you need access to your metadata.
Doc Brown
Fair enough. I think this is workable although I'm curious if there are any other ways to do this.
Noufal Ibrahim