FLOW OF OPERATIONS
Choose output size Choose output format Correct data types Add/Remove columns Change data types Set bindings Use functions Adjust distributions Adjust columns Adjust tables Create test database Click-Once generation FLOW OF OPERATIONS
FEATURES
Automatic fast modeling Easy annotations Composite key support Many output options Extensible ”Dirty” data Support for bad DB design DBMS independent ”Real” and synthetic data Data protection Excel-like functions Advanced data bindings FEATURES
EXTENSIBLE ARCHITECTURE Kernel System Supplied User Extension Varchar Int... TinyInt... Normal Uniform... MS SQL Oracle... File Stream... Mult Add... LogNormal... Database... Log10...
COMPOSITE PK-FK BINDINGS Composite Primary/Foreign-keys INTRA-ROW BINDINGS DATA DEPENDENCIES idfirstnameLastnameSsnHeightweightbmi 1RicoWind KennethPedersen KristianTorp PROJECTWORKS_ON EMPLOYEE empidnamelocationexpectedhrs 1T80CCB T80CCB KS231A namelocationstartdateenddate T80CCB BBS45A KS231A
DATA DEPENDENCIES INTER-COLUMN BINDINGS COMBINED BINDINGS increasing_datefluctuating_priceincreasing_price :01: :01: :01: idstock_pricechange_date MSFT :01:33 ORCL :01:33 ORCL :01:34 MSFT :01:34 STOCK
TPC-C PERFORMANCE
DATATYPE EXTENSIBILITY 1 [Serializable] 2 class TinyInt : Int 3 { 4 private bool useRandomData = false; 5 6 public override void PutData(System.Data.IDataReader dr) 7 { 8 base.PutData(dr); 9 if (dist.GetMaximumValues()[0] > 255 || 9dist.GetMinimumValues()[0] < 0) 10 { 11 useRandomData = true; 12 } 13 } public override string GetDataItem(string[] tuple) 16 { 17 if (!useRandomData) 18 return base.GetDataItem(tuple); 19 else 20 { 21 return Convert.ToInt32(rnd.NextDouble() * 255).ToString(); 22 } 23 } public override bool CreatesDirtyData() 26 { 27 return false; 28 } 29 }
1 class TinyInt : Int { 2 private bool useBaseData = false; 3 public override void PutData(IDataReader dr) { 4 base.PutData(dr); 5 if (dist.GetMaxValues() > 255 || dist.GetMinValues() < 0) 6 useBaseData = true; 7 } INHERITED DATATYPE EXAMPLE(C#) 8 public override string GetDataItem( string[] tuple) { 9 if (! useBaseData) 10 return base.GetDataItem(tuple); 11 Else 12 return (string)rnd.NextDouble() * 55; 13 } 14 public override bool CreatesDirtyData() { 15 return false; 16 } } DATATYPE EXAMPLE > DataType... Int... TinyInt +PutData(DataReader) +GetDataItem(string[]) +CreatesDirtyData() +PutData(DataReader) +GetDataItem(string[]) +CreatesDirtyData()
DEMONSTRATION