2.2. The Design of the SMDP Database

The SMDP database is designed to allow for a very dynamic set of information relating to mp3 and ogg files. The basic structure covers the usual entities in a traditional relational model. This is then complemented by a set of tables essentially composing a directory-like storage structure, geared toward both specific attribute classes as well as a completely "free" relations table - ie where the type of the objects are specified on both sides of the relation.

This provides - in addition to the usual information such as artist name, song title, album name and so on - for space to define unique information as well as to establish relationships betewwen any two objects in the database.

Anyways, enough of the hot air...read on for more information.

2.2.1. Central Tableset

The central tableset is composed of the song, artist, collection (album), file, and media (filesystem) tables. Aside from the feature tables (Section 2.2.2), these will be the most frequently queried tables in the database.

2.2.2. The feature and feature_type Tables

The feature tables serve to store specific information relating to the central tableset. In turn, the feature tables all point to 'tag' information stored in the feature_type table.

For each of the main objects in the database, there exists a companion 'feature' table. The 'feature' tables serves to further describe the records in the object table.

See Appendix B for information on translating Id3 tags and Ogg comments into SMDP records.

2.2.3. Levels of Data Storage

To allow some felxability in the size and complexity of the database, there will be a number of storage options available. The details have not been hashed out yet, but there will most likely be option-specific settings as well as more generalized settings that take care of the specific options. Some of the options may include:

store_binary. [true|false] Determines if binary information from tags is actually stored in the database or if the location and type of information is stored (but not the binary data)

use_musicbrainz. [true|false] Weather or not to store MusicBrainz information in the database.

use_freedb. [true|false] Weather or not to store FreeDB information in the database.