Uit Hack42
Ga naar: navigatie, zoeken

Waar moet de database aan voldoen

  • webbased editen
  • text based editen (evt. lynx
  • beperkt publiek toegankelijk via andere url.


Wat voor soorten objecten hebben we?

  1. systemen - iets met een soort van CPU en memory, waar een OS op draait
    1. "universele" - OS wordt extern geladen, aanpasbaar met uitbreidingskaarten, etc.
    2. "dedicated" - OS in firmware, single task (rekenmachines e.d.)
  2. peripherals - in/uitvoer voor bovenstaand
    1. invoer (keyboards, tablets, muizen, trackballs, kaartlezers, barcode scanners etc.)
    2. uitvoer (printers, plotters, kaartponsers, monitoren)
    3. combinatie van bovenstaande 2 (terminal, kaartlezer+ponser, etc.)
    4. opslag (harddisks, floppies, bernoully, MO, magtape, paper tape, etc.)
    5. netwerk (switches, hubs, media converters, transceivers, routers, terminal servers, etc.)
    6. andere comms (modems, acoustic couplers, current loop converters, etc.)
  3. specials
    1. (electro)mechanische reken- en typmachines
    2. discrete elektronica
    3. purpose-built spul (testapparatuur, etc.)
  4. media
  5. documentatie
    1. algemeen
    2. specifiek (install/user/sys.mgmgt/prog/service manuals)

Wat moeten we per object opslaan? (n.b. dit zal varieren per soort object)

Algemeen

  • modelspecifiek:
    • "Meer info" (externe links)
    • Knowhow
  • exemplaarspecifiek
    • uniek catalogusnummer met QR/barcode
    • bijzonderheden
    • herkomst
    • datum binnenkomst
    • Foto's (of link naar gallery/mediawiki)
    • Edited by

Voor hardware

Structuur:

  1. fabrikant
    1. model 1
      1. exemplaar 1
      2. exemplaar 2
      3. ...
    2. model 2
      1. exemplaar 1
      2. ...
    3. ...
  2. ...
  • algemeen: fabrikant, model, algemene specs (architectuur e.d.), productieperiode
  • specifiek: configuratie/variant, serienummer, productiedatum, andere kenmerken, "hoort bij", status

Voor media

Structuur:

  1. fabrikant/leverancier
    1. pakket 1
    2. pakket 2
    3. ...
  2. ...

Een extra relationele laag lijkt me hier niet nodig omdat we waarschijnlijk zelden meerdere exemplaren van hetzelfde pakket zullen hebben, en hetzelfde pakket op verschillende media verschillende SKUs zal hebben.

  • pakket, SKU, versie, mediatype, "hoort bij", kopie/image gemaakt + naam + datum
    • voor OSen: target systeem/config/specs
    • voor applicaties: target OS, requirements, restricties.

Voor documentatie

  • leverancier/uitgever, auteur, titel, ISBN/SKU, datum
    • specifieke docs: "hoort bij", versie, gescanned + filenaam + datum


overpeinzing

  • hoe om te gaan met itemX onder verkoopnaam Y
    • lijkt me niet zo moeilijk. "Model" heeft altijd een modelnaam/nummer (bijv. VX40B-F2); verkoopnaam (DEC Multia Alpha) is optioneel. Alleen onze pedantic mediawiki valt op een rare manier over een lege naam (indien leeg wordt 'rubriek' genegeerd, en komt het systeem dus niet in Museum). Voor $whateverSQL moet dat geen probleem zijn. Wikilink wordt fabrikant + verkoopnaam, of fabrikant + modelnummer indien verkoopnaam leeg.

DDL

CREATE TABLE fabrikant (
  naam            varchar(80),
  logo            varchar(80), -- link naar image op wiki
  artikel         varchar(80), -- link naar artikel op wiki
  fab_id          serial
);

CREATE TABLE herkomst (
   herkomst_id     serial,
   naam            varchar(80),
   artikel         varchar(80),
   contact_adres   varchar(80),
   contact_plaats  varchar(80),
   contact_tel     varchar(80),
   contact_comment varchar(100),  -- wil wel/niet op de hoogte gehouden worden/ wel/niet contact mee opnemen.etc.
   showcontact     boolean
);

CREATE TABLE owner (
   owner_id        serial,
   naam            varchar(80),
   artikel         varchar(80),
   contact_adres   varchar(80),
   contact_plaats  varchar(80),
   contact_tel     varchar(80),
   contact_comment varchar(100),  -- gebruiksvoorwaarden zoals bruikleen, wel/niet repareren. etc.
   showcontact     boolean
);


CREATE TYPE categorie AS ENUM ('systeem', 'peripheral', 'storage', 'network', 'comms', 'part');

CREATE TABLE hw_model ( 
   fab_id         int,
   modelnaam      varchar(80),
   handelsnaam    varchar(80),
   fab_mod_id     serial,
   hw_categorie   categorie,
   prod_start     date,
   prod_end       date,
   knowhow        varchar(80), -- wikinamen
   ...
);

CREATE TYPE sys_type AS ENUM ('computer', 'desktop computer', 'handheld', 'home computer', 'laptop', 'minicomputer', 'portable computer', 'server', 'werkstation');

CREATE TABLE hw_model_system ( -- per-model data voor systemen
   fab_mod_id        int,
   model_sys_type    sys_type,
   model_arch        varchar(20),
   model_bus         varchar(20),
   model_possible_os varchar(80), -- welk OS kan op deze machine draaien
   ...
   model_more_info   text -- links naar meer info, docs, etc.
);

CREATE TYPE periph_category AS ENUM ("input", "output", "in/out");

CREATE TYPE periph_type AS ENUM ("keyboard", "muis", "tablet", "trackball", "monitor", "ponsbandlezer", "ponsbandponser", ponskaartlezer", "ponskaartponser", "overig");

CREATE TABLE hw_model_periph ( -- per-model data voor peripherals
   fab_mod_id           int,
   model_peri_categ     periph_category,
   model_peri_type      periph_type,
   model_conn           varchar(20), -- type connectie naar systeem 
   model_tied_to_system varchar(80),  -- "hoort bij"
   ...
   model_more_info      text -- links naar meer info, docs, etc.
);

CREATE TABLE hw_model_storage ( -- per-model data voor storage
   fab_mod_id           int,
   model_stor_type      varchar(20), -- FD/HD/tape/removable/MO/Bernoully/etc...
   model_conn           varchar(20), -- type connectie naar systeem 
   model_tied_to_system varchar(80),  -- "hoort bij"
   ...
   model_more_info      text -- links naar meer info, docs, etc.
);

CREATE TABLE hw_item_system ( -- per-item data voor systemen
   fab_mod_id          int,
   invent_id           serial,
   item_serial         varchar(20),
   item_config         varchar(20), -- config variant
   item_hw_list        text,
   item_os             varchar(20),
   item_os_vers        varchar(20),
   item_has_network    boolean,
   item_network_MAC    macaddr[],
   item_network_IP     inet[];
   item__network_other text;
   item_in_date        date,  -swc: is dit datum invoeren of ergens gevonden op label/binnenkant kast/orginele pakbon?
   item_herkomst       int,
   item_owner          int,
   item_status         varchar(20)[], -- array met status
   item_status_date    date[], -- array van data waarop status gewijzigd is
   item_status_user    varchar(80), -- array met wie status gewijzigd heeft
   item_pics           varchar(80), -- link naar (folder met) foto's
   item_article        text, -- of link naar wikipagina??
   ...
);

CREATE TABLE hw_item_periph ( -- per-item data voor peripherals
   fab_mod_id          int,
   invent_id           serial,
   item_serial         varchar(20),
   item_in_date        date,
   item_herkomst       int,
   item_owner          int,
   item_in_date        date,
   item_fw_vers        varchar(20),
   item_status         varchar(20)[], -- array met status
   item_status_date    date[], -- array van data waarop status gewijzigd is
   item_status_user    varchar(80), -- array met wie status gewijzigd heeft
   item_pics           varchar(80), -- link naar (folder met) foto's
   item_article        text, -- of link naar wikipagina??
   ...
);

CREATE TABLE hw_item_storage ( -- per-item data voor storage
   fab_mod_id          int,
   invent_id           serial,
   item_serial         varchar(20),
   item_in_date        date,
   item_herkomst       int,
   item_owner          int,
   item_in_date        date,
   item_fw_vers        varchar(20),
   item_status         varchar(20)[], -- array met status
   item_status_date    date[], -- array van data waarop status gewijzigd is
   item_status_user    varchar(80), -- array met wie status gewijzigd heeft
   item_pics           varchar(80), -- link naar (folder met) foto's
   item_article        text, -- of link naar wikipagina??
   ...
);