Spalten
Verwenden Sie immer den MapEdit AppBuilder zum erzeugen von Tabellen/Views/Spalten etc. Wenn Sie andere Datenbank Software Werkzeuge wie Oracle Console, DBeaver, PGAdmin, SQL Sheet oder ähnliches verwenden, dann müssen sie nach der Änderung die Datenbank Verbindung aktualisieren!!
Anlegen von neuen Spalten
Zum anlegen von Spalten markieren Sie die Tabelle im Baum links und wählen dann oben den Spaltentyp.
Allgemeine Optionen aller Spaltentypen
Default Value / Vorgabe Wert
Hier kann optional ein Wert angegeben werden mit dem beim anlegen eines neuen Datensatzes eine Spalte gefüllt wird.
Das kombinieren dieser Option mit der Option "Eindeutig" kann Fatale Folgen haben. z.B. kann es nun beim Digitalisieren neuer Objekte zu Eindeutigkeitsfehlern kommen.
Eindeutig
Wird diese Option aktiviert, dann wird von der Datenbank erzwungen das der Wert der in die Spalte eingegeben wird eindeutig in allen Datensätzen der Tabelle ist. Hierbei werden leere Werte nicht mit einbezogen.
Dazu wird vom Programm ein eindeutiger Datenbank Index auf diese Spalte angelegt. Gibt der Anwender einen nicht eindeutigen Wert ein wirft die Datenbank einen Fehler. Die wird z.B. gerne für den Namen eines Objektes genutzt.
Wenn Sie diese Option aktivieren sollte die Option "Optional" immer eingeschalten und bei Default Value kein Wert angegeben sein. Ansonsten wird es zu Problemen beim Digitalisieren kommen.
Ob eine Spalte einen Eindeutige Indexe hat erkennt man in der Tabellenansicht an einem X in eckigen Klammern in der Spalte "Index". In dem Beispiel unten sind das Feld FID und das Feld NAME.
Wenn Sie den Eindeutigen Index wieder entfernen wollen markieren Sie die Tabelle, klicken Sie oben den Knopf "Tabelle"->"Indexe", wählen Sie den Index in der Liste und drücken Sie "Entfernen".
Wenn Sie hinterher einen Eindeutigen Index anlegen wollen markieren Sie die Tabelle, klicken Sie oben den Knopf "Tabelle"->"Indexe", drücken Sie "Hinzufügen" und wählen Sie den Spalten Namen und aktivieren Sie unten die Option "Unique Index" (Eindeutiger Index).
Sie können auch einen Eindeutigen Index auf eine Kombination mehrerer Spalten anlegen. Markieren Sie die Tabelle, klicken Sie oben den Knopf "Tabelle"->"Indexe", drücken Sie "Hinzufügen" und wählen Sie alle Spalten Namen.
In der Tabellenansicht sehen Sie in der Spalte "Index" dann die Namen der Felder in eckigen Klammern.
Indiziert
Wird diese Option aktiviert, dann wird ein Index auf die Spalte angelegt.
Indexe beschleunigen die Suche nach einem Wert, verlangsamen jedoch das einfügen/updaten von Datensätzen weil der Index mit verwaltet werden muss.
Wenn eine Spalte nur wenige verschiedene Werte hat ist es nicht immer sinnvoll einen Index anzulegen. Besuchen Sie eine Datenbankschulung um zu lernen wann es Sinn macht einen Index anzulegen.
Ob eine Spalte einen Indexe hat erkennt man in der Tabellenansicht an einem X in der Spalte "Index". In dem Beispiel unten sind das Feld GEOM und das Feld ID_EPOCH.
Wenn Sie den Index wieder entfernen wollen markieren Sie die Tabelle, klicken Sie oben den Knopf "Tabelle"->"Indexe", wählen Sie den Index in der Liste und drücken Sie "Entfernen".
Wenn Sie hinterher einen Index anlegen wollen markieren Sie die Tabelle, klicken Sie oben den Knopf "Tabelle"->"Indexe", drücken Sie "Hinzufügen" und wählen Sie den Spalten Namen.
Sie können auch einen Index auf eine Kombination mehrerer Spalten anlegen. Markieren Sie die Tabelle, klicken Sie oben den Knopf "Tabelle"->"Indexe", drücken Sie "Hinzufügen" und wählen Sie alle Spalten Namen.
In der Tabellenansicht sehen Sie in der Spalte "Index" dann die Namen der Felder (Ohne eckige Klammern)
Optional
Wird diese Option deaktiviert dann erzwingt die Datenbank das in das Feld einen Wert eingetragen werden muss.
Die Datenbank legt dazu das Feld als "NOT NULL" Feld an.
In der Tabelle sehen Sie bei diesen Felder ein X in der Spalte "Nicht NULL".
Wir raten dazu das wenn Sie diese Option deaktivieren das Sie dann immer einen "Default Value/Wert" angeben.
Wenn Sie Fachschalen Plugins oder C#/VB Code nutzen, wie z.B. Die Elektro Fachschale, sollte Sie vorsichtig mit der Nutzung dieser Option umgehen wenn es sich nicht um selbst erzeugte Tabellen handelt. Sollte das Plugin/Code Datensätze per Programm erzeugt dann weis dieser Code ggf nichts von ihrer Einstellung und der Wert der Spalte wird nicht gefüllt was dazu führt das die Datenbank einen Fehler wirft. Deswegen sollte Sie wenn Sie Optional deaktivieren immer einen "Default Value/Wert" angeben, dadurch wird das Feld mit dem Wert gefüllt und der Datensatz kann eingefügt werden.
Sie können das erzwingen eine Eingabe wahlweise auch stattdessen im Formular Designer für ein Feld festlegen. Die erzwingt das verhalten dann nur auf UI Seite und lässt es weiterhin auf der Datenbankseite zu.
Problematische Kombination von Eindeutig mit "nicht Optional" oder "Default Value"
Diese Kombinationen sind extrem problematisch!
Wenn Sie z.B. digitalisieren wird nun ein Datensatz eingefügt mit dem in den Optionen angegebenen Vorgabewert.
Wird nun nochmal digitalisiert dann gibt es schon einen Datensatz mit diesem Wert und das einfügen wirft eine Fehler weil der Spaltenwert nicht eindeutig ist.
D.h. direkt nach dem Digitalisieren muss dann zuerst der Wert auf einen anderen nicht eindeutigen Wert geändert werden damit das naechste Digitalisieren gelingt.
Das gleiche Problem entsteht bei allen Stellen wo das Programm Datensätze der Code einfügen will. z.B. Imports/Excel update/Plugins/C#/VB Script code usw.
Ab Version 24.2.71 gibt es im Form Designer unter "-> Mehr -> Optionen" eine Option "Beim Digitalisieren Attributwerte eingeben" die diese Problem beim digitalisieren mit Formularen beseitigt.
Typ Text
Zum anlegen von Text Feldern.
Sie haben die Möglichkeit einen Defaultwert vorzugeben und zu bestimmen ob das Feld eindeutig oder optional ist sowie ob das Feld mit einem Index belegt werden soll.
Bei Oracle gibt es die Option "Extra Lang (CLOB)". Sie sollten diese Option wenn möglich vermeiden. Lesen Sie dazu "Large Text Felder in Oracle" ganz unten.
Typ Ganzzahl
Verwenden Sie diesen Feld Typ wenn Sie einen Zahlenwert ohne Nachkommastellen haben.
Bei der Unit/Einheit kann optional einen Einheit für den Wert festgelegt werden.
Typ Dezimalzahl
Dezimalzahlen = Zahlen mit Nachkommastellen
Typ Ja/Nein
Verwenden Sie diesen Feld Typ wenn Sie einen Ja/Nein, Offen/Geschlossen etc Wert haben.
Typ Datum
Verwenden Sie diesen Feld Typ wenn Sie einen Datumswert speichern wollen.
Typ Liste
Verwenden Sie diesen Feld Typ wenn Sie das Feld für eine Kennungsliste/Auswahlliste verwenden wollen.
Legen Sie dazu vorab die Kennungslisten Tabelle an die sie verwenden wollen.
Die Funktion fügt je nach gewählter Kennungsliste, ein Feld von Typ Ganzzahl oder Text hinzu und legt eine Relation zu der gewählten Kennungslisten Tabelle an.
Wählen Sie zuerst die Kennungsliste aus die verwendet werden soll.
Wählen Sie dann welche Spalte der Kennungsliste Tabelle zur Verknüpfung verwendet werden soll. Im Normalfall das Feld ID.
Danach können Sie eine Spalten Namen setzen und weitere Optionen einstellen.
Weitere Funktionen
Weitere Funktionen finden Sie im Knopf "Spalte"
Markieren Sie die Spalte und drücken Sie dann den Knopf "Spalte" und dann die jeweilige Funktion.
Spalte - Ändern
Hier kann der Name / Titel und die Einheit der Spaltendefinition geändert werden
Spalte - Datentyp ändern
Hier kann der Datentype der Spalte geändert werden.
Beachten Sie die Hinweise im Dialog.
Das ändern von Spaltentypen ist nicht immer unproblematisch, speziell wenn Spalten bereits von Views verwendet werden.
Das Programm muss dann ggf die Views löschen und neu anlegen.
Sie sollten immer eine Sicherung der Datenbank machen wenn Sie Datentypen ändern! MuM übernimmt keine Haftung für Datenverluste!
SQLite kann das von sich aus nicht und dort muss dazu intern von der Software jeweils die Tabelle komplett neu angelegt werden. Sprich Trigger/Views und Indexe werden dabei gedroppt und neu angelegt.
Spalte - Relationen
Hier können die Relation der Spalten zu anderen Tabellen/Spalten festgelegt werden.
Spalte - Duplizieren
Hiermit kann man die Spaltendefinitionen einer anderen Tabelle (in einer beliebigen Datenbank) kopieren (Duplizieren).
Dazu die Tabelle wählen, welche die Spalten bekommen soll. Dann Spalte -> Duplizieren auswählen und Datenbank und Tabelle, aus welcher die Spalten übernommen werden sollen, wählen. Es werden nur Spalten angezeigt die die Tabelle noch nicht hat. Geometry- und System Spalten (Area etc) kommen nicht zur Auswahl.
Dies kann zum Bespiel auch zum Anlegen von Modelltabellen benutzen werden.
Spalte - Default Wert ändern
Hiermit kann der Default Wert auf einen neuen Wert festgelegt werden.
Spalte - Optional Wert ändern(NOT NULL)
Hiermit kann der Optional Wert geändert werden.
Beim Optionalwert muss man wenn man diesen von NULL nach NOT NULL ändert einen Vorgabewert für die vorhandenen Datensätze angeben. D.h. alle Datensätze die in der Spalte NULL stehen haben werden dann auf diesen Wert gesetzt. Dieser Vorgabewert ist nicht optional muss immer angegeben werden selbst wenn die Tabelle noch keine Datensätze hat. Dies ist notwendig wenn aus der Datenbank eine Datenmodel Vorlage erzeugt wird und diese dann wiederum auf eine Datenbank angewendet wird in der schon Datensätze drin sind.
Spalte - Entfernen
Hiermit kann eine Spaltendefinition in der Tabelle gelöscht werden.
Ab Version 24.2.66 gibt es eine zusätzliche Prüfung ob die Spalte noch von einem View verwendet wird.
Hinweis: Postgres verbietet das Löschen wenn eine Spalte noch in einem View verwendet wird. Bei Oracle gehen die Views kaputt wenn man Spalten löscht.
Das Programm versucht bei Oracle herauszufinden ob eine Spalte noch von einem View verwendet wird. Es gibt in Oracle leider keine Funktion um dies herauszufinden. Man kann in Oracle nur herausfinden welche Tabellen ein View verwendet aber nicht welche Spalte der Tabelle. MapEdit verwendet deswegen eine heuritische Methode um herauszufinden ob die Spalte verwendet wird. Diese bedeutet das es ggf ein View gemeldet wird der eine Spalte mit dem gleichen Namen aber einer anderen Tabelle verwendet.
D.h. der Anwender muss ggf selbst entscheiden ob er löscht oder nicht.
Nach dem löschen werden alle beteiligten Views geprüft und defekte Views angezeigt. Diese müssen dann ggf repariert werden.
Spalte - Kennungsliste erzeugen (mit Daten)
(verfügbar ab Version 23.1.61)
Hiermit kann man eine Kennungslisten Tabelle auf eine vorhandene Spalte erzeugen.
Wenn die Spalte bereits Daten enthält werden diese in die Kennungsliste gefüllt.
Wenn die Spalte vom Typ Text ist wird der Wert statt in die Spalte ID
in die Spalte SHORT_VALUE gefüllt und als Kennungslisten Schlüssen verwendet.
Large Text Felder in Oracle
Auch wenn das CLOB von Oracle unterstützt wird, wird von einer Nutzung dringend abgeraten. Es sollte nur in Ausnahmefällen genutzt werden, sofern es wirklich benötigt wird.
Möchte man in ein einer Tabelle eine große Textspalte einfügen, so wird diese wie eine gewöhnliche Textspalte eingefügt. Anschließend existiert eine Option zum Erstellen einer "Extra Large"-Spalte (CLOB).
Wählt man diese Option, so erscheint eine Warnmeldung.
CLOB-Felder bereiten an einigen Stellen Probleme.
Während es möglich ist Formulare mit CLOB-Spalten anzuzeigen, zu editieren und zu speichern, kann es beim Exportieren der Daten zu Datenverlust kommen. Der Export nach Excel ist zwar grundsätzlich möglich, jedoch wird bei manchen Dateiformaten ein Teil der Zeichenkette abgeschnitten, sofern diese zu lang ist:
Format | maximale Zeichenlänge |
---|---|
CSV | unbegrenzt |
XLS | maximal 2038 Zeichen |
XLSX | maximal 32787 Zeichen |
Zudem muss bei der Verwendung von CLOB beachtet werden, dass bei dem Öffnen eines Formulars in ME Desktop direkt 100 Datensätze vorab geladen werden. Befindet sich nun ein CLOB in der Definition der Tabelle, welche durch das Formular geöffnet wird, so müssen sehr viele Daten geladen werden. Hierdurch kann der gesamte Prozess sehr langsam werden.
Des Weiteren muss beachtet werden, dass auf diese Felder kein Index erstellt werden.
Zuletzt ist anzumerken, dass es zu einer starken Verlangsamung kommen kann, wenn Tabellen mit CLOBs an anderen Stellen verwendet werden, so zum Beispiel im SQL für einen Tooltip oder in der Kartenanzeige. Hierbei sollte überlegt werden, ob nicht vielleicht ein varchar2
-Feld die bessere Alternative wäre.
Auch das Autodesk SQL Sheet verarbeitet keine CLOB-Felder; bei der Nutzung muss explizit "Execute with SQL Plus" ausgewählt werden.
Large Text in Postgres
Da in Postgres Standard-Textfelder direkt sehr groß sind, gibt es in Postgres kein CLOB.