![]() |
Datenbank: Firebird • Version: 3/4 • Zugriff über: -
Firebird Blob Sub_type text kein primary key möglich?
Hallo,
ich lerne mich in Datenbanken ein. Bei Firebird 4 will ich eine Tabelle anlegen. Auf ein Feld mit dem Datentyp "blob sub_type text" bzw. "blob sub_type 1" ist es nicht möglich ein Primary key oder unique anzulegen. Habe ich das richtig verstanden? Bei anderen Typen funktioniert es wohl. Das funktioniert:
Delphi-Quellcode:
create table tabelle (
a VARCHAR(100) primary key );
Delphi-Quellcode:
create table tabelle (
a int not null, primary key (a) ); Das funktioniert nicht:
Delphi-Quellcode:
create table tabelle (
a blob sub_type text primary key );
Delphi-Quellcode:
Nur für mein Verständnis.
create table tabelle5 (
a BLOB SUB_TYPE text not null, primary key (a) ); Ich weiß nicht, warum das nicht funktioniert und ob das so vorgesehen ist oder ein Fehler meinerseits. Wenn ich einen längeren Text speichern wollte, und nicht blob sub_type text geht wegen primary key, welcher Datentyp ist dann der geeignete?! |
AW: Firebird Blob Sub_type text kein primary key möglich?
Das ist vermutlich in allen Datenbanken so. Blob-Felder werden meistens in separaten Bereichen gespeichert und stehen für die Indizierung nicht zur Verfügung (uns somit insbesondere auch nicht für den Primary Key).
Steht übrigens auch in der Doku: ![]() Zitat:
|
AW: Firebird Blob Sub_type text kein primary key möglich?
Das not-null ist doppelt gemoppelt,
weil
SQL-Code:
ist quasi ein shortcut für
primary key
SQL-Code:
.
not null unique
Ich schätze mal der Unique-Index wird den BLOB nicht mögen. |
AW: Firebird Blob Sub_type text kein primary key möglich?
Zitat:
:wink: |
AW: Firebird Blob Sub_type text kein primary key möglich?
Ok, Danke :)
|
AW: Firebird Blob Sub_type text kein primary key möglich?
Zitat:
|
AW: Firebird Blob Sub_type text kein primary key möglich?
Jupp, wolle ich auch grade anmerken.
Zumindestens AUTOINC ist da eher unpraktisch. Man könnte aber stattdessen einen TIMESTAMP (current_timestamp) verwenden, das ist zemlich unterschiedlich, da es hoffentlich nicht oft vorkommt, dass INSERT in zwei DBs auf die Millisekunde gleichzeitig passiert. Oder im VARCHAR z.B. TimeStamp+Loginname. |
AW: Firebird Blob Sub_type text kein primary key möglich?
Ok, ok...ich hatte ne schwere Kindheit. :stupid:
Man könnte auch eine GUID (eindeutig weltweit) verwenden. Ist ja im "Prinzip" darstellungstechnisch auch ein "Text". :oops: Zitat:
|
AW: Firebird Blob Sub_type text kein primary key möglich?
UUIDs sind auch eine Alternative, wenn man ein paar Dinge beachtet:
![]() |
AW: Firebird Blob Sub_type text kein primary key möglich?
Man kann auch die GUID/UUID als ID nutzen, auch für Syncro,
und zusätzlich noch einen INT/BIGINT für die Lokalen Verknüfungen. In der Syncro nutzen wir eine TimeStamp/GUID aber intern wird mit INT oder BIGINT (aber als VARCHAR(32) gespeichert) verlinkt. Werden abhängige Tabellen Syncronisiert, muß man dann die internen und externen IDs umrechnen. bzw. bei einigen (älteren) Tabellen, die früher nur über den INT (AUTOINC) verlinkt und syncronisiert wurden, hatte ich die Syncro zuletzt so umgestellt, dass ein/mehrere andere Spalten als eindeutige "SyncID" genommen werden und der INT nur intern verbleibt (auf allen Datenbanken unterschiedlich). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz