Eigener Datentyp

Du brauchst nicht alles davon, jedenfalls nicht, wenn du den Datentyp nur zum Speichern von Daten nutzen willst.

Die Operatoren ect. sind notwendig, wenn du mit anderen Datentypen interagieren möchtest, also z. B. Vergleiche durchführen oder Casten auf andere Typen.

Vermutlich kennt Dein OS das nicht, Du wirst sie dort erst anlegen müssen.

Andreas

Das mit den Datentyp selbst erstellen bekomme ich wohl nicht hin, bzw. ein einfaches Beispiel wäre vielleicht anschaulicher.

Wie lange braucht dazu ein freiberuflicher DB-Programmierer?

Das hängt davon ab, was du alles benötigst …

Deine Vorgaben reichen nicht unbedingt als Lastenheft aus :wink:

Was genau willst Du denn machen damit? So, wie ich Dich verstanden habe, geht es nur darum, ‘normale’ Zahlen in einer bestimmten Formatierung EIN/Auszugeben. Dazu nannte ich eine Lösung.

Hast Du allerdings irgend was besonderes an solchen Zahlen, ich spinne mal: 100.001.010 * 2 soll 100.001.020 sein, dann brauchst halt echt einen neuen Datentypen und dazu die passenden Rechenoperatoren und so weiter.

Also, sag an…

Andreas

Logo, habe noch nicht ein Lastenheft erstellen müssen. Was kommt da alles rein?

Der Datentyp soll im Format 000.000.000 sein.
Also drei Pakete mit je 3 Zahlen welche 0-9 umfassen können
Das Trennzeichen ist ein Punkt

Der Datentyp muss als PrimaryKey verwendet werden können

Es muss keine Addition etc stattfinden können.

Da ich immer gerne auch etwas lernen möchte würde ich auch gerne den Weg dazu sehen. Auf der postgres.org Seite steht ja schon etwas dazu. Bei mir hat es aber noch nicht klick gemacht.

Karl

Da geht es schon los … für die Indexunterstützung (Primary Key) musst du Operatoren für deinen Datentyp haben. Schließlich muss die Datenbank zumindest herausfinden können, ob zwei Datensätze gleich sind. Also müssen Vergleiche möglich sein.

Dann kommen so Sonderfälle hinzu wie:

ist 0001.0001.0001 gleich 001.0001.0001?

Ect ect ect …

Gibt es da vielleicht ein Anfänger-Tutorial?

Nicht wirklich, sorry.
Eigene Datentypen schreiben ist nicht kompliziert, aber es ist Arbeit.

Nach einer Schablone kann man da nicht vorgehen, weil jeder Datentyp anders ist - andernfalls bräuchte man ja keine neuen Typen :wink:


Btw, würden dir nicht drei Spalten, jeweils mit einem Integer, genügen? Dann bildest du aus den drei Spalten den Primary Key.

ja, so haben ich jetzt umgesetzt.

aus den 3 Spalten? also nicht jede einzeln ein primary key, sondern gemeinsam?

Jede Spalte einzeln, also 3 Primary Keys, wird nicht klappen…

  CONSTRAINT "pk" PRIMARY KEY("material_kap", "material_hpos", "material_pos", "material_bereich_id"),

Wie weise ich darauf aber einen Fremdschlüssel zu? (Eine andere Spalte in einer anderen Tabelle soll hier auf alle Primary Keys den Fremdschlüssel haben)

Ich habe noch nicht dazu gesagt, dass die Werte in den Einzelspalten durchaus mehrfach vorkommen können. (z.B. 344) Die Gesamtzahl ist aber einmalig. (344.333.444 und 344.333.445).



test=*# create table t1 (a int, b int, c int, primary key(a,b,c));
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1"
CREATE TABLE
Zeit: 5,162 ms
test=*# create table t2 (a int, b int, c int, foreign key(a,b,c) references t1);
CREATE TABLE
Zeit: 28,862 ms

Andreas

CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1"

CREATE TABLE t2 (a int, b int, c int, foreign key(a,b,c) references t1);

Sprich, die Anzahl der Schlüssel muss immer gleich sein. (hier 3: a,b,c)

Macht es dann aber nicht mehr Sinn, einfach noch eine ID-Spalte (etwa Serial) hinzuzufügen und auf diese zu verweisen.?

Ich möchte ja, dass eine Spalte auf 3 Spalten den Fremdschlüssel hat. Und nicht, dass ein Schlüssel 3 Spalten mit 3 Spalten “verknüpft”.

Depends. Wolltest Du einen Unique Constraint auf die 3 Spalten in T1 haben?

Ich möchte ja, dass eine Spalte auf 3 Spalten den Fremdschlüssel hat. Und nicht, dass ein Schlüssel 3 Spalten mit 3 Spalten “verknüpft”.

Hm. Am fehlenden Kaffee kann es einklich nicht liegen, daß ich diesen Satz jetzt nicht verstehe.

Andreas

Ich hatte wohl zu wenig Kaffee…nochmal:


In t1 habe ich einen zusammengesetzten Schlüssel: a, b, c.

t2 soll auf diese Schlüssel verweisen. Müssen deshalb Spalten a, b, c (aus t1) in t2 vorhanden sein? Oder kann man der Spalte x in t2 a, b, c zusammen zuweisen.

Karl

Du wolltest doch dir drei Spalten als Foreign Key haben, also musst du auch darauf verweisen.

Wenn du eine Sequenz einführst, ist das nicht mehr der von dir gewünschte Primärschlüssel sondern du tauscht deinen Natural Key gegen einen technischen Schlüssel aus.

er meinte sicher, ob man als referenz auch ausdruecke verwenden kann … also sowas wie

a + b + c ----> x

ich glaube aber das geht nicht ueber diese art von constraints

danke für die tipps.

Karl