Modelling Cars & Calculating Total Cost with dbd -
11-22-2006
, 06:04 PM
Below is a dbd example that models parts that make up a Civic LE and
Civic SE. Each has a different engine configuration and transmission
however some parts like starter and gears are shared. Queries return
parts of each car. Queries calculate cost of car by summing cost of sub
parts.
Data Modelled:
CivicLE
EngineCfg1
1.5L Engine
Starter1
Gear2
Manual Transmission
Gear1
CivicSE
EngineCfg2
1.6L Engine
Starter1
Gear2
Automatic Transmission
Gear1
(new 'cost)
(new 'starter1 'starter)
(create starter1 cost (val+ '100))
(new 'eng_1.5L 'engine)
(create eng_1.5L part starter1)
(create eng_1.5L cost (val+ '1000))
(new 'eng_1.6L 'engine)
(create eng_1.6L part starter1)
(create eng_1.6L cost (val+ '1300))
(new 'gear1 'gear)
(create gear1 cost (val+ '5))
(new 'gear2 'gear)
(create gear2 cost (val+ '6))
(new 'trans_manual 'transmission)
(create trans_manual part gear1)
(create trans_manual cost (val+ '500))
(new 'trans_auto 'transmission)
(create trans_auto part gear1)
(create trans_auto cost (val+ '700))
(new 'engCfg1 'engineConfig)
(create engCfg1 part eng_1.5L)
(create engCfg1 part gear2)
(new 'engCfg2 'engineConfig)
(create engCfg2 part eng_1.6L)
(create engCfg2 part gear2)
(new 'honda 'mfg)
(new 'civic_le 'civic 'car)
(create civic_le mfg honda)
(create civic_le part engCfg1)
(create civic_le part trans_manual)
(new 'civic_se 'civic 'car)
(create civic_se mfg honda)
(create civic_se part engCfg2)
(create civic_se part trans_auto)
(; Find parts of civic_le)
(; Returns, engCfg1, eng_1.5L, starter1, gear2, trans_manual, gear1)
(selectRel civic_le part *)
(; Find parts of civic_se)
(; Returns, engCfg2, eng_1.6L, starter1, gear2, trans_auto, gear1)
(selectRel civic_se part *)
(; Get sum of civic_le part costs)
(; Return 1611)
(sum (select (getElem (selectRel civic_le part *)) cost *))
(; Get sum of civic_se part costs)
(; Returns 2111)
(sum (select (getElem (selectRel civic_se part *)) cost *))
For additional examples, see www.dbfordummies.com/example/Default.asp |