<?xml version="1.0"?>
<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd">
  <database name="lineage">
    <!-- Data transfers from one transformation to the next -->
    <table name="data_transfers">
      <column name="data_transfer_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>
      <!-- ID of the source transformation of this data transfer -->    
      <column name="src_transformation_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <!-- ID of the source transformation execution of this data transfer -->    
      <column name="src_execution_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <!-- ID of the destination transformation execution of this data transfer -->    
      <column name="dst_transformation_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <!-- ID of the destination transformation execution of this data transfer -->    
      <column name="dst_execution_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <column name="dst_type" primaryKey="false" required="true" type="BOOLEANINT" size="4" autoIncrement="false"/>
      <column name="src_type" primaryKey="false" required="true" type="BOOLEANINT" size="4" autoIncrement="false"/>
      <!-- ID of the data item transfered with this transfer -->          
      <column name="data_item_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <!-- Name of the source parameter (parameter of the transformation) -->    
      <column name="src_name" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>
      <!-- Name of the destination parameter (parameter of the transformation) -->    
      <column name="dst_name" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>
      <!-- Name of the table the data item is stored in -->
      <column name="data_item_table" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>      
      <foreign-key foreignTable="transformations" name="dt_dst_trafo_id_fkey" onDelete="cascade">
        <reference local="dst_transformation_id" foreign="transformation_id"/>
      </foreign-key>
      <foreign-key foreignTable="transformations" name="dt_src_trafo_id_fkey" onDelete="cascade">
        <reference local="src_transformation_id" foreign="transformation_id"/>
      </foreign-key>      
      <foreign-key foreignTable="transformation_executions" name="dt_dst_exec_id_fkey" onDelete="cascade">
        <reference local="dst_execution_id" foreign="transformation_executions_id"/>
      </foreign-key>
      <foreign-key foreignTable="transformation_executions" name="dt_src_exec_id_fkey" onDelete="cascade">
        <reference local="src_execution_id" foreign="transformation_executions_id"/>
      </foreign-key>            
    </table> 
    <!-- Transformation hierarchy (e.g., what complex transformation is parent of another complex/simple transformation)-->
    <table name="executions_hierarchy_tree">
      <column name="executions_hierarchy_tree_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>    
      <!-- ID of the hierarchy tree -->
      <column name="hierarchy_tree_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>          
      <!-- Values to retrieve transformation children (using the nested set model) -->
      <column name="left_no" primaryKey="true" required="false" type="INTEGER" size="4" autoIncrement="false"/>
      <column name="right_no" primaryKey="true" required="false" type="INTEGER" size="4" autoIncrement="false"/>
      <!-- ID of the parent transformation -->
      <column name="parent_execution_id" primaryKey="true" required="false" type="INTEGER" size="4" autoIncrement="false"/>      
      <!-- ID of the transformation execution -->
      <column name="transformation_executions_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <foreign-key foreignTable="transformation_executions" name="exec_hier_trafo_id" onDelete="cascade">
        <reference local="transformation_executions_id" foreign="transformation_executions_id"/>
      </foreign-key>      
    </table>
    <!-- Transformations and their properties -->    
    <table name="transformations">
      <column name="transformation_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>
      <!-- Name of the transformation name -->
      <column name="name" primaryKey="false" required="false" type="LONGVARCHAR" autoIncrement="false"/>
      <!-- Defining if it is a complex transformation -->
      <column name="is_process" primaryKey="false" required="false" type="BIT" size="1" autoIncrement="false"/>
      <!-- Version of the transformation -->
      <column name="version" primaryKey="false" required="false" type="LONGVARCHAR" autoIncrement="false"/>
      <!-- Author of the transformation -->
      <column name="author" primaryKey="false" required="false" type="LONGVARCHAR" autoIncrement="false"/>
      <!-- Description of the transformation -->
      <column name="description" primaryKey="false" required="false" type="LONGVARCHAR" autoIncrement="false"/>
      <unique name="transformation_id_unique">
        <unique-column name="transformation_id"/>
      </unique>
    </table>
    <!-- Transformation executions and their properties -->
    <table name="transformation_executions">
      <column name="transformation_executions_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>
      <column name="transformation_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <!-- Final state of the execution -->	
	<column name="s_state" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>
      <!-- Number of times it has been executed in the transformation -->	
	<column name="s_start" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>		            
      <!-- Execution start time -->	
	<column name="s_startdt" primaryKey="false" required="true" type="TIMESTAMP" autoIncrement="false"/>		            	  
      <!-- Execution ready time -->	
	<column name="s_readydt" primaryKey="false" required="true" type="TIMESTAMP" autoIncrement="false"/>		            
      <!-- Execution end time -->	
	<column name="s_enddt" primaryKey="false" required="true" type="TIMESTAMP" autoIncrement="false"/>		            
      <!-- Execution wall time -->	
	<column name="s_wall" primaryKey="false" required="true" type="FLOAT" autoIncrement="false"/>
      <unique name="trf_exec_id_uq">
        <unique-column name="transformation_executions_id"/>
      </unique>
      <foreign-key foreignTable="transformations" name="trf_exec_fkey" onDelete="cascade">
        <reference local="transformation_id" foreign="transformation_id"/>
      </foreign-key>	  		            
    </table>
    <!-- Control transfers from one transformation to the next -->
    <table name="control_transfers">   
      <column name="control_transfer_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>    
      <!-- Source transformation of the control transfer -->	
      <column name="src_transformation_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <!-- Source transformation execution of the control transfer -->	
      <column name="src_execution_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <!-- Destination transformation of the control transfer -->	
      <column name="dst_transformation_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
      <!-- Destination transformation execution of the control transfer -->	
      <column name="dst_execution_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
	  <unique name="control_transfer_id_unique">
        <unique-column name="control_transfer_id"/>
      </unique>      
      <foreign-key foreignTable="transformations" name="dst_trf_id_fkey" onDelete="cascade">
        <reference local="dst_transformation_id" foreign="transformation_id"/>
      </foreign-key>
      <foreign-key foreignTable="transformations" name="src_trf_id_fkey" onDelete="cascade">
        <reference local="src_transformation_id" foreign="transformation_id"/>
      </foreign-key>      
      <foreign-key foreignTable="transformation_executions" name="dst_exec_id_fkey" onDelete="cascade">
        <reference local="dst_execution_id" foreign="transformation_executions_id"/>
      </foreign-key>
      <foreign-key foreignTable="transformation_executions" name="src_exec_id_fkey" onDelete="cascade">
        <reference local="src_execution_id" foreign="transformation_executions_id"/>
      </foreign-key>      
    </table>       
    <!-- Annotations for transformation executions -->
    <table name="transformation_execution_annotation">
      <column name="transformation_execution_annotation_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>
      <column name="transformation_executions_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
	  <column name="annotation" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>		            
      <unique name="trf_exec_anno_idu">
        <unique-column name="transformation_execution_annotation_id"/>
      </unique>
      <foreign-key foreignTable="transformation_executions" name="tr_exec_anno_fkey" onDelete="cascade">
        <reference local="transformation_executions_id" foreign="transformation_executions_id"/>
      </foreign-key>       
    </table>    
    <!-- Annotations for transformations -->
    <table name="transformation_annotations">
      <column name="transformation_annotations_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>
      <column name="transformation_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
	  <column name="annotation" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>		            
      <unique name="trf_anno_idu">
        <unique-column name="transformation_annotations_id"/>
      </unique>     
      <foreign-key foreignTable="transformations" name="tr_anno_fkey" onDelete="cascade">
        <reference local="transformation_id" foreign="transformation_id"/>
      </foreign-key>       
    </table>   
    <!-- Annotations for data items -->
    <table name="data_item_annotations">
      <column name="data_item_annotations_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>
      <column name="data_item_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
	  <column name="annotation" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>		            
      <unique name="data_item_annotations_id_unique">
        <unique-column name="data_item_annotations_id"/>
      </unique>
      <unique name="data_item_idu">
        <unique-column name="data_item_id"/>
      </unique>      
      <!--foreign-key foreignTable="data_items" name="datai_ann_fkey" onDelete="cascade"-->
        <!--reference local="data_item_id" foreign="data_item_id"/-->
      <!--/foreign-key-->       
    </table>
    <!-- Annotations for control transfers -->
    <table name="control_transfer_annotations">
      <column name="control_transfer_annotations_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>
      <column name="control_transfer_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
	  <column name="annotation" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>		            
      <unique name="control_transfer_annotations_id">
        <unique-column name="control_transfer_annotations_id"/>
      </unique>    
      <foreign-key foreignTable="control_transfers" name="ct_trf_ann_fkey" onDelete="cascade">
        <reference local="control_transfer_id" foreign="control_transfer_id"/>
      </foreign-key>       
    </table>
    <!-- Annotations for data transfers -->
    <table name="data_transfer_annotations">
      <column name="data_transfer_annotations_id" primaryKey="true" required="true" type="INTEGER" size="4" autoIncrement="true"/>
      <column name="data_transfer_id" primaryKey="false" required="true" type="INTEGER" size="4" autoIncrement="false"/>
	  <column name="annotation" primaryKey="false" required="true" type="LONGVARCHAR" autoIncrement="false"/>		            
      <unique name="data_transfer_annotations_id">
        <unique-column name="data_transfer_annotations_id"/>
      </unique> 
      <foreign-key foreignTable="data_transfers" name="dt_trf_ann_fkey" onDelete="cascade">
        <reference local="data_transfer_id" foreign="data_transfer_id"/>
      </foreign-key>     
    </table>               
  </database>
