diff --git a/database/common.go b/database/common.go
new file mode 100644
index 0000000..653fccc
--- /dev/null
+++ b/database/common.go
@@ -0,0 +1,147 @@
+/*
+* Copyright 2022-present Open Networking Foundation
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+// This implementation of database assumes that it is working for
+// Open ONU adapter. Thus, it assumes some base path for all the
+// database operations. For all database operations, the key passed is
+// added to the database base path.
+
+package database
+
+import "fmt"
+
+const (
+	// PresentVersion represnts the Present version
+	// Modify this as we give Major version releases
+	PresentVersion = "v1"
+	// PreviousVersion represnts the Previous version
+	PreviousVersion = "v1"
+)
+
+//These are present path where different database elements are store in database
+//In case any of these paths change, update the present and previous version
+const (
+	BasePath               string = "service/vgc/%s/"
+	ServicePath            string = "services/"
+	DevicePath             string = "devices/%s/"
+	DevicePortPath         string = DevicePath + "ports/"
+	DeviceFlowPath         string = DevicePath + "flows/"
+	DeviceGroupPath        string = DevicePath + "groups/"
+	DeviceMeterPath        string = DevicePath + "meters/"
+	VnetPath               string = "vnets/"
+	VpvPath                string = "vpvs/"
+	MvlanPath              string = "mvlans/"
+	MeterPath              string = "meters/"
+	IgmpConfPath           string = "igmp/conf/"
+	IgmpGroupPath          string = "igmp/groups/"
+	IgmpDevicePath         string = "igmp/devices/"
+	IgmpChannelPath        string = "igmp/channels/"
+	IgmpPortPath           string = "igmp/ports/"
+	IgmpProfPath           string = "igmp/prof/"
+	McastConfigPath        string = "igmp/mcastconfig/"
+	MigrationInfoPath      string = "data/migration/"
+	LogLevelPath           string = "log-level/"
+	HealthPath             string = "health/"
+	PonCounterPath         string = "pon-counter/"
+	OltIgmpCounterPath     string = "olt-igmp-counter/"
+	ChannelCounterPath     string = "channel-counter/"
+	ServiceCounterPath     string = "service-counter/"
+	NbDevicePath           string = "nb-device/"
+	DeviceFlowHashPath     string = DevicePath + "flowhash"
+	PortAlarmProfilePath   string = "port-alarm-profile/"
+	PortAlarmDataPath      string = DevicePortPath + "portalarmdata/"
+	SubAlarmDataPath       string = DevicePath + "sub-alarm-data/"
+	ServicesMigrateReqPath string = DevicePath + "migrateServicesReq/"
+)
+
+//PresentVersionMap - map of present version for all database tables
+var PresentVersionMap = map[string]string{
+	ServicePath:            "v3",
+	DevicePath:             "v1",
+	DevicePortPath:         "v1",
+	DeviceFlowPath:         "v1",
+	DeviceGroupPath:        "v1",
+	DeviceMeterPath:        "v1",
+	VnetPath:               "v3",
+	VpvPath:                "v3",
+	MvlanPath:              "v3",
+	MeterPath:              "v1",
+	IgmpConfPath:           "v2",
+	IgmpGroupPath:          "v1",
+	IgmpDevicePath:         "v1",
+	IgmpChannelPath:        "v1",
+	IgmpPortPath:           "v1",
+	IgmpProfPath:           "v1",
+	McastConfigPath:        "v1",
+	MigrationInfoPath:      "v1",
+	LogLevelPath:           "v1",
+	HealthPath:             "v1",
+	PonCounterPath:         "v1",
+	OltIgmpCounterPath:     "v1",
+	ChannelCounterPath:     "v1",
+	ServiceCounterPath:     "v1",
+	NbDevicePath:           "v1",
+	DeviceFlowHashPath:     "v1",
+	PortAlarmProfilePath:   "v1",
+	PortAlarmDataPath:      "v1",
+	SubAlarmDataPath:       "v1",
+	ServicesMigrateReqPath: "v1",
+}
+
+//PreviousVersionMap - map of previous version for all database tables
+var PreviousVersionMap = map[string]string{
+	ServicePath:            "v2",
+	DevicePath:             "v1",
+	DevicePortPath:         "v1",
+	DeviceFlowPath:         "v1",
+	DeviceGroupPath:        "v1",
+	DeviceMeterPath:        "v1",
+	VnetPath:               "v2",
+	VpvPath:                "v2",
+	MvlanPath:              "v2",
+	MeterPath:              "v1",
+	IgmpConfPath:           "v1",
+	IgmpGroupPath:          "v1",
+	IgmpDevicePath:         "v1",
+	IgmpChannelPath:        "v1",
+	IgmpPortPath:           "v1",
+	IgmpProfPath:           "v1",
+	McastConfigPath:        "v1",
+	MigrationInfoPath:      "v1",
+	LogLevelPath:           "v1",
+	HealthPath:             "v1",
+	PonCounterPath:         "v1",
+	OltIgmpCounterPath:     "v1",
+	ChannelCounterPath:     "v1",
+	ServiceCounterPath:     "v1",
+	NbDevicePath:           "v1",
+	DeviceFlowHashPath:     "v1",
+	PortAlarmProfilePath:   "v1",
+	PortAlarmDataPath:      "v1",
+	SubAlarmDataPath:       "v1",
+	ServicesMigrateReqPath: "v1",
+}
+
+//DBVersionMap - Version of tables present in DB
+var DBVersionMap = PreviousVersionMap
+
+// GetModuleKeypath returns the DB keypath for particular module along with version
+func GetModuleKeypath(key, ver string) string {
+	return fmt.Sprintf(BasePath, ver) + key
+}
+
+// GetKeyPath returns the base path for the given key along with version
+func GetKeyPath(key string) string {
+	return fmt.Sprintf(BasePath, PresentVersionMap[key]) + key
+}
