diff --git a/backend/sql/get_graph_names/AGE.sql b/backend/sql/get_graph_names.sql
similarity index 100%
rename from backend/sql/get_graph_names/AGE.sql
rename to backend/sql/get_graph_names.sql
diff --git a/backend/sql/get_role/default.sql b/backend/sql/get_role.sql
similarity index 100%
rename from backend/sql/get_role/default.sql
rename to backend/sql/get_role.sql
diff --git a/backend/sql/graph_labels/AGE.sql b/backend/sql/graph_labels.sql
similarity index 100%
rename from backend/sql/graph_labels/AGE.sql
rename to backend/sql/graph_labels.sql
diff --git a/backend/sql/meta_data/AGE.sql b/backend/sql/meta_data.sql
similarity index 100%
rename from backend/sql/meta_data/AGE.sql
rename to backend/sql/meta_data.sql
diff --git a/backend/sql/meta_edges/AGE.sql b/backend/sql/meta_edges.sql
similarity index 100%
rename from backend/sql/meta_edges/AGE.sql
rename to backend/sql/meta_edges.sql
diff --git a/backend/sql/meta_nodes/AGE.sql b/backend/sql/meta_nodes.sql
similarity index 100%
rename from backend/sql/meta_nodes/AGE.sql
rename to backend/sql/meta_nodes.sql
diff --git a/backend/sql/property_keys/AGE.sql b/backend/sql/property_keys.sql
similarity index 100%
rename from backend/sql/property_keys/AGE.sql
rename to backend/sql/property_keys.sql
diff --git a/backend/src/models/GraphRepository.js b/backend/src/models/GraphRepository.js
index bd75b4c..27b02c3 100644
--- a/backend/src/models/GraphRepository.js
+++ b/backend/src/models/GraphRepository.js
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import Flavors from '../config/Flavors';
 import PgConfig from '../config/Pg'
 
 import pg from 'pg';
