Tabellen definieren

Die Definition einer Tabelle erfolgt in zwei Schritten: Zunächst werden über das folgende Menü die Grunddaten festgelegt. Anschließend können eine oder mehrere Spalten über den Button <Neue Spalte> hinzugefügt werden.

SuchenNeue SpalteSpeichernAbbruch



Hilfe
Übersicht  (1/3)
 < 1 > 
 +    Artikel
 +    Umsatz
 +    Vertreter
Id
Tabellenname *
Tabellen-Alias
Beschreibung
Sondertyp
Löschen erlauben *
Url-Überschreibungen *
Xml-Ausgabe *
Owner
Protokoll2005-10-03 21:19:48, admin    Liste

Löschen

Wesentlich sind hier die drei Felder <Tabellenname>, <Sondertyp> und <Löschen erlauben>. Der Tabellenname darf - negativ formuliert - kein Leerzeichen und nicht '-' enthalten. Es sind jedoch alle Unicode-Buchstaben aus den Kategorien Letter Uppercase/Lowercase/Titlecase/Other als erstes Zeichen sowie, ab dem zweiten Zeichen zusätzlich die Unicode-Kategorien Number, Decimal Digit, Number, Letter und '_' möglich, sofern die Unicode-Zeichen nicht jünger als die Version 2.1 sind. Es ist folglich möglich, Tabellen- und Spaltennamen mit Buchstaben plus Akzenten, spanischen oder arabischen Zeichen zu erstellen. Da als serverseitige Standardeinstellung Latin1_General_BIN verwendet wird, ist bei der Erstellung von Tabellen zwischen Groß- und Kleinschreibung zu unterscheiden.

