Uit Hack42
Ga naar: navigatie, zoeken
k
 
(8 tussenliggende versies door 4 gebruikers niet weergegeven)
Regel 1: Regel 1:
 
== Waar moet de database aan voldoen ==
 
== Waar moet de database aan voldoen ==
 +
* webbased editen. ''Dit is een wens/eis voor de frontend applicatie''
 +
* text based editen (evt. lynx) ''idem''
 +
* beperkt publiek toegankelijk via andere url ''idem''
  
* webbased editen
+
=== Eisen ===
* text based editen (evt. lynx
+
* Intern volledig UTF-8
* beperkt publiek toegankelijk via andere url.
+
* Minimaal in 3NF uitgenormaliseerd
 +
* Uniforme en consequente taal/woordkeuze in alle DDL
 +
* Leesbare DDL (geen afko's etc)
 +
* Gebruik van commentaar in DDL (taal tevens identiek aan taalkeuze DDL)
 +
* Correct gebruik van de beschikbare datatypen
  
 +
** Ik zat zelf aan een schemaloze database te denken (MongoDB of zo). Een paar verplichte velden en de rest min of meer vrij. Omdat er anders voor elk apparaatsoort een andere tabel moet komen, er moeilijke meta-databases gemaakt moeten worden met key/value tabellen en zo ([[Gebruiker:Denz|denz]] ([[Overleg gebruiker:Denz|overleg]]) 23 aug 2014 12:41 (CEST))
 +
 +
=== Wensen ===
 +
* Logging van wijzigingen op objecten (records); Wie, Wat, Wanneer, (Waarom?)
 +
 +
=== Beslissingen ===
 +
* Eventueel geschikt te maken voor teksten in meerdere talen?
 +
* Documentstorage: in de database?
 +
** Database kan heel snel heel groot en log worden
 +
** Records altijd up-to-date en compleet
 +
** Consistente backups en eenvoudigere replicatie
 +
* Documentstorage: buiten de database?
 +
** Directorypaden of URL's in de database kunnen extern wijzigen, documenten kunnen verdwijnen of corrupt raken
 +
** Database blijft klein, dus snel
 +
* Schema/DDL op Github (oid)?
  
 
== Wat voor soorten objecten hebben we? ==
 
== Wat voor soorten objecten hebben we? ==
Regel 90: Regel 112:
 
);
 
);
  
CREATE TABLE herkomst (
+
CREATE TABLE contact ( -- identiek voor museummedewerkers, eigenaars en herkomst
   herkomst_id    serial,
+
   contact_id      serial,
   naam            varchar(80),
+
   contact_name    varchar(80),
   artikel        varchar(80),
+
   contact_adress  varchar(80),
   contact_adres  varchar(80),
+
   contact_city    varchar(80),
   contact_plaats  varchar(80),
+
   contact_country varchar(80),
   contact_tel    varchar(80),
+
   contact_tel    varchar(20),
 +
  contact_email  varchar(80),
 +
  contact_link    varchar(80),
 
   contact_comment varchar(100),  -- wil wel/niet op de hoogte gehouden worden/ wel/niet contact mee opnemen.etc.
 
   contact_comment varchar(100),  -- wil wel/niet op de hoogte gehouden worden/ wel/niet contact mee opnemen.etc.
   showcontact    boolean
+
   showcontact    boolean,
);
+
   is_medewerker   boolean,
 
+
   is_owner        boolean,
CREATE TABLE owner (
+
   is_herkomst     boolean
  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),
 
   showcontact     boolean
 
 
);
 
);
  
 
+
CREATE TYPE category AS ENUM ('systeem', 'peripheral', 'storage', 'network', 'comms', 'misc', 'part');
CREATE TYPE categorie AS ENUM ('systeem', 'peripheral', 'storage', 'network', 'comms', 'part');
 
  
 
