On 11/14/06, Florent THIERY <[EMAIL PROTECTED]> wrote:

If i follow your saying, it would be best to create a new table when i
encounter a new file-structure scheme, but keep a general purpose table with
minimal and univeral information.

Just to clarify, for simple key-value style headers I mean having two
tables period: universal information, and everything else (hopefully
the ASCII art comes out):

             images
+---------------------------------+
| fileid  filename  width  height |
+---------------------------------+
|      1  foo.jpg   640    480    |
|      2  bar.jpg   600    200    |
+---------------------------------+

                 headers
+-------------------------------------------+
| fileid              path            value |
+-------------------------------------------+
|      1  /sof/content/nr_components  1     |
|      1  /sof/content/component1     val1  |
|      2  /sof/content/nr_components  0     |
|      2  /new/header/type/one        val1  |
|      2  /new/header/type/two        val2  |
+-------------------------------------------+

The "images" table is the convenient one-row-with-all-the-info form.
The "headers" table is a bit more work to use, but is flexible enough
to handle arbitrary headers without changing your schema (just the
query conditions).

Retrieving all the headers for "bar.jpg":

SELECT path, value FROM headers JOIN images USING (fileid) WHERE
images.filename = 'bar.jpg';

And you can just iterate through the result rows.

Of course if you need to represent header types that don't fit well in
that key-value form, a different table for them is quite appropriate.

It allows me to distinguish clearly the types of organization.

Exactly :)  It is more work, but it allows relational queries to do
what they do best.

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to