A reporter represents (the idea of) a clone, oligo, or other
reporter for a gene.
Every reporter has a unique reporter id, which is a string.
Every reporter may, but doesn't have to, have a type.
The type is mainly used for easier filtering of reporters.
A reporter has a gene name and a gene symbol (short name).
The server admin may add additional columns to the table
and tell BASE about them; what type they have, what they
represent, and so on. These columns should then appear in
BASE wherever one would expect them to.
Information about the additional columns of the reporter
table is stored in an XML file.
The server admin should also be able to define
connections to
external tables (possibly in another database, if the RDBMS
supports it). For each such table, BASE needs to know how to
construct a JOIN (what to join on and whether to use LEFT
JOIN), and what the available columns in that table are.
[NOTE] If this is desired, please choose a database
system which has the functionality of mapping remote tables into local
ones, and define views to make it all appear as one table for the
BASE core. Of course, insertions and deletions must also be supported
by the setup.
It should be possible to use the external tables when filtering
reporters, and values from the external tables may be retrieved
as part of searches.
Some external databases have a version number, e.g. ACID with
different UniGene builds. BASE does not need to have any awareness
of this. Instead, different versions should be seen as different
external databases. If an external database is removed, BASE
should be notified about it, and if a user tries to re-run an
old search against this database, a meaningful error should be
generated.
[CLIENT] It should be possible to construct links to
external resources
(identified by URIs) with reporter information, using the
reporter id and possibly other reporter information. As reporters
may come from different sources, these rules for constructing
links should be data dependent. Regexps may be useful for this.
The reporter whose reporter id is an empty string is always
supposed to exist, and its reporter id should not be changed.
This reporter is used to represent a lack of reporter material,
for instance for empty plate wells. Use NULL values for this
instead.