Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Design decision: Dynamically adding data question

I need to give users the ability to optionally add metadata to documents. Another way to state this is the fact that users need to add at least 5 categories to a document.

Basically what I want to do is dynamically add metadata (or categories) to a document on an ad hoc basis. Here are the options that I have thought of:

Option 1: Should I do this by dynamically creating new table columns in the database?

Option 2: Should I define 5 columns called attirbute1,attirbute2,attirbute3,attirbute4,attirbute5 and then only use and show them if the user requires the attributes.

Option 3: Should I create a metadata table that keeps track of the columns and the data associated with them?

What do you think is the best way to achieve this? Can you think of any other ways to easily add this functionality. The problem is that the functionality needs to be very generic.

like image 629
David Smit Avatar asked May 08 '26 17:05

David Smit


2 Answers

Each document has a unique DocumentID.

Just add another table that has three columns:

DocumentID
MetaName
MetaData

Then they can add as many pieces of metadata to a given document. If all their documents use the same metanames then it's trivial to search the metadata.

-Adam

like image 128
Adam Davis Avatar answered May 11 '26 07:05

Adam Davis


This sounds a lot like tagging. You can probably modify acts-as-taggable to do what you need.

like image 30
John Topley Avatar answered May 11 '26 07:05

John Topley