Förmodligen har en lastbil och/eller lastbilschaufför ett uppdrag som innebär att gå igenom ett händelseförlopp som inkluderar att följa en väg och göra leveranser och transaktioner etc. Förmodligen är ett jobb en sådan händelse, som det finns flera slag av, t.ex. hämtning, överföring och avlämning.
Tabellerna i en relationsdatabas beskriver tillståndet för en applikation. Varje tabell har en associerad fill-in-the-(named-)blanks-sats (predikat). Bastabellspredikaten ges av designern:
// truck [truck_id] has code [truck_code] and ...
TRUCK (truck_id, truck_code, ...)
// product [product_id] has code [product_code] and name [product_name] ...
PRODUCT (product_id, product_code, product_name, ...)
(Ett predikat karaktäriserar en tillämpningsrelation, aka relation, representerad av en tabell, aka relation, därav "den relationsmodell".)
Parametrarna för predikatet är kolumnerna i tabellen. När du anger värden för varje parameter får du ett påstående (proposition) som är sant eller falskt om din applikation. En rad med värden för kolumner ger sådana värden för varje namngivet tomt. Raderna som gör en tabells predikat sant går i tabellen. Raderna som gör om falska stannar utanför. Det är så databastillståndet beskriver applikationssituationen. Du måste känna till tabellernas uttalanden för att kunna läsa eller fråga databasen för att ta reda på dess rader vad som är sant och falskt om en situation och för att uppdatera databasen genom att lägga in exakt de rader som gör sanna propositioner i den efter att ha observerat situationen .
Varje fråga har också ett predikat byggt från predikaten i dess tabeller. JOIN av två tabeller ger raderna som uppfyller OCH för deras predikat, UNION ELLER, etc. Och ett frågeresultat innehåller också raderna som uppfyller dess predikat .
(Begränsningar är irrelevanta för detta; de beskriver bara kollektivt de databastillstånd som kan uppstå med tanke på predikaten och de tillämpningstillstånd som kan uppstå.)
Du måste bestämma dig för tillräckligt med predikat för att fullständigt kunna beskriva grunderna för din ansökan. Detta inkluderar abstrakta saker som rutter och transaktioner och händelser och scheman och uppdrag etc. (När vi har tillräckligt med predikat/tabeller förbättrar vi dem med tekniker som normalisering.)
När det kan finnas olika typer av saker pratar vi om supertyper och subtyper och ser predikat som (jag använder "jobb" som jag tar för att vara en händelse):
// job [job_id] for trucker [trucker_id] is ... stuff about all jobs ...
JOB(job_id, trucker_id...)
// job [job_id] is a pickup with ... stuff about pickups ...
PICKUP(job_id, container_id...)
// job [job_id] is a transfer with ... stuff about transfers
TRANSFER(job_id,...)
...
(Du kanske eller kanske inte har en annan eller ytterligare uppfattning om överföring som en händelse med två eller flera associerade behållare, etc.) (Sök "undertyper". T.ex. )