<Sondertyp> ermöglicht es, die Tabelle mit speziellen Eigenschaften zu erzeugen:

  • no type: Dies ist die Standardeinstellung für Tabellen ohne eine besondere Funktion.
  • bitTable: Dieser Wert legt fest, daß die Tabelle als Bittabelle erzeugt wird. Sie kann maximal 31 Zeilen enthalten und als Grundlage für eine Relation auf einer bitSet-Spalte verwendet werden. In diesem Fall genügt es, zur Tabelle eine einzige Textspalte zu erstellen.
  • Newsletter-Mails: Eine solche Tabelle besitzt nur die vordefinierten Spalten 'mail', 'date_created', 'confirmed' und 'identifier'. Sie wird als Basis für die Selbstanmeldung von Newsletter-Interessenten verwendet. Der Newsletter wird an alle Mails versendet, die in der Spalte 'confirmed' bestätigt worden sind. Administratoren können Zeilen in dieser Tabelle löschen, jedoch weder bearbeiten noch Zeilen hinzufügen.
  • Newsletter: Diese Tabelle enthält die Spalten 'Newsletter-Name', '_tbl_TablesId', 'date_sent', 'newsletter_State' und 'newsletter_text'. Der Name des Newsletters wird später als Betreff ausgegeben, '_tbl_TablesId' bezeichnet die Id für die dem Newsletter zugeordnete Newsletter-Mailtabelle. 'date_sent' legt das Versendedatum fest, jeder Newsletter kann nur genau einmal versandt werden. 'newsletter_State' nutzt die einfachen Relationen 1;bereit;2;wird versandt;3;versendet und wird nur vom System geschrieben. Der Wert wird auf 2 gesetzt, wenn Versanddatum und Uhrzeit erreicht sind, anschließend kann es einige Minuten dauern, bis der Versand tatsächlich beginnt. Nach Abschluß wird der Wert auf 3 geändert. 'newsletter_text' enthält den zu versendenden Text.

    Der Newsletter-Text kann die beiden Sonderausdrücke '{0}' und '{1}' enthalten. Der erste Wert wird mit der Mail des Empfängers, der zweite mit dem zu dieser Mail gehörenden Schlüssel zum Abmelden belegt. Ein Beispiel:

    Liebe Empfänger des Newsletters:
    
    Ihre Mail lautet: {0}
    Wenn Sie den Newsletter abbestellen wollen,
    wechseln Sie zur Seite
    
    https://beispiel.server-daten.de/newsletter-unsubscribe.html
    
    und kopieren den folgenden Wert in das dortige Feld:
    
    {1}
    
    Vielen Dank!
    Die später zu versendende Mail enthält weder die Zahlen 0/1 noch die geschweiften Klammern. Stattdessen werden die für diese Mail gültigen Werte eingesetzt. Eine Ausgabeseite zum Abmelden muß natürlich zuvor erstellt worden sein.
  • FTP: Eine Tabelle von diesem Typ kann mehrere Zeilen mit FTP-Daten (FTP-Server, Nutzername, Passwort usw.) verwalten und diese für den Upload von Dateien und Bildern bereitstellen.

    Wichtig: Eine Tabelle von diesem Typ kann pro Datenbank nur einmal erstellt werden. Ferner müssen nach der Erstellung oder Löschung einer solchen Tabelle die internen Standardprozeduren, die u.a. die Tabellenspalten speichern, neu erstellt werden. Das Feld 'FTP-Server' für die Tabellenspalten erhält eine neue Pulldown-Liste. Normalerweise werden die Standardprozeduren nur bei der Erstellung der Datenbank geschrieben. Die Datenbank ist während dieser Zeit in einem inkonsistenten Zustand.

    Folgerung: Verwenden Sie nach dem Speichern einer neuerstellten FTP-Tabelle oder nach dem Löschen einer erstellten FTP-Tabelle Ihre Datenbank für ein bis fünf Minuten nicht! Falls Sie Ihre Datenbank doch verwenden, erhalten Sie diverse Fehlermeldungen. Und server-daten erhält jedesmal eine Bug-Benachrichtigung per Mail, allerdings wird aus der Fehlerbeschreibung die Ursache deutlich.

  • PM-Tabelle: Fügt der vom Benutzer definierten Tabelle nach der Erstellung der Spalten einige Zusatzspalten hinzu und bietet die zusätzliche Unterstützung, die für Private-Message-Systeme notwendig ist. Alles weitere hierzu auf der gesonderten Seite Private Message .
  • UID-Tabelle: Fügt der vom Benutzer definierten Tabelle eine neue Spalte USER_ID / integer an erster Position hinzu. Ferner wird diese Spalte um eine Relation auf die interne Nutzertabelle ergänzt. Als Ergebnis können zu jedem Nutzer mehrere Datensätze erstellt werden. Oder die Spalte wird um einen Constraint, eine Eindeutigkeitsforderung ergänzt. Dann kann eine solche Tabelle genutzt werden, daß anonyme Nutzer mit Nick weitere Daten (Name, Adresse, Mail) hinterlegen und diese anderen Nutzern zugänglich machen.

    Für die letztere Variante findet sich ein einfaches Beispiel unter https://beispiel.server-daten.de/, der Punkt 'Nutzer-Login'. Nutzer können sich nach erfolgter Anmeldung einloggen und ihrem Nick Namen und Anrede zuweisen.

<Löschen erlauben>: Wird diese Spalte auf 'Nein' gesetzt, so ist das Löschen der Zeilen dieser Tabelle, nicht mehr möglich, auch wenn die Berechtigung hierfür vorliegt. Dies gilt für sämtliche Nutzer, auch für den Administrator. In der internen Maske wird der Löschbutton ausgeblendet. Wird von einer Ausgabeseite her versucht, eine Zeile zu löschen, so wird eine explizite Fehlermeldung ausgegeben.

<Url-Überschreibungen>: Hier wird standardmäßig die Verwendung dieser Tabelle als Url-Überschreibung verweigert. Wurde eine Ausgabeseite mit sd:input-table - oder sd:rs -Elementen, dynamischen inneren Elementen und für eine andere Tabelle erstellt, so kann mit dieser Ausgabeseite auch jede Tabelle ausgegeben bzw. bearbeitet werden, für welche dieses Attribut eine entsprechende Freigabe zuläßt. Für Ausgabeseiten, die nur von autorisierten Nutzern aufgerufen werden dürfen, genügen in der Regel die intern erteilten Berechtigungen, um ein unzulässiges Lesen von Daten (Informationsleck) zu vermeiden. Wurde jedoch anonymen Nutzern Lese- und Schreibrecht an einer Tabelle erteilt, wie dies für Online-Bestellungen (siehe Pizza-Bestellung) notwendig ist, so können die hier eingegebenen Daten bei erlaubten Url-Überschreibungen zumindest ausgelesen werden. Für diesen Fall (anonyme Lese- und Schreibberechtigung) sollten Url-Überschreibungen untersagt bleiben.

<Xml-Ausgabe>: Tabellendaten können als Xml-Quelle aufgerufen werden. Näheres ist unter Xml-Ausgaben zu finden.

Die beiden anderen Felder <Tabellen-Alias> und <Beschreibung> werden intern nicht gesondert genutzt.

Definition von Spalten

Wenn die Kopfzeile einer Tabelle markiert ist oder die Spalten bereits aufgeklappt sind, wechselt die Buttonbeschriftung von <Neue Tabelle> zu <Neue Spalte>. Zu jeder Tabelle wird eine erste Spalte mit Namen <Tabellenname>Id vom Datentyp int mit automatischem Hochzählen als Primärschlüssel erstellt. In Abfragen kann diese Spalte verwendet werden, um Tabellen per Join miteinander zu verknüpfen. Views geben diese Spalte mit dem Namen 'Id' aus. Zur Erstellung und Änderung steht das folgende Menü zur Verfügung.

SuchenNeue SpalteSpeichernAbbruch



Hilfe
Übersicht  (1/3)
 < 1 > 
 -    Artikel
   - A_Name
   - A_Preis
 +    Umsatz
 +    Vertreter
Id
Spaltenname *
Spaltenalias
Null zulassen *
Datentyp *
Position der Spalte *
Standardwert
Höhe des Eingabefeldes
Ja-Nein - Typ *
maximale Länge *
Sortierung *
Sortiertyp
Groß- / KleinAkzent
KanaBreite
Binär
Gesamtzahl der Stellen *
Nachkomma-Stellen *
Regulärer Ausdruck
RegEx-Fehlermeldung
PDown-Werte
Format
Sondertyp *
Dateiname *
Ordner-Typ *
Ordnername
Mime-Type *
maximale Dateigröße in KB
Bildhöhe in Pixel
Bildbreite in Pixel
Bildhöhe in Prozent
Bildbreite in Prozent
Thumbnail-Optionen
Thumb-Höhe in Pixel
Thumb-Breite in Pixel
Thumb-Höhe in Prozent
Thumb-Breite in Prozent
FTP-Server

Löschen

Der Spaltenname muß den Regeln für Tabellennamen entsprechen und ist intern bei der Erstellung von Verknüpfungen, Abfragen und Ausgabeseiten zu verwenden. Der Spaltenalias ist ein frei wählbarer Name, für welchen die Einschränkungen für Spalten nicht gelten. Ist ein solcher Alias definiert, so wird dieser für die Anzeige der internen Masken und bei der Erstellung der Ausgabeseiten (Feld sd:label ) genutzt. Fehlt der Alias, wird in all diesen Fällen der tatsächliche Spaltenname verwendet.

  • Null zulassen: legt fest, ob es sich bei dem Feld um ein Pflichtfeld handelt.
  • Position der Spalte: beschreibt die Reihenfolge innerhalb der internen Masken sowie für Ausgabeseiten, welche die dynamischen Felder sd:input-cell-set und sd:cell-set nutzen. Bei der expliziten Ausgabe kann die Reihenfolge unabhängig hiervon festgelegt werden.
  • Standardwert: Hier kann ein Standardwert vorgegeben werden, mit dem die Zelle einer neuen Zeile zunächst belegt wird. Der Nutzer kann anschließend bei der Dateneingabe den Wert verändern bzw. löschen oder ihn unverändert übernehmen.

    Für die Datentypen Decimal, Währung / money und Datum/Uhrzeit muß der Wert immer im englischen bzw. weltweiten Standardformat angegeben werden, also mit Punkt als Dezimaltrennzeichen sowie '2006-12-24 22:00:00' (Weihnachten 2006) für das Datumsformat. Für den Nutzer wird allerdings nicht diese Darstellung, sondern die für seine Ausgabekultur typische Version verwendet. Ein Eintrag

    3.5
    wird damit für einen deutschen Nutzer als
    3,5
    ausgegeben und so auch korrekt verarbeitet. Für Datumsangaben kann zusätzlich
    getdate()
    genutzt werden. Dann werden aktuelles Datum und Uhrzeit eingefügt.

    Einschränkung: Der Standardwert wird sowohl bei neuen Datensätzen in den internen Masken als auch in Ausgabeseiten verwendet. Letzteres ist allerdings nur dann möglich, falls ein Button 'Neuer Datensatz' existiert. Wird eine Eingabemaske angeboten, die jeden Inhalt immer speichert, kann der Standardwert nicht genutzt werden. Hier leistet das sd:ro-value -Element das Gewünschte.

  • Höhe des Eingabefeldes: ermöglicht die Ausgabe eines mehrzeiligen Feldes innerhalb der internen Masken. Fehlt der Wert oder ist er 1, so wird ein gewöhnliches einzeiliges Textfeld ausgegeben. Für Ausgabeseiten wird der Wert entweder übernommen oder er kann mit den sd:cols/sd:rows-Attributen überschrieben werden.
    Das Feld für den Code einer Abfrage ist mit dem Wert 10 deklariert.
  • Format: ermöglicht die Festlegung einer Formatzeichenfolge für Datum/Uhrzeit oder für numerische Ausdrücke. Diese Formatzeichenfolge wird jedoch nur für die internen Masken genutzt. Für Ausgabeseiten können diese Darstellungen jeweils individuell festgelegt werden.
  • Sondertyp: Wird bei einem Textfeld 'prüfe auf Mailadresse' gewählt, so muß es sich bei der eingegebenen Textzeichenfolge um die korrekte Darstellung einer Mailadresse handeln.

    Wird beim Textfeld 'Volltextsuche' gewählt, so wirkt die Standardsuche nicht so, daß die Phrase am Feldanfang, sondern an einer beliebigen Position gesucht wird. Dies entspricht dem Sql-Code

    Where Spaltenname Like '%' + <vom Nutzer übergebener Wert> + '%'
    Die Standardsuche verzichtet auf das erste Prozentzeichen, das vom MS-SqlServer bei der Like-Suche als Platzhalter verwendet wird.

Datentypen

Die Maske zeigt die Pflichtfeld-Optionen für die einzelnen Datentypen immer vollständig an und stellt bei der Neuerstellung einer Spalte passende Werte zur Verfügung. Die vom ausgewählten Datentyp nicht benötigten Optionen werden bei der Erstellung oder Änderung einer Tabelle ignoriert.

Datentypen, die spezielle Optionen nutzen

  • bit: Ja/Nein-Feld: Nutzt den Wert von <Ja-Nein - Typ> und wird entweder als Pulldownfeld mit Werten Ja/Nein, Yes/No oder als Checkbox zum Anhaken ausgegeben.
  • decimal: Dezimalzahlen fester Länge: Für diese werden die beiden Optionen <Gesamtzahl der Stellen> (p) sowie <Nachkomma-Stellen> (s) genutzt. Die Vorbelegung 18/4 bedeutet eine maximale Größe von 18 Stellen (precision) und 4 Nachkommastellen (scale). Precision muß zwischen 1 und 53, scale zwischen 0 und Precision liegen.
  • nvarchar/varchar: Dies sind die beiden Standardfelder für Textdaten. nvarchar ermöglicht Unicode-Zeichenfolgen, varchar ermöglicht höchstens 256 verschiedene Zeichen. Bei varchar hängt die Interpretation der Zeichen oberhalb der ersten 128 Zeichen von der gewählten Sortierung ab. Bei Änderungen der Sortierung ändert der Ms-SqlServer im Hintergrund gegebenenfalls die Codepage. Hierbei kann es zu Verlusten bei den höheren Zeichen kommen. Da die internen Menüs und die Ausgabeseiten immer als UTF-8 ausgegeben werden, ist schwer einzuschätzen, wie varchar-Zeichen oberhalb von ASCII angezeigt werden. Falls solche Kombinationen (varchar + Zeichen oberhalb ASCII + andere Sortierungen) gewünscht werden, müssen Nutzer dies eigenständig testen. Die Verwendung von nvarchar/Unicode ermöglicht eine direkte und stabile Lösung. Sie wird deshalb für alle Texte empfohlen, für welche mit Eingaben oberhalb ISO-8559-1, dem Standardzeichensatz für Westeuropa, zu rechnen ist.

    Für beide Datentypen sind <maximale Länge> und <Sortierung> Pflicht, optional kann ein Sortiertyp festgelegt werden. Die maximale Länge kann bei varchar bis 8.000, bei nvarchar bis 4.000 Zeichen umfassen.

    Die Sortierung und die Sortiertypen legen fest, an welcher Kultur sich die Sortierung orientiert. Ein Haken bei Groß/Klein bedeutet, daß 'a' und 'A' verschieden sind. Analog bedeutet Akzent, daß 'a' und 'à' als verschiedene Zeichen interpretiert werden. Kana betrachtet die japanischen Hiragana und Katakana als unterschiedlich. Breite unterscheidet Single-Byte- und Double-Byte-Darstellung desselben Zeichens voneinander.

    Die binäre Option, welche mit Latin1_General als Standard verwendet wird, vergleicht binär und umfaßt alle Optionen. Ist diese Option gesetzt, so werden alle anderen Optionen ignoriert. Für eine Spalte mit diesen Optionen findet die Suche nach 'h' in 'A_Name' nicht die 'Hose'. Soll bei der Suche auf Textspalten Groß/Kleinschreibung ignoriert werden, so muß der Haken bei 'Binär' entfernt werden.

    Eine Textspalte läßt sich zusätzlich durch Regular Expressions (Regulärer Ausdruck) einschränken. Dies sind Kürzel, wie sie unter Regular Expressions näher erläutert werden und mit welchen Textmuster genauer bestimmt werden können. Bei der Verarbeitung der Eingabedaten wird geprüft, ob der eingegebene Text das Suchmuster erfüllt. Falls nein, wird die Speicherung abgelehnt.

    Falls ein regulärer Ausdruck genutzt wird, kann eine zusätzliche Fehlermeldung definiert werden. Diese sollte dem Nutzer näher erläutern, auf was bei der Dateneingabe zu achten ist. Die Standardfehlermeldung kann in diesem Fall nur stereotyp sagen, daß die Speicherung aufgrund einer Einschränkung abgelehnt worden sei.

  • int: Dieser Integer-Datentyp stellt Standard-Ganzzahlen dar. Intern wird dieser Datentyp für alle Primärschlüssel verwendet. Er ist für alle Spalten Pflicht, die als Detailspalte für Relationen dienen sollen.

    Zusätzlich kann für int-Spalten im Feld <PDown-Werte> eine vereinfachte Pulldown-Liste definiert werden. Hierzu genügt es, eine Folge aus Ganzzahlen und Texten, durch Semikolon getrennt, einzutragen. So erzeugt der folgende Eintrag:

    1;Frau;2;Herr
    das Ergebnis:

    Die Ganzzahlen werden in die Tabellenspalte eingetragen, die Klartextwerte werden angezeigt. Falls ein solches Feld zum Suchen verwendet wird oder falls es sich nicht um ein Pflichtfeld handelt, wird eine zusätzliche Option '---' hinzugefügt.

  • file: Dieser Datentyp wird intern zunächst als 'nvarchar(100)' implementiert, also als Textfeld. Er wird gewöhnlich mit einem Dateinamen belegt. Ist der Spalte ein Wert 'FTP-Server' zugeordnet, so wird zusätzlich ein Feld für einen Datei-Upload ausgegeben. Lädt ein Nutzer eine Datei hoch, so wird nach dem erfolgreichen Speichern der Datenzeile die hochgeladene Datei mittels der FTP-Informationen auf dem dort festgelegten Server gespeichert. Dateityp und Größe können über die Felder 'Mime-Type' und 'maximale Dateigröße' festgelegt werden. Wurde ein Bild hochgeladen, so läßt sich dessen Größe anpassen oder ein Vorschaubild (= Thumbnail) erstellen.

    Für den Datentyp 'file' sind alle Felder ab 'Dateiname' relevant. Sie werden gesondert unter Dateien und Bilder erläutert.

  • text/ntext: Diese beiden Datentypen stellen Speicherplatz für übergroße Textdaten bereit, die oberhalb der Grenze von 8000 Zeichen für varchar- bzw. 4000 Zeichen für nvarchar-Spalten gelten. Zu beachten ist, daß mit diesen Datentypen eine Datenbank schnell ihre maximale Größe erreichen kann. Um mögliche Überläufe zu beschränken, wird für diese Datentypen ebenfalls der Wert von <maximale Länge> genutzt.
  • bbcode: Dieser Datentyp wird intern als ntext-Feld implementiert. Er berücksichtigt ebenfalls <maximale Länge> und ermöglicht zusätzlich die meisten Html-Elemente. Einfache Absätze werden durch <br/>, doppelte Absätze durch <p/> ausgegeben. Derzeit sind unter anderem implementiert:
    [b] ... [/b]
    [i] ... [/i]
    [u] ... [/u]
    [pre] ... [/pre]
    Bei der Ausgabe steht eine zusätzliche Spalte zur Verfügung. Diese beginnt mit '_', gefolgt von dem eigentlichen Spaltennamen und ersetzt die obigen Ausdrücke durch ihre Html-Äquivalente fett/bold, italic/kursiv, underline/unterstrichen und preformat/vorformatiert (für Codebeispiele). Zusätzlich könnnen diese Html-Ersatzelemente mit Html-Attributen ergänzt werden. Diese werden direkt übernommen.

    Es sind praktisch alle im <body>-Element zulässigen Html-Elemente erlaubt: table/tr/td für Tabellen, h1-h6 für Überschriften, ul/ol/li, dl/dt/dd für Listen und Definitionslisten, blockquote/em/strong, big/small/sup/sub für Hervorhebungen und Größenanpassungen.

    Nicht möglich sind Links, Bilder, das Einfügen von JavaScript-Code und Objekte bzw. iframe-Elemente. Wesentlich ist, daß - analog zu den Regeln für wohlgeformte Xml-Elemente - auch diese Eckklammerelemente korrekt geschachtelt sind und daß jedes geöffnete Element wieder geschlossen wird. Allerdings führen Fehler nicht zum Blockieren der Speicherung, sondern nur zu einer unvollständigen Ersetzung durch die Html-Äquivalente. Folglich erzeugen sie unvollständig formatierte Ausgaben. Einzelne Eckklammern werden direkt sichtbar ausgegeben.

Datentypen, die keine speziellen Optionen verwenden

  • bitSet: Eine Spalte mit diesem Datentyp kann als Basis für eine Relation auf eine Bittabelle verwendet werden. Im Menü zu Verknüpfungen kann diese Spalte anschließend als Detailspalte verwendet werden.
  • dateTime: Stellt eine Kombination aus Datum und Uhrzeit dar. Für Spalten dieses Typs kann in Ausgabeseiten das Attribut sd:datetime-format genutzt werden.
  • float: Stellt eine ungefähre Dezimalzahl dar. Eine solche Spalte kann bsp. für Winkelberechnungen verwendet werden.
  • money: Dies ist das Standardformat für Währungen. Aufgrund der Trennung zwischen der Datenbank und der Xml-Ausgabe ist einem Währungsfeld kein Währungszeichen zugewiesen. Dieses muß bei der Ausgabe ergänzt werden oder kann beim Spaltenalias hinzugefügt werden.
  • uniqueidentifier: Dies ist ein Datentyp, der Ausdrücke der Form 'CC475A46-6173-4268-A332-E43362FBEB17' aufnehmen kann. Wird eine solche Zeile erstellt, so wird ihr beim Speichern eines neuen Datensatzes automatisch ein solcher neuer Wert zugewiesen. Dieser ist weltweit eindeutig. Eine solche Spalte kann genutzt werden, falls sd-Daten mit anderen Datenbanken synchronisiert werden sollen und für jeden Datensatz eine auch außerhalb von server-daten eindeutige Kennung benötigt wird.

