Athena's blog

A crime against database design

Athena Lilith Martin

Published on

I present, a crime against database design, in interface definition form.


Inputs consist of one or more rows inserted into a table resembling the following:

CREATE TABLE input_data (
  seq INTEGER PRIMARY KEY AUTOINCREMENT
);

The input_data table must have that name exactly, but may (and should) have following columns to contain the data.

Once rows are inserted into input_data, the database should generate output accessible via a table or view resembling the following:

CREATE TABLE output_data (
  seq INTEGER PRIMARY KEY AUTOINCREMENT,
  done INTEGER CHECK(done IN (0, 1))
);

Again, output_data must have that name exactly and may have following columns, comprising the output.

After inserting each input row, output_data should be checked for new rows with a greater seq value than previously seen; these are the output rows. The database is not required to preserve old output rows when new input is inserted; however, seq must continue to increase throughout the process. Once all input data has been inserted, if the second column (done) of the last output row is 0, rows of all NULL should continue to be inserted into input_data until a row with done 1 appears at the end of output_data.

input_data should be cleared (truncated/deleted from unconditionally) before any new inputs. Once this occurs, the database is permitted to reset or rewind the seq values used for the next output, and the same is true of the next input.

Tagged: