Více

Vytvořte primární a cizí klíč na Spatialite

Vytvořte primární a cizí klíč na Spatialite


Snažím se vytvořit databázi na spatialite (z různých důvodů nemohu použít PostGis). Potřebuji propojit tabulku s jinou pomocí cizího klíče. Problém s spatialitem spočívá v tom, že poté není možné definovat primární klíč, proto vytvořím novou tabulku (tMAJ_TBE_REB_15₂) s primárním klíčem „C_SGE_15“ (je to pole bez nulové hodnoty a jedinečných hodnot) a pak zkusím zkopírovat obsah z druhého (které mají výchozí primární klíč PUIK).

Když spustím tento příkaz, zobrazí se tato chybová zpráva.

Neočekávaný chybný aparát lors de l'exécution du code Python: Traceback (poslední hovor poslední): Soubor "C: / Documents and Settings / XXXXXXX / .qgis2 / python / plugins  QspatiaLite  QspatiaLiteApp.py", řádek 178, hlavička runQuery, data = self.db.executeQuery (dotaz) Soubor "C: / Documents and Settings / XXXXXXX / .qgis2 / python / plugins  QspatiaLite  Classes  Database.py", řádek 51, v executeQuery cursor.execute (dotaz , parametry) IntegrityError: sloupec C_SGE_15 není jedinečný Verze de Python: 2.7.4 (výchozí, 6. dubna 2013, 19:54:46) [MSC v.1500 32 bitů (Intel)] Verze QGIS: 2.8.2-Wien Wien, 1b929ef Chemin versus Python: ['C: / Documents and Settings / XXXXXXX / .qgis2 / python / plugins  processing', 'C: / PROGRA ~ 1 / QGISWI ~ 1 / apps / qgis /./ python', u'C: / Documents and Settings / XXXXXXX / .qgis2 / python ', u'C: / Documents and Settings / XXXXXXX / .qgis2 / python / plugins', 'C: / PROGRA ~ 1 / QGISWI ~ 1 / apps / qgis /./ python / plugins ',' C:  PROGRA ~ 1  QGISWI ~ 1  bin  python27.zip ',' C:  PROGRA ~ 1  QGISWI ~ 1  aplikace  Python27  DLL ',' C:  PROGRA ~ 1  QGISWI ~ 1  aplikace  P ython27  lib ',' C:  PROGRA ~ 1  QGISWI ~ 1  aplikace  Python27  lib  plat-win ',' C:  PROGRA ~ 1  QGISWI ~ 1  aplikace  Python27  lib  lib-tk ',' C:  PROGRA ~ 1  QGISWI ~ 1  bin ',' C:  PROGRA ~ 1  QGISWI ~ 1  aplikace  Python27 ',' C:  PROGRA ~ 1  QGISWI ~ 1  apps  Python27  lib  site-packages ',' C:  PROGRA ~ 1  QGISWI ~ 1  aplikace  Python27  lib  site-packages  PIL ',' C:  PROGRA ~ 1  QGISWI ~ 1  apps  Python27  lib  site-packages  jinja2-2.7.2-py2 .7.egg ',' C:  PROGRA ~ 1  QGISWI ~ 1  apps  Python27  lib  site-packages  markupsafe-0.23-py2.7-win32.egg ',' C :  PROGRA ~ 1  QGISWI ~ 1  apps  Python27  lib  site-packages  python_dateutil-2.2-py2.7.egg ',' C:  PROGRA ~ 1  QGISWI ~ 1  apps  Python27  lib  site-packages  pytz-2014.2-py2.7.egg ',' C:  PROGRA ~ 1  QGISWI ~ 1  aplikace  Python27  lib  site-packages  win32 ',' C:  PROGRA ~ 1  QGISWI ~ 1  apps  Python27  lib  site-packages  win32  lib ',' C:  PROGRA ~ 1  QGISWI ~ 1  apps  Python27  lib  site-packages  Pythonwin ',' C:  PROGRA ~ 1  QGISWI ~ 1  aplikace  Python27  lib   site-packages  Shapely-1.2.18-py2.7-win32.egg ',' C :  PROGRA ~ 1  QGISWI ~ 1  apps  Python27  lib  site-packages  six-1.6.1-py2.7.egg ',' C:  PROGRA ~ 1  QGISWI ~ 1  apps  Python27  lib  site-packages  wx-2.8-msw-unicode ', u'C: / Documents and Settings / XXXXXXX / .qgis2 // python', 'C:   Documents and Settings  XXXXXXX . Qgis2  python  plugins  DigitizingTools  tools ',' C:  Documents and Settings  XXXXXXX . Qgis2  python  plugins  mmqgis / formuláře ',' C:  PROGRA ~ 1  QGISWI ~ 1  aplikace  qgis  python  pluginy  fTools  tools ',' C: / XXX / MAJ_TBE_REB ']

Abych pokračoval ve své myšlence, chtěl bych mít odkaz na geografickou tabulku pomocí pole C_SGE_15 na jinou tabulku tMAJ_TBE_REB_15₂, která obsahuje popis atd. Cílem je pak vytvořit snadno použitelný formulář. Dělám to na Qspatialite a Qgis 2.8.2.

CREATE TABLE 'tMAJ_TBE_REB_15_2' ('C_SGE_09' TEXT, 'MODIF_15' INTEGER, 'TypModif15' TEXT, 'C_SGE_15' TEXT NOT NULL PRIMARY KEY, 'NOM_09' TEXT, 'NOM_15' TEXT, 'TBE_0' 'REB_09' INTEGER, 'REB_15' INTEGER, 'Espec_pres' TEXT, 'Obs_2009' TEXT, 'Obs_2015' TEXT) VLOŽTE DO "tMAJ_TBE_REB_15_1" ('C_SGE_09', 'MODIF_15', 'TypModif15', 'C_SGE_ , 'NOM_15', 'TBE_09', 'TBE_15', 'REB_09', 'REB_15', 'Espec_pres', 'Obs_2009', 'Obs_2015') SELECT 'C_SGE_09', 'MODIF_15', 'TypModif15', 'C_SGE_15', 'NOM_09', 'NOM_15', 'TBE_09', 'TBE_15', 'REB_09', 'REB_15', 'Espec_pres', 'Obs_2009', 'Obs_2015', FROM "Modifs_MAJ_TBE_REB_15"

Vidí někdo, odkud chyba pochází?


Jste si jisti, že neexistují žádné duplicitní hodnoty C_SGE_15? Můžete zkontrolovat pomocí:

SELECT Count (*) FROM "Modifs_MAJ_TBE_REB_15" AS t1 JOIN "Modifs_MAJ_TBE_REB_15" AS t2 ON t1.C_SGE_15 = t2.C_SGE_15 WHERE t1.ROWID 

Pokud získáte počet> 0, máte několik řádků se stejným C_SGE_15.


Podívejte se na video: ERD - Primary keyForeign key v aplikaci Lucidchart