Sicherheit

Zum Erstellen von Tabellen ist das Add-Recht für den Objekttyp <Tabellen> oder ein umfassenderes Recht notwendig. Tabellen gelten als eine logische Einheit. Bei der Berechtigung wird nicht zwischen Tabellen und Spalten unterschieden. Das Leserecht für Tabellen im Menü 3 / Tabellen ist unabhängig vom Leserecht für Tabellenzeilen im Menü 1. Es ist deshalb möglich, einen externen Freiberufler mit der Erstellung von Ausgabeseiten zu beauftragen und ihm lediglich das Leserecht für die Tabellen einzuräumen, ohne daß er die eigentlichen Daten lesen kann. Dies genügt, damit er mit dem Menü <Ausgabeseiten> - <Code generieren> die notwendigen Informationen über die verfügbaren Tabellen und Spaltennamen erhält. Bei der Ausführung einer Ausgabeseite bleiben die Inhalte (die Tabellenzeilen) weiterhin verborgen.

Wirkung von Änderungen an Tabellen auf andere Objekte

Bei der Änderung einer Tabelle sind drei verschiedene Prinzipien denkbar: Es können alle Änderungen blockiert werden, solange abhängige Objekte (Relationen, Ausgabeseiten usw.) existieren. Damit müßten all diese Objekte deaktiviert oder gelöscht werden, ein späteres Ändern einer Tabelle wäre sehr aufwendig. Oder es werden bei der Änderung einer Tabelle alle abhängigen Objekte vom System gelöscht. Dies würde zu unbeabsichtigten Seiteneffekten führen. Das hiesige System nutzt eine dritte Version: Abhängige Objekte werden neu erstellt, falls dies genügt, die Konsistenz des Systems zu erhalten. Ist die Konsistenz bedroht, wird das abhängige Objekt deaktiviert, nicht gelöscht. Damit kann es nicht mehr ausgeführt werden (Abfragen und Ausgabeseiten) oder bleibt wirkungslos (Constraints, Verknüpfungen). Es bleibt jedoch mit allen Berechtigungssätzen erhalten und muß einmal aufgerufen, aktiviert und neu gespeichert werden. Falls aufgrund der geänderten Tabelle die Überprüfung scheitert, sind die Fehler zu korrigieren. Vollständig vom Hauptobjekt abhängige Objekte werden mit dem Hauptobjekt gelöscht. So entfernt das Löschen einer Tabelle auch alle speziell für diese Tabelle geltenden Berechtigungssätze, Constraints, Indices, Relationen und Views.

Im einzelnen gilt: Beim Bearbeiten einer Tabelle können vielfältige Fehler auftreten. Falls bsp. ein Textfeld verkleinert oder in ein numerisches Feld umgewandelt wird, kann eine solche Operation scheitern. In diesem Fall werden alle Änderungen verworfen, die Tabelle bleibt auf ihrem alten Stand. Wurden also sowohl Spalten verkleinert als auch weitere Spalten hinzugefügt und scheitert die Verkleinerung, so werden die Einträge für die neuen Spalten gelöscht. Abhängige Objekte werden nicht verändert. Bei der nächsten Suche nach Tabellen wird die Tabelle mit (F) markiert. Ein Klick auf die Tabellen-Hauptzeile zeigt den vom Datenbank-Server gemeldeten Fehler an. Anschließend muß die Tabelle einmal neu gespeichert werden, um die Fehlermeldung zu entfernen.

Wird die Tabelle nur umbenannt, so werden die Prozeduren zu Relationen, welche diese Tabelle als Basistabelle nutzen, neu erstellt. Diese Tabellen sind zum Zeitpunkt der Änderung deaktiviert. Werden Spalten umbenannt oder der Datentyp geändert, so werden Constraints und Relationen, welche diese Spalten nutzen, deaktiviert. Würden Constraints aktiv bleiben, so könnte die gewünschte Änderung scheitern. Für Relationen müssen der angezeigte Ausdruck sowie die Sortierausdrücke manuell überprüft werden. Views werden neu erstellt, so daß sie anschließend weiterhin verwendbar sind.

Das Löschen einer Spalte deaktiviert Relationen, Constraints und Indices, welche diese Spalte nutzen. Das Löschen einer Tabelle löscht die Constraints, Indices, Relationen, Views und Berechtigungssätze zu dieser Tabelle. Relationen werden in beiden Versionen gelöscht: Sowohl die Relationen, welche die zu löschende Tabelle als Grundtabelle verwenden - hier werden alle Ausdrücke unsinnig. Als auch die Relationen mit einer Spalte aus der zu löschenden Tabelle als Detailspalte. Wird diese Detailspalte entfernt, so fehlt auch der Bezugspunkt für die Relation. Abfragen und Ausgabeseiten, welche sich auf eine Tabelle beziehen, werden bei deren Änderung oder Löschung deaktiviert. Der in solchen Fällen erstellte Protokolleintrag zeigt server-daten als Ausführenden an.

Weitere Hinweise

Eine Tabellenzeile darf derzeit insgesamt nicht breiter als 8.060 Byte sein. Bei der Ermittlung dieser Größe werden text/ntext-Spalten nicht berücksichtigt. Da einige Spalten für Systemzwecke benötigt werden und Unicode intern als zwei Byte abgespeichert wird, wird diese Grenze mit einer 8.000 Zeichen umfassenden varchar oder einer 4.000 Zeichen umfassenden nvarchar-Spalte erreicht. Es kann zwar eine Tabelle mit einer Gesamtbreite > 8060 Byte erstellt werden. Das Speichern einer Zeile kann dann jedoch scheitern.

Tabellenspalten werden im Menü 3 immer in der Reihenfolge ausgegeben, wie sie durch das Feld <Position der Spalte> festgelegt werden. Für das Untermenü entfallen deshalb Sortierpfeile. Bei einer Bearbeitung wird immer eine Protokollzeile für die ganze Tabelle erzeugt. Das Erstellen einer Tabelle mit drei Spalten erzeugt nur eine Protokollzeile, nicht vier.



Kontaktformular:

Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!

Die Erläuterungen zum Datenschutz habe ich gelesen und stimme diesen zu.

© 2003-2018 Jürgen Auer, Berlin.