Question

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?

Was it helpful?

Solution

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top