CREATE TABLE IF NOT EXISTS mapitem( ename PRIMARY KEY, name TEXT NOT NULL, addr TEXT, lon REAL, lat REAL ); CREATE TABLE IF NOT EXISTS maptype( ename, maptype TEXT, FOREIGN KEY(ename) REFERENCES mapitem(ename) ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE(ename, maptype) ); CREATE TABLE IF NOT EXISTS attribute( ename, maptype TEXT, FOREIGN KEY(ename) REFERENCES mapitem(ename) ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE(ename, maptype) ); CREATE TABLE IF NOT EXISTS object( ename, objtype TEXT, jsonval TEXT, FOREIGN KEY(ename) REFERENCES mapitem(ename) ON DELETE CASCADE ON UPDATE CASCADE, CHECK (objtype IN ( 'point', 'multipoint', 'linestring', 'multilinestring', 'polygon', 'multipolygon')), UNIQUE(ename, objtype, jsonval) );