
CREATE TABLE apex_admin_persistencia
(
	ap							integer			 auto_increment  		NOT NULL, 
	clase							varchar(60)			NOT	NULL,
	archivo							varchar(120)			NOT	NULL,
	descripcion						varchar(60)			NOT	NULL,
	categoria						varchar(20)			NULL,		
	CONSTRAINT	 apex_admin_persistencia_pk  PRIMARY	KEY ( ap )
) ENGINE=InnoDB;

CREATE TABLE apex_tipo_datos
(
	tipo							varchar(1)			NOT NULL,
	descripcion						varchar(50)			NOT	NULL,
	CONSTRAINT	 apex_tipo_datos_pk  PRIMARY	KEY ( tipo )
) ENGINE=InnoDB;

CREATE TABLE apex_objeto_db_registros
(
	objeto_proyecto  				varchar(15)		NOT NULL,
	objeto      	    	 	integer		NOT NULL,
	max_registros					smallint		NULL,
	min_registros					smallint		NULL,
	ap							integer		NULL,
	ap_clase						varchar(60)		NULL,
	ap_archivo						varchar(120)	NULL,
	tabla 							varchar(120)	NULL,
	alias 							varchar(60)		NULL,
	modificar_claves				smallint		NULL,
	fuente_datos_proyecto			varchar(15)		NULL,	
	fuente_datos					varchar(20)		NULL,	
	CONSTRAINT   apex_objeto_dbr_pk  PRIMARY KEY ( objeto ,  objeto_proyecto ),
	CONSTRAINT	 apex_objeto_dbr_uq_tabla  UNIQUE ( fuente_datos ,  tabla ),
	CONSTRAINT   apex_objeto_dbr_fk_ap   FOREIGN KEY ( ap ) REFERENCES    apex_admin_persistencia  ( ap ) ON DELETE NO ACTION ON UPDATE NO ACTION   ,
	CONSTRAINT   apex_objeto_dbr_fk_objeto   FOREIGN KEY ( objeto ,  objeto_proyecto ) REFERENCES    apex_objeto  ( objeto ,  proyecto ) ON DELETE CASCADE ON UPDATE NO ACTION   ,
	CONSTRAINT   apex_objeto_dbr_fk_fuente   FOREIGN KEY ( fuente_datos_proyecto , fuente_datos ) REFERENCES    apex_fuente_datos  ( proyecto , fuente_datos ) ON DELETE NO ACTION ON UPDATE NO ACTION   
) ENGINE=InnoDB;

CREATE TABLE apex_objeto_db_registros_col
(
	objeto_proyecto    			   	varchar(15)		NOT NULL,
	objeto 		                integer      		NOT NULL,
	col_id						integer		 auto_increment  		NOT NULL, 
	columna		    				varchar(120)		NOT NULL, 
	tipo							varchar(1)		NULL,
	pk								smallint 		NULL,
	secuencia		    			varchar(120)		NULL, 
	largo							smallint		NULL,
	no_nulo							smallint 		NULL,
	no_nulo_db						smallint 		NULL,
	externa							smallint		NULL,
	CONSTRAINT   apex_obj_dbr_col_pk  PRIMARY KEY ( col_id ,  objeto ,  objeto_proyecto ),
	CONSTRAINT   apex_obj_dbr_col_fk_tipo  FOREIGN KEY ( tipo ) REFERENCES  apex_tipo_datos  ( tipo ) ON DELETE CASCADE ON UPDATE NO ACTION   ,
	CONSTRAINT   apex_obj_dbr_col_fk_objeto_dbr  FOREIGN KEY ( objeto ,  objeto_proyecto ) REFERENCES  apex_objeto_db_registros  ( objeto ,  objeto_proyecto ) ON DELETE CASCADE ON UPDATE NO ACTION   
) ENGINE=InnoDB;


CREATE TABLE apex_objeto_db_registros_ext
(
	objeto_proyecto    			   	varchar(15)		NOT NULL,
	objeto 		                integer      		NOT NULL,
	externa_id					integer		 auto_increment  		NOT NULL, 
	tipo							varchar(3)		NOT NULL,
	sincro_continua					smallint		NULL,
	metodo							varchar(100)	NULL,
	clase							varchar(100)	NULL,
	include							varchar(255)	NULL,
nosql							text			NULL,
	CONSTRAINT   apex_obj_dbr_ext_pk  PRIMARY KEY ( externa_id ,  objeto ,  objeto_proyecto ),
	CONSTRAINT   apex_obj_dbr_ext_fk_objeto_dbr  FOREIGN KEY ( objeto ,  objeto_proyecto ) REFERENCES  apex_objeto_db_registros  ( objeto ,  objeto_proyecto ) ON DELETE CASCADE ON UPDATE NO ACTION   	
) ENGINE=InnoDB;


CREATE TABLE apex_objeto_db_registros_ext_col
(
	objeto_proyecto    			   	varchar(15)		NOT NULL,
	objeto 		                integer      		NOT NULL,
	externa_id					integer		NOT NULL,
	col_id						integer		NOT NULL,
	es_resultado					smallint		NULL,
	CONSTRAINT   apex_obj_dbr_ext_col_pk  PRIMARY KEY ( externa_id , col_id , objeto , objeto_proyecto ),
	CONSTRAINT   apex_obj_dbr_ext_col_fk_ext  FOREIGN KEY ( externa_id ,  objeto ,  objeto_proyecto ) 
		REFERENCES  apex_objeto_db_registros_ext  ( externa_id ,  objeto ,  objeto_proyecto ) ON DELETE CASCADE ON UPDATE NO ACTION   ,
	CONSTRAINT   apex_obj_dbr_ext_col_fk_col  FOREIGN KEY ( col_id ,  objeto ,  objeto_proyecto  ) 
		REFERENCES  apex_objeto_db_registros_col  ( col_id , objeto , objeto_proyecto ) ON DELETE CASCADE ON UPDATE NO ACTION   
) ENGINE=InnoDB;


CREATE TABLE apex_objeto_db_registros_uniq
(
	objeto_proyecto    			   	varchar(15)		NOT NULL,
	objeto 		                integer      		NOT NULL,
	uniq_id						integer		 auto_increment  		NOT NULL, 
	columnas						varchar(255)	NULL,
	CONSTRAINT   apex_obj_dbr_uniq_pk  PRIMARY KEY ( uniq_id ,  objeto ,  objeto_proyecto ),
	CONSTRAINT   apex_obj_dbr_uniq_fk_objeto_dbr  FOREIGN KEY ( objeto ,  objeto_proyecto ) REFERENCES  apex_objeto_db_registros  ( objeto ,  objeto_proyecto ) ON DELETE CASCADE ON UPDATE NO ACTION   	
) ENGINE=InnoDB;


CREATE TABLE apex_objeto_datos_rel
(
	proyecto 		 				varchar(15)		NOT NULL,
	objeto      	    	 	integer		NOT NULL,
	debug							smallint		NULL DEFAULT 0,	
	clave							varchar(60)		NULL,
	ap							integer		NULL,
	ap_clase						varchar(60)		NULL,
	ap_archivo						varchar(120)	NULL,
	sinc_susp_constraints			smallint		NULL DEFAULT 0,
	sinc_orden_automatico			smallint		NULL DEFAULT 1,
	CONSTRAINT   apex_objeto_datos_rel_pk  PRIMARY KEY ( objeto ,  proyecto ),
	CONSTRAINT   apex_objeto_datos_rel_fk_ap   FOREIGN KEY ( ap ) REFERENCES    apex_admin_persistencia  ( ap ) ON DELETE NO ACTION ON UPDATE NO ACTION   ,
	CONSTRAINT   apex_objeto_datos_rel_fk_objeto   FOREIGN KEY ( objeto ,  proyecto ) REFERENCES    apex_objeto  ( objeto ,  proyecto ) ON DELETE NO ACTION ON UPDATE NO ACTION   
) ENGINE=InnoDB;

CREATE TABLE apex_objeto_datos_rel_asoc
(
	proyecto 		   			   	varchar(15)			NOT NULL,
	objeto 		                integer      			NOT NULL,
	asoc_id						integer			 auto_increment  		NOT NULL, 
	identificador    				varchar(60)			NULL, 
	padre_proyecto					varchar(15)			NOT NULL,
	padre_objeto				integer			NOT NULL,
	padre_id						varchar(20)			NOT NULL,
	padre_clave		    			varchar(255)			NULL, 
	hijo_proyecto					varchar(15)			NOT NULL,
	hijo_objeto					integer			NOT NULL,
	hijo_id							varchar(20)			NOT NULL,
	hijo_clave		    			varchar(255)			NULL, 
	cascada							smallint			NULL,
	orden							float				NULL,
	CONSTRAINT   apex_obj_datos_rel_asoc_pk  PRIMARY KEY ( asoc_id , objeto , proyecto ),
	CONSTRAINT   apex_obj_datos_rel_asoc_fk_objeto  FOREIGN KEY ( objeto , proyecto ) REFERENCES  apex_objeto_datos_rel  ( objeto , proyecto ) ON DELETE CASCADE ON UPDATE NO ACTION   ,
	CONSTRAINT   apex_obj_datos_rel_asoc_fk_padre  FOREIGN KEY ( proyecto , objeto , padre_id ) REFERENCES  apex_objeto_dependencias  ( proyecto , objeto_consumidor , identificador ) ON DELETE CASCADE ON UPDATE NO ACTION   ,
	CONSTRAINT   apex_obj_datos_rel_asoc_fk_hijo  FOREIGN KEY ( proyecto , objeto , hijo_id ) REFERENCES  apex_objeto_dependencias  ( proyecto , objeto_consumidor , identificador ) ON DELETE CASCADE ON UPDATE NO ACTION   
) ENGINE=InnoDB;