@@ -26,11 +25,7 @@
 
 
 class GraphRepository {
-    constructor({host, port, database, graph, user, password, flavor, graphs=[]} = {}) {
-        if (!flavor) {
-            throw new Error('Flavor is required.');
-        }
-
+    constructor({host, port, database, graph, user, password, graphs=[]} = {}) {
         this._host = host;
         this._port = port;
         this._database = database;
@@ -38,7 +33,6 @@
         this._graph = graph;
         this._user = user;
         this._password = password;
-        this.flavor = flavor;
     }
 
     static async getConnection({
@@ -47,7 +41,6 @@
                                    database,
                                    user,
                                    password,
-                                   flavor
                                } = {},
                                closeConnection = true) {
         const client = new pg.Client({
@@ -59,12 +52,7 @@
             }
         )
         client.connect();
-        if (flavor === Flavors.AGE) {
-            await setAGETypes(client, types);
-        } else {
-            throw new Error(`Unknown flavor ${flavor}`)
-        }
-
+        await setAGETypes(client, types);
         if (closeConnection === true) {
             await client.end();
         }
@@ -90,7 +78,7 @@
     }
 
     async initGraphNames(){
-        const { rows } = await this.execute(getQuery(this.flavor, 'get_graph_names'));
+        const { rows } = await this.execute(getQuery('get_graph_names'));
         this._graphs = rows.map((item)=>item.name);
         // set current graph to first name
         this.setCurrentGraph(this._graphs[0]);
@@ -156,7 +144,6 @@
             password: this._password,
             graphs: this._graphs,
             graph: this._graph,
-            flavor: this.flavor,
         };
     }
 
diff --git a/backend/src/services/databaseService.js b/backend/src/services/databaseService.js
index e8160b5..3730554 100644
--- a/backend/src/services/databaseService.js
+++ b/backend/src/services/databaseService.js
@@ -72,7 +72,7 @@
         let graphRepository = this._graphRepository;
         let queryResult = {};
         try {
-            queryResult = await graphRepository.execute(getQuery(graphRepository.flavor, 'graph_labels'), [this.getConnectionInfo().graph]);
+            queryResult = await graphRepository.execute(getQuery('graph_labels'), [this.getConnectionInfo().graph]);
         } catch (error) {
             throw error;
         }
@@ -85,9 +85,9 @@
         let query = null;
 
         if (labelKind === 'v') {
-            query = util.format(getQuery(graphRepository.flavor, 'label_count_vertex'), `${this.getConnectionInfo().graph}.${labelName}`);
+            query = util.format(getQuery('label_count_vertex'), `${this.getConnectionInfo().graph}.${labelName}`);
         } else if (labelKind === 'e') {
-            query = util.format(getQuery(graphRepository.flavor, 'label_count_edge'), `${this.getConnectionInfo().graph}.${labelName}`);
+            query = util.format(getQuery('label_count_edge'), `${this.getConnectionInfo().graph}.${labelName}`);
         }
 
         let queryResult = await graphRepository.execute(query);
@@ -97,31 +97,19 @@
     
     async readMetaData(graphName){
         let gr = this._graphRepository;
-        let queryResult = await gr.execute(util.format(getQuery(gr.flavor, 'meta_data'), graphName));
+        let queryResult = await gr.execute(util.format(getQuery('meta_data'), graphName));
         return this.parseMeta(queryResult[1].rows);
     }
-    /* 
-    async getNodes() {
-        let graphRepository = this._graphRepository;
-        let queryResult = await graphRepository.execute(util.format(getQuery(graphRepository.flavor, 'meta_nodes'), graphRepository._graph, graphRepository._graph));
-        return queryResult.rows;
-    }
 
-    async getEdges() {
-        let graphRepository = this._graphRepository;
-        let queryResult = await graphRepository.execute(util.format(getQuery(graphRepository.flavor, 'meta_edges'), graphRepository._graph, graphRepository._graph));
-        return queryResult.rows;
-    }
-    */
     async getPropertyKeys() {
         let graphRepository = this._graphRepository;
-        let queryResult = await graphRepository.execute(getQuery(graphRepository.flavor, 'property_keys'));
+        let queryResult = await graphRepository.execute(getQuery('property_keys'));
         return queryResult.rows;
     }
 
     async getRole() {
         let graphRepository = this._graphRepository;
-        let queryResult = await graphRepository.execute(getQuery(graphRepository.flavor, 'get_role'), [this.getConnectionInfo().user]);
+        let queryResult = await graphRepository.execute(getQuery('get_role'), [this.getConnectionInfo().user]);
         return queryResult.rows[0];
     }
 
diff --git a/backend/src/tools/SQLFlavorManager.js b/backend/src/tools/SQLFlavorManager.js
index d238bf6..bf04d8a 100644
--- a/backend/src/tools/SQLFlavorManager.js
+++ b/backend/src/tools/SQLFlavorManager.js
@@ -18,19 +18,14 @@
  */
 import * as path from "path";
 import fs from 'fs'
-import Flavors from "../config/Flavors";
 
 const sqlBasePath = path.join(__dirname, '../../sql');
 
 // todo: util.format -> ejs
-function getQuery(flavor = Flavors.AGE, name) {
-    const defaultSqlPath = path.join(sqlBasePath, `./${name}/default.sql`);
-    let sqlPath = path.join(sqlBasePath, `./${name}/${flavor}.sql`);
-    if (fs.existsSync(defaultSqlPath)) {
-        sqlPath = defaultSqlPath;
-    }
+function getQuery(name) {
+    const sqlPath = path.join(sqlBasePath, `${name}.sql`);
     if (!fs.existsSync(sqlPath)) {
-        throw new Error(`SQL is not exist, name = ${name}`);
+        throw new Error(`SQL does not exist, name = ${name}`);
     }
     return fs.readFileSync(sqlPath, 'utf8');
 }
diff --git a/frontend/src/components/cypherresult/containers/CypherResultCytoscapeContainer.js b/frontend/src/components/cypherresult/containers/CypherResultCytoscapeContainer.js
index b2211d1..157e118 100644
--- a/frontend/src/components/cypherresult/containers/CypherResultCytoscapeContainer.js
+++ b/frontend/src/components/cypherresult/containers/CypherResultCytoscapeContainer.js
@@ -50,7 +50,6 @@
     maxDataOfGraph: state.setting.maxDataOfGraph,
     maxDataOfTable: state.setting.maxDataOfTable,
     setChartLegend: ownProps.setChartLegend,
-    flavor: state.database.flavor,
     graph: state.database.graph,
   };
 };
diff --git a/frontend/src/components/cypherresult/presentations/CypherResultCytoscape.jsx b/frontend/src/components/cypherresult/presentations/CypherResultCytoscape.jsx
index ad63e52..7799276 100644
--- a/frontend/src/components/cypherresult/presentations/CypherResultCytoscape.jsx
+++ b/frontend/src/components/cypherresult/presentations/CypherResultCytoscape.jsx
@@ -379,7 +379,6 @@
         cytoscapeLayout={cytoscapeLayout}
         addLegendData={addLegendData}
         maxDataOfGraph={maxDataOfGraph}
-        flavor={props.flavor}
         graph={props.graph}
       />
       <CypherResultCytoscapeFooter
@@ -421,7 +420,6 @@
   setLabels: PropTypes.func.isRequired,
   refKey: PropTypes.string.isRequired,
   setChartLegend: PropTypes.func.isRequired,
-  flavor: PropTypes.string.isRequired,
   graph: PropTypes.string.isRequired,
 };
 
diff --git a/frontend/src/components/frame/presentations/ServerConnectFrame.jsx b/frontend/src/components/frame/presentations/ServerConnectFrame.jsx
index 08c8a83..c177b54 100644
--- a/frontend/src/components/frame/presentations/ServerConnectFrame.jsx
+++ b/frontend/src/components/frame/presentations/ServerConnectFrame.jsx
@@ -20,7 +20,7 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 import {
-  Button, Col, Form, Input, InputNumber, Row, Select,
+  Button, Col, Form, Input, InputNumber, Row,
 } from 'antd';
 import { useDispatch } from 'react-redux';
 import Frame from '../Frame';
@@ -33,7 +33,6 @@
 
 const FormInitialValue = {
   database: '',
-  flavor: null,
   graph: '',
   host: '',
   password: '',
@@ -86,14 +85,6 @@
               layout="vertical"
               onFinish={connectToDatabase}
             >
-              <Form.Item name="flavor" label="Database Type" rules={[{ required: true }]}>
-                <Select
-                  placeholder="Select a flavor of Database"
-                  allowClear
-                >
-                  <Select.Option value="AGE">Apache AGE</Select.Option>
-                </Select>
-              </Form.Item>
               <Form.Item name="host" label="Connect URL" rules={[{ required: true }]}>
                 <Input placeholder="192.168.0.1" />
               </Form.Item>
diff --git a/frontend/src/components/sidebar/presentations/SidebarHome.jsx b/frontend/src/components/sidebar/presentations/SidebarHome.jsx
index 5acd6bf..e24025a 100644
--- a/frontend/src/components/sidebar/presentations/SidebarHome.jsx
+++ b/frontend/src/components/sidebar/presentations/SidebarHome.jsx
@@ -30,36 +30,31 @@
 } from './SidebarComponents';
 
 const genLabelQuery = (eleType, labelName, database) => {
-  function age() {
-    if (eleType === 'node') {
-      if (labelName === '*') {
-        return `SELECT * from cypher('${database.graph}', $$
-          MATCH (V)
-          RETURN V
-$$) as (V agtype);`;
-      }
+  if (eleType === 'node') {
+    if (labelName === '*') {
       return `SELECT * from cypher('${database.graph}', $$
-          MATCH (V:${labelName})
-          RETURN V
+        MATCH (V)
+        RETURN V
 $$) as (V agtype);`;
     }
-    if (eleType === 'edge') {
-      if (labelName === '*') {
-        return `SELECT * from cypher('${database.graph}', $$
-          MATCH (V)-[R]-(V2)
-          RETURN V,R,V2
-$$) as (V agtype, R agtype, V2 agtype);`;
-      }
+    return `SELECT * from cypher('${database.graph}', $$
+        MATCH (V:${labelName})
+        RETURN V
+$$) as (V agtype);`;
+  }
+  if (eleType === 'edge') {
+    if (labelName === '*') {
       return `SELECT * from cypher('${database.graph}', $$
-          MATCH (V)-[R:${labelName}]-(V2)
-          RETURN V,R,V2
+        MATCH (V)-[R]-(V2)
+        RETURN V,R,V2
 $$) as (V agtype, R agtype, V2 agtype);`;
     }
-    return '';
+    return `SELECT * from cypher('${database.graph}', $$
+        MATCH (V)-[R:${labelName}]-(V2)
+        RETURN V,R,V2
+$$) as (V agtype, R agtype, V2 agtype);`;
   }
-  if (database.flavor === 'AGE') {
-    return age();
-  }
+
   return '';
 };
 
@@ -128,7 +123,7 @@
 );
 NodeItems.propTypes = {
   database: PropTypes.shape({
-    flavor: PropTypes.string,
+    graph: PropTypes.string,
   }).isRequired,
   label: PropTypes.string.isRequired,
   cnt: PropTypes.number.isRequired,
@@ -188,7 +183,7 @@
 ));
 EdgeItems.propTypes = {
   database: PropTypes.shape({
-    flavor: PropTypes.string,
+    graph: PropTypes.string,
   }).isRequired,
   label: PropTypes.string.isRequired,
   cnt: PropTypes.number.isRequired,
diff --git a/frontend/src/features/database/DatabaseSlice.js b/frontend/src/features/database/DatabaseSlice.js
index 7955100..053fd5c 100644
--- a/frontend/src/features/database/DatabaseSlice.js
+++ b/frontend/src/features/database/DatabaseSlice.js
@@ -91,7 +91,6 @@
       password: action.payload.password,
       database: action.payload.database,
       graph: action.payload.graph,
-      flavor: action.payload.flavor,
       status: 'connected',
     }),
     [connectToDatabase.rejected]: () => ({
@@ -101,7 +100,6 @@
       password: '',
       database: '',
       graph: '',
-      flavor: '',
       status: 'disconnected',
     }),
     [disconnectToDatabase.fulfilled]: () => ({
@@ -111,7 +109,6 @@
       password: '',
       database: '',
       graph: '',
-      flavor: '',
       status: 'disconnected',
     }),
     [getConnectionStatus.fulfilled]: (state, action) => ({
@@ -121,7 +118,6 @@
       password: action.payload.password,
       database: action.payload.database,
       graph: action.payload.graph,
-      flavor: action.payload.flavor,
       status: 'connected',
     }),
     [getConnectionStatus.rejected]: () => ({
@@ -131,7 +127,6 @@
       password: '',
       database: '',
       graph: '',
-      flavor: '',
       status: 'disconnected',
     }),
   },
