CREATE TABLE Applications (
	AppID          INT         NOT NULL    PRIMARY KEY	AUTO_INCREMENT,
	AppName        VARCHAR(100)    NOT NULL,
	Version        VARCHAR(100)    DEFAULT '1.0'        ,
	Description    TEXT            , 
	Language       VARCHAR(100)    NOT NULL,    
	Paradigm       VARCHAR(100)    DEFAULT '',
	UsageText          TEXT            ,
	Exe_opt        TEXT            ,	
	Exp_table_name VARCHAR(100)     DEFAULT 'EXPERIMENTS'    
);

CREATE TABLE Experiments (
	ExpID          INT             NOT NULL    PRIMARY KEY	AUTO_INCREMENT,
	AppID          INT             NOT NULL,
	SysInfo        TEXT            ,
	ConfigInfo     TEXT            ,
	InstruInfo     TEXT            ,
	CompilerInfo   TEXT            ,
	Trial_table_name VARCHAR(100)   DEFAULT 'TRIALS' ,
	CONSTRAINT efkey FOREIGN KEY(AppID) REFERENCES Applications(AppID) ON DELETE CASCADE ON UPDATE CASCADE
	
);


CREATE TABLE XMLfiles (
	XMLfileID    INT              NOT NULL     PRIMARY KEY	AUTO_INCREMENT,
	XMLfileName  TEXT      NOT NULL
);

CREATE TABLE Trials (
	TrialID         INT             NOT NULL    PRIMARY KEY	AUTO_INCREMENT,
	ExpID           INT                NOT NULL,
	Time            TIMESTAMP ,
	Metric          VARCHAR(50)     , 
	ProblemSize     INT,
	NodeNum         INT,
	ContextPNode    INT,
	ThreadPContext  INT,
	XMLfileID       INT,
	CONSTRAINT tfkey1 FOREIGN KEY(ExpID) REFERENCES Experiments(ExpID) ON DELETE CASCADE ON UPDATE CASCADE,
	CONSTRAINT tfkey2 FOREIGN KEY(XMLfileID) REFERENCES XMLfiles(XMLfileID) ON DELETE NO ACTION ON UPDATE CASCADE
);


CREATE TABLE FunIndex (
	FunIndexID      INT           NOT NULL    PRIMARY KEY	AUTO_INCREMENT,
	FunID           INT,
	FunName         TEXT		 NOT NULL,
	FunGroup        VARCHAR(50),
	TrialID         INT              NOT NULL,
	CONSTRAINT ffkey FOREIGN KEY(TrialID) REFERENCES Trials(TrialID) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE LocationIndex (
	LocID           INT           NOT NULL    PRIMARY KEY,
	NodeID          INT              NOT NULL,             
	ContextID       INT              NOT NULL,
	ThreadID        INT              NOT NULL,
	FunIndexID      INT              NOT NULL,
	CONSTRAINT lfkey FOREIGN KEY(FunIndexID) REFERENCES FunIndex(FunIndexID) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE Pprof (
	LocID           INT              NOT NULL   PRIMARY KEY,
	Inclperc        DECIMAL,
	Incl            DECIMAL,
	Exclperc        DECIMAL,
	Excl            DECIMAL,
	Call            DECIMAL,
	Subrs           DECIMAL,
	InclPCall       DECIMAL,
	CONSTRAINT pfkey FOREIGN KEY(LocID) REFERENCES LocationIndex(LocID) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE UserEvent (
        LocID           INT              NOT NULL   PRIMARY KEY,
        NumOfSamples    INT    ,         
	MaxValue        DECIMAL,
	MinValue        DECIMAL,
	MeanValue       DECIMAL,
	CONSTRAINT ufkey FOREIGN KEY(LocID) REFERENCES LocationIndex(LocID) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE Totalsummary (
	FunIndexID      INT              NOT NULL   PRIMARY KEY,
	Inclperc        DECIMAL,
	Incl            DECIMAL,
	Exclperc        DECIMAL,
	Excl            DECIMAL,
	Call            DECIMAL,
	Subrs           DECIMAL,
	InclPCall       DECIMAL,
	CONSTRAINT tfkey FOREIGN KEY(FunIndexID) REFERENCES FunIndex(FunIndexID) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE Meansummary (
	FunIndexID      INT              NOT NULL   PRIMARY KEY,
	Inclperc        DECIMAL,
	Incl            DECIMAL,
	Exclperc        DECIMAL,
	Excl            DECIMAL,
	Call            DECIMAL,
	Subrs           DECIMAL,
	InclPCall       DECIMAL,
	CONSTRAINT mfkey FOREIGN KEY(FunIndexID) REFERENCES FunIndex(FunIndexID) ON DELETE CASCADE ON UPDATE CASCADE
);