CREATE TABLE hw_model (  
 
CREATE TABLE hw_model (  
 +
  fab_mod_id    serial,
 
   fab_id        int,
 
   fab_id        int,
   modelnaam     varchar(80),
+
   modelname     varchar(80),
   handelsnaam   varchar(80),
+
   commercname   varchar(80),
 
   fab_mod_id    serial,
 
   fab_mod_id    serial,
   hw_categorie  categorie,
+
   hw_category    category,
 
   prod_start    date,
 
   prod_start    date,
 
   prod_end      date,
 
   prod_end      date,
   knowhow        varchar(80), -- wikinamen
+
   knowhow        int[], -- lijst van contact_IDs
 
   ...
 
   ...
 
);
 
);
Regel 130: Regel 146:
  
 
CREATE TABLE hw_model_system ( -- per-model data voor systemen
 
CREATE TABLE hw_model_system ( -- per-model data voor systemen
   fab_mod_id       int,
+
   fab_mod_id             int,
   model_sys_type    sys_type,
+
   model_sys_type         sys_type,
   model_arch        varchar(20),
+
   model_cpu_architecture  varchar(20), -- x86, 68k, AXP, Sparc, Power, MIPS ...
   model_bus         varchar(20),
+
   model_cpu_generation    varchar(20), -- PIII, EV5 ...
   model_possible_os varchar(80), -- welk OS kan op deze machine draaien
+
   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.
 
   model_more_info  text -- links naar meer info, docs, etc.
 
);
 
);
  
CREATE TYPE periph_category AS ENUM ("input", "output", "in/out");
+
CREATE TYPE HMIperipheral_category AS ENUM ("input", "output", "in/out");
 +
 
 +
CREATE TYPE HMIperipheral_type AS ENUM ("keyboard", "muis", "tablet", "trackball", "monitor", "terminal", "printer", "overig");
  
CREATE TYPE periph_type AS ENUM ("keyboard", "muis", "tablet", "trackball", "monitor", "ponsbandlezer", "ponsbandponser", ponskaartlezer", "ponskaartponser", "overig");
+
// misschien maakt een ENUM het HMIperipheral_type te beperkt, aan de andere kant wil je een beetje uniformiteit in je types hebben.
  
CREATE TABLE hw_model_periph ( -- per-model data voor peripherals
+
CREATE TABLE hw_model_HMIperipheral ( -- per-model data voor peripherals
 
   fab_mod_id          int,
 
   fab_mod_id          int,
   model_peri_categ    periph_category,
+
   model_peri_category  HMIperipheral_category,
   model_peri_type      periph_type,
+
   model_peri_type      HMIperipheral_type,
   model_conn          varchar(20), -- type connectie naar systeem  
+
   model_connection    varchar(20), -- type connectie naar systeem  
 
   model_tied_to_system varchar(80),  -- "hoort bij"
 
   model_tied_to_system varchar(80),  -- "hoort bij"
 
   ...
 
   ...
Regel 155: Regel 174:
 
CREATE TABLE hw_model_storage ( -- per-model data voor storage
 
CREATE TABLE hw_model_storage ( -- per-model data voor storage
 
   fab_mod_id          int,
 
   fab_mod_id          int,
   model_stor_type      varchar(20), -- FD/HD/tape/removable/MO/Bernoully/etc...
+
   model_stor_type      varchar(20), -- FD/HD/tape/removable/MO/Bernoully/ponsband/ponskaart/etc...
   model_conn          varchar(20), -- type connectie naar systeem  
+
   model_connection    varchar(20), -- type connectie naar systeem  
   model_tied_to_system varchar(80), -- "hoort bij"
+
   model_tied_to_system varchar(80), -- "hoort bij"
 
   ...
 
   ...
 
   model_more_info      text -- links naar meer info, docs, etc.
 
   model_more_info      text -- links naar meer info, docs, etc.
Regel 163: Regel 182:
  
 
CREATE TABLE hw_item_system ( -- per-item data voor systemen
 
CREATE TABLE hw_item_system ( -- per-item data voor systemen
   fab_mod_id          int,
+
   invent_id              serial,
   invent_id          serial,
+
   fab_mod_id            int,
   item_serial         varchar(20),
+
   item_serial           varchar(40),
   item_config         varchar(20), -- config variant (optioneel)
+
   item_config           varchar(20), -- config variant (optioneel)
   item_hw_list       text,
+
   item_hw_list           text,
   item_os             varchar(20),
+
   item_os               varchar(20),
   item_os_vers       varchar(20),
+
   item_os_version       varchar(20),
   item_has_IP_network boolean,
+
   item_has_IP_network   boolean,
 
   item_has_other_network boolean,
 
   item_has_other_network boolean,
   item_network_MAC   macaddr[],
+
   item_network_MAC       macaddr[],
   item_network_IP     inet[];
+
   item_network_IP       inet[];
   item_network_other text,  -- andere netwerkprotocollen + adressen
+
   item_network_other     text,  -- andere netwerkprotocollen + adressen
   item_prod_date     date,  -- produktiedatum
+
   item_prod_date         date,  -- produktiedatum
   item_in_date       date,  -- datum invoer
+
   item_in_date           date,  -- datum invoer
   item_herkomst       int,
+
   item_herkomst         int,
   item_owner         int,
+
   item_owner             int,
   item_status         varchar(20)[], -- array met status
+
   item_status           varchar(20)[], -- array met status
   item_status_date   date[], -- array van data waarop status gewijzigd is
+
   item_status_date       date[], -- array van data waarop status gewijzigd is
   item_status_user   varchar(80), -- array met wie status gewijzigd heeft
+
   item_status_user       int[], -- array met wie status gewijzigd heeft
   item_pics           varchar(80), -- link naar (folder met) foto's
+
   item_pics             varchar(80), -- link naar (folder met) foto's
   item_article       text, -- of link naar wikipagina??
+
   item_article           text, -- of link naar wikipagina??
   item_comment       text, -- gebruiksvoorwaarden zoals bruikleen, wel/niet repareren. etc.
+
   item_comment           text, -- gebruiksvoorwaarden zoals bruikleen, wel/niet repareren. etc.
 
   ...
 
   ...
 
);
 
);
  
CREATE TABLE hw_item_periph ( -- per-item data voor peripherals
+
CREATE TABLE hw_item_HMIperipheral ( -- per-item data voor peripherals
 
   fab_mod_id          int,
 
   fab_mod_id          int,
 
   invent_id          serial,
 
   invent_id          serial,
Regel 199: Regel 218:
 
   item_status        varchar(20)[], -- array met status
 
   item_status        varchar(20)[], -- array met status
 
   item_status_date    date[], -- array van data waarop status gewijzigd is
 
   item_status_date    date[], -- array van data waarop status gewijzigd is
   item_status_user    varchar(80), -- array met wie status gewijzigd heeft
+
   item_status_user    int[], -- array met wie status gewijzigd heeft
 
   item_pics          varchar(80), -- link naar (folder met) foto's
 
   item_pics          varchar(80), -- link naar (folder met) foto's
 
   item_article        text, -- of link naar wikipagina??
 
   item_article        text, -- of link naar wikipagina??
Regel 217: Regel 236:
 
   item_status        varchar(20)[], -- array met status
 
   item_status        varchar(20)[], -- array met status
 
   item_status_date    date[], -- array van data waarop status gewijzigd is
 
   item_status_date    date[], -- array van data waarop status gewijzigd is
   item_status_user    varchar(80), -- array met wie status gewijzigd heeft
+
   item_status_user    int[], -- array met wie status gewijzigd heeft
 
   item_pics          varchar(80), -- link naar (folder met) foto's
 
   item_pics          varchar(80), -- link naar (folder met) foto's
 
   item_article        text, -- of link naar wikipagina??
 
   item_article        text, -- of link naar wikipagina??
 
   item_comment        text, -- gebruiksvoorwaarden zoals bruikleen, wel/niet repareren. etc.
 
   item_comment        text, -- gebruiksvoorwaarden zoals bruikleen, wel/niet repareren. etc.
 
   ...
 
   ...
 +
);
 +
 +
CREATE TABLE media_item (
 +
 +
);
 +
 +
CREATE TABLE doc_item (
 +
 
);
 
);
  
 
</pre>
 
</pre>

Huidige versie van 20 sep 2014 om 09:27

Waar moet de database aan voldoen

  • webbased editen. Dit is een wens/eis voor de frontend applicatie
  • text based editen (evt. lynx) idem
  • beperkt publiek toegankelijk via andere url idem

Eisen

  • Intern volledig UTF-8
  • Minimaal in 3NF uitgenormaliseerd
  • Uniforme en consequente taal/woordkeuze in alle DDL
  • Leesbare DDL (geen afko's etc)
  • Gebruik van commentaar in DDL (taal tevens identiek aan taalkeuze DDL)
  • Correct gebruik van de beschikbare datatypen
    • Ik zat zelf aan een schemaloze database te denken (MongoDB of zo). Een paar verplichte velden en de rest min of meer vrij. Omdat er anders voor elk apparaatsoort een andere tabel moet komen, er moeilijke meta-databases gemaakt moeten worden met key/value tabellen en zo (denz (overleg) 23 aug 2014 12:41 (CEST))

Wensen

  • Logging van wijzigingen op objecten (records); Wie, Wat, Wanneer, (Waarom?)

Beslissingen

  • Eventueel geschikt te maken voor teksten in meerdere talen?
  • Documentstorage: in de database?
    • Database kan heel snel heel groot en log worden
    • Records altijd up-to-date en compleet
    • Consistente backups en eenvoudigere replicatie
  • Documentstorage: buiten de database?
    • Directorypaden of URL's in de database kunnen extern wijzigen, documenten kunnen verdwijnen of corrupt raken
    • Database blijft klein, dus snel
  • Schema/DDL op Github (oid)?

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 contact ( -- identiek voor museummedewerkers, eigenaars en herkomst
   contact_id      serial,
   contact_name    varchar(80),
   contact_adress  varchar(80),
   contact_city    varchar(80),
   contact_country varchar(80),
   contact_tel     varchar(20),
   contact_email   varchar(80),
   contact_link    varchar(80),
   contact_comment varchar(100),  -- wil wel/niet op de hoogte gehouden worden/ wel/niet contact mee opnemen.etc.
   showcontact     boolean,
   is_medewerker   boolean,
   is_owner        boolean,
   is_herkomst     boolean
);

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

CREATE TABLE hw_model ( 
   fab_mod_id     serial,
   fab_id         int,
   modelname      varchar(80),
   commercname    varchar(80),
   fab_mod_id     serial,
   hw_category    category,
   prod_start     date,
   prod_end       date,
   knowhow        int[], -- lijst van contact_IDs
   ...
);

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_cpu_architecture  varchar(20), -- x86, 68k, AXP, Sparc, Power, MIPS ...
   model_cpu_generation    varchar(20), -- PIII, EV5 ...
   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 HMIperipheral_category AS ENUM ("input", "output", "in/out");

CREATE TYPE HMIperipheral_type AS ENUM ("keyboard", "muis", "tablet", "trackball", "monitor", "terminal", "printer", "overig");

// misschien maakt een ENUM het HMIperipheral_type te beperkt, aan de andere kant wil je een beetje uniformiteit in je types hebben.

CREATE TABLE hw_model_HMIperipheral ( -- per-model data voor peripherals
   fab_mod_id           int,
   model_peri_category  HMIperipheral_category,
   model_peri_type      HMIperipheral_type,
   model_connection     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/ponsband/ponskaart/etc...
   model_connection     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
   invent_id              serial,
   fab_mod_id             int,
   item_serial            varchar(40),
   item_config            varchar(20), -- config variant (optioneel)
   item_hw_list           text,
   item_os                varchar(20),
   item_os_version        varchar(20),
   item_has_IP_network    boolean,
   item_has_other_network boolean,
   item_network_MAC       macaddr[],
   item_network_IP        inet[];
   item_network_other     text,  -- andere netwerkprotocollen + adressen
   item_prod_date         date,  -- produktiedatum
   item_in_date           date,  -- datum invoer
   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       int[], -- array met wie status gewijzigd heeft
   item_pics              varchar(80), -- link naar (folder met) foto's
   item_article           text, -- of link naar wikipagina??
   item_comment           text, -- gebruiksvoorwaarden zoals bruikleen, wel/niet repareren. etc.
   ...
);

CREATE TABLE hw_item_HMIperipheral ( -- per-item data voor peripherals
   fab_mod_id          int,
   invent_id           serial,
   item_serial         varchar(20),
   item_prod_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    int[], -- array met wie status gewijzigd heeft
   item_pics           varchar(80), -- link naar (folder met) foto's
   item_article        text, -- of link naar wikipagina??
   item_comment        text, -- gebruiksvoorwaarden zoals bruikleen, wel/niet repareren. etc.
   ...
);

CREATE TABLE hw_item_storage ( -- per-item data voor storage
   fab_mod_id          int,
   invent_id           serial,
   item_serial         varchar(20),
   item_prod_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    int[], -- array met wie status gewijzigd heeft
   item_pics           varchar(80), -- link naar (folder met) foto's
   item_article        text, -- of link naar wikipagina??
   item_comment        text, -- gebruiksvoorwaarden zoals bruikleen, wel/niet repareren. etc.
   ...
);

CREATE TABLE media_item (

);

CREATE TABLE doc_item (

);