Database Design Advice

Smylers Smylers at stripey.com
Thu Nov 7 13:03:00 GMT 2013


Hello. I'm designing a database schema, and am interested in any wisdom
folk can share over a few aspects of it:

• A document can have versions. There's a document table and a
  document_version_contents table, where each document_version_contents
  record references document.id and has a version number.

  The pair {document_id, version} are unique, and that can be enforced
  in the DB.

  But version should start at 1 for each document and be consecutive.
  That is, if there is a record for document_id = 3846, version = 6
  then there should also be records for version 1 to 5 of that document
  ID. Is there a way of enforcing that at the DB level? We're using
  Postgres, if that makes a difference.

• The primary key of document_version_contents could be {document_id,
  version} (with tables linking to it specifying both of those), or I could
  create document_version_contents.id field, an arbitrary auto-increment
  number, which other tables could use as a foreign key.

  The advantage of the arbitrary id field is that it means other tables
  only need to link to one field.

  The advantage of using the pair of unique fields that exist anyway is
  that the values in them are meaningful: when working on the DB, or
  writing a report pulling data from it, it's easy to see which records
  correspond with which document; in programs using the DB, look-ups use
  values it has handy anyway.

  Anybody think I should pick one or t'other? Or has experience of
  going with one then regretting it?

• A purchase consists of ordering one product from a supplier. Each
  product is only available from a single supplier. So a record in the
  purchase table just needs to store a product ID, and by linking
  through the product table that defines the supplier too.

  A purchase will also be handled by a particular contact at the
  supplier. Again, the purchase table can link to the supplier_contact
  table, which in turn links to the supplier.

  Except there's now two (indirect) links from the purchase table to the
  supplier table. Can the database enforce that they both go to the same
  supplier? (That is, that a purchase handled by a particular contact
  must be for a product sold by that contact's company?)

Thank you for any advice.

Smylers
-- 
The UK gov's proposed gagging law will suppress protest and campaigning by
charities and political groups. Read more: http://civilsocietycommission.info/
Please sign this petition: http://38d.gs/1cJ9ViA
Oxfam • BHA • Quakers * Countryside Alliance • League Against Cruel Sports • CND



More information about the london.pm mailing list