A Non-Relational Representation (Cont.)
 
 Companies
It has a name, head office, several subsidiaries, and a president.
  
   
 
  
   | Company | 
   
  
   | CompanyID | 
   Name | 
   Street | 
   Location | 
   President | 
   
   
  
   | 
 
 
 Subsidiaries
It has a name, office, manager, and employees.
  
   
 
  
   | Subsidiary | 
   
  
   | CompanyID | 
   NameSubs | 
   Street | 
   Location | 
   Manager | 
   
   
  
   | 
 
 ⇓   aggregation ( [...]: tuple type and {...}: set type )
 
  
  
   
    Company: [
  Name: String,
  Headoffice: Address,
  Subsidiaries: { Subsidiary },
  President: Employee ]
   | 
  
 
   | 
   | 
  
  
   
    Subsidiary: [
  Name: String,
  Office: Address,
  Manager: Employee,
  Employees: { Employee } ]
   | 
  
 
   | 
 
 
  | 
 
  
  
   
    Address: [
  Street: String,
  Location: String ] 
   | 
  
 
     | 
   
  
  
 
For aggregation, the name of a type can be directly referred in another type.  
Because attributes are associated with named types, there is no longer a need for a foreign key clause as in the relational model.
 
  
   
    
     Vehicles
     
    It has a model name, color, and manufacturer.
   
   | 
    | 
  
  
   
    Vehicle: [
  Model: String,
  Manufacturer: Company,
  Color: String ] 
   | 
  
 
   | 
 
 
 
  
   
          
     “We live in an age when unnecessary things are our only necessities.”      
           ― Oscar Wilde
        
    |