diff --git a/util/schema/main.go b/util/schema/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..542ac4cb9620d0444be268f88e53f7b537015333
--- /dev/null
+++ b/util/schema/main.go
@@ -0,0 +1,35 @@
+package schema
+
+type DatabaseSchema struct {
+	Name      string
+	Alias     string
+	Tables    []string
+	TableInfo map[string]*TableSchema
+}
+
+type TableSchema struct {
+	PrimaryKey string
+	Alias      string
+	Columns    []string
+}
+
+func NewDatabaseSchema() *DatabaseSchema {
+	schema := new(DatabaseSchema)
+	schema.Tables = []string{}
+	schema.TableInfo = make(map[string]*TableSchema)
+	return schema
+}
+
+func (d *DatabaseSchema) AddTable(name string) {
+	if _, ok := d.TableInfo[name]; !ok {
+		table := new(TableSchema)
+		table.Columns = []string{}
+		d.TableInfo[name] = table
+		d.Tables = append(d.Tables, name)
+	}
+}
+
+func (d *DatabaseSchema) Table(name string) *TableSchema {
+	d.AddTable(name)
+	return d.TableInfo[name]
+}