Das Baerlie sitzt wieder hinter der Datenbank

Kampfgummibaerlie

Datenbank-Guru
Beiträge
735
Nach 3 Tagen Kurs, setze ich mich jetzt wieder hinter den Lernprozess, dass ich ein wenig mehr über PostgreSQL lerne, also wollte ich mir eine schnelle Übung machen, ob ichs "noch drauf" habe....

Ich dachte mir, weils mir zuhause ncht ganz gelungen ist, und eine Pause und abwechseln ja an sich meistens in der Produktivität potenziell fördernd ist, weil man den Kopf auch mal bei was anderem hat, setze ich nun fort dabei, eine Versandtdatenbank (oder zumindest die Tabellen dafür) zu erstellen und miteinander zu verbinden.

Also, mein Ansatz bisher (bin noch in Wien, außerhalb von der absoluten Datenbank), und setze wiedermal an :D

1. Code:
Natürlich, wie immer, Datenbank erstellen:
Code:
Create Database Versandtdatenbank;

2. Code
Fortführend mit einer Tabelle Kunden, wel die denke ich als 1. kommen sollte:
Code:
create table kunden (id serial primary key, name text unique)

3. Code
Jetzt kommen meiner Meinung nach die Produkte, weil wir ja eigentlich nur die vorige und diese Tabelle brauchen, um eine Bestellung aufzugeben. (Das mit Adressen und so weiter kenne ich noch ^^ alter table add column ....)
Code:
create table produkte (id serial primary key, name text unique, preis money)

4. Code
Jetzt kommt natürlich die Versandttabelle, mit 2 Foreign Keys, und so weiter... ^^
Code:
create table versandt (id serial primary key, kunde integer references kunden(id), produkt integer references produkte(id)

Soweit bin ich bisher :D
Warum ich das hier veröffentliche?
Ich glaube, heute Abend könnte ich noch eine "Hausaufgabe" schreiben, falls mir jemand den Auftrag dazu gibt, ich würde natürlich einen solchen vom lieben mr. Elephant bevorzugen, weil der mit meinen Erfahrungen bisher schon beinahe 1:1 der Vortragende war :D

Also, was ich bräuchte:
Kurze, aber effektive aufgaben, die ich beherrschen sollte, mich aber nicht überfordern.
(PostgreSQL ist zB ein Trigger, den werde ich aber auch mal schnell schreiben, wofür auch immer, ich habe den Spaß am Leben wieder gefunden :D)

Ich bedanke mich vielmals bei euch, dass ihr mich wieder ein wenig näher an den Arbeitsvorgang gebracht habt, seit ich hier bin ;)

EDIT: Jaja, Funktionen glaube ich kann ich auch noch :D

Hier ein Beispiel meiner angehensweise:
Code:
create function blubberdieblubb(x text) returns text as 'select x' language sql

EDIT 2: Der Kurs war quasi ein Programmier-Einsteigerkurs, und diente eigentlich nur dem Erproben der Ausdauer und Lernfähigkeit, dementsprechend einen 3 tägigen Kurs zu je 8 Stunden in HTML und CSS genommen.
 
Werbung:
1. Aufgabe:
Code:
select * from versandt where kunde = (insert integer hier)

2. Aufgabe ist ein wenig schwieriger, weil das "Empfangen" als relativer begrff (finde ich) zu sehen ist.
Sprich, man müsste eine eigene Tabelle anlegen, wo man überall hinliefert, wielange die Versandtzeit ist, welche wiederum eine interval-spalte ist, und die column "versandtzeitpunkt" mit dem entsprechendem Wert aus der "Adresstabelle" verknüpfen, damit man in etwa weiß, wann es empfangen worden sein sollte ^^

Oder, ist das irgendwie konkret lösbar? Weil manche Briefe kommen garnicht an (böse Post), manche Briefe kommen zuerst an falsche Adresse, aber ja, wenn wir annehmen, dass die Liefergarantie vorhanden ist, sollte man eine Tabelle mit Orten definieren, und der Lieferungszeit bis dorthin, und diese mit dem Versandtzeitpunkt summieren.

Ich glaube, die 3 Tage (ich glaube, nehme schon ca. eine Woche eine Pause von der Datenbank) tun mir richtig gut ;) also muss abwechslung wirklich sein, aber danke liebe Welt, dass ich auch das in Erfahrung bringen durfte :D - Ich habe keine Ahnung wieso, aber ich fühle mich deutlich zufriedener, als vorher ^^

EDIT: ich bessere meinen Fehler >nicht< aus oben, aber wir wollen nur eine spalte von versandt, nicht alle... *mich schäm* -> habe Probleme mit dem Kurzzeitgedächtnis ;)

Edel lösbar wäre die Aufgabe auch mittels dem erstellen einer Function, die die Kunden_id zum namen nimmt, und dann diese wiederum in das obige Script nimmt.

Sprich:
Code:
create function kunden_id_from_name(x text) returns integer as 'select id from kunden where name = x' language sql;

und dann halt die wurst von oben mit der gerade erstellten funktion verknüpfen:
Code:
select produkt from versandt where kunde = kunden_id_from_name('Name hier');
 
Zuletzt bearbeitet:
Zur ersten Aufgabe: über mal einen JOIN. Das ist wichtiger, als eine Funktion zu erstellen.
zur zweiten Aufgabe: das war eher ein Hinweis dazu, daß man Bestell- oder Lieferdatum mit speichern sollte, aber ich hänge gern mal die Latte zum Verstehen etwas höher. Und ja, hat ja was gebracht ;-)
 
Ich glaube, ich habe Zuhause das Problem, dass ich nicht vom Thema wegkomme.
Das ist wie in Korea, wenn man den ganzen Tag nur einen Knopf drückt, dann weiß man nichtmehr, wann man vl. den anderen drücken sollte. (Not-Aus, oder so, wenn man ununterbrochen bremst)

Herlich, fand die letzte Woche absolut erfrischend ^^

Ich meine, ich kenne das Versandt-Informations-Zeugs nicht, sprich, ich weiß nicht, ob ich eine Bestätgigung bekomme, wenn der Artikel ausgeliefert wurde(?)
Oder bekomme ich eine Antwort, sobald der Empfänger unterschrieben hat? oO *0 Ahnung habe*

EDIT: Ich glaube, also ich würde es nicht Leseschwäche nennen, sondern eher Texterfassungsvermögen oder so nennen, sprich ich lese eigentlich schnell drüber, und weiß am Ende meistens (außer in Büchern, die ich schon ewig nichtmehr gelesen habe) nichtmehr, was am Anfang geschrieben wurde. In Bücher versetze ich mich rein, und stells mir auch vor und so, aber reinen Informationsautausch ist das eher weniger der Fall.... (geht sowas?)
 
Um ehrlich zu sein, kenne ich Joins nur im Sinne von selects, aber glaube könnte die nicht umsetzen auf das Verhältnis, dass du von mir wolltest ^^

Darf ich mir heute erklären lassen, wie Joins agieren und so?
Mache gerne dafür einen neuen Thread auf, falls ja, hier bestätigen, oder in einer Unterhaltung ;)
 
Deine Lösung ("select * from versandt where kunde = (insert integer hier)") ist halt unschön, weil Du mit einem künstlich vergebenen Schlüssel arbeitest. Wäre diese Abfrage nicht schöner, wenn Du statt 'insert integer hier' den Kundennamen eingeben könntest?
 
Würde ich kurzerhand mittels der bisherigen Erfahrungen mittels einer Function machen, die den Integer returned, vom entsprechenden Namen.

Glaube ich, ist der letzte Code den ich im Post oben habe. Also, so würde ich es im Endeffekt sowieso machen aus Bequemlichkeiten, aber ja, ich wüsste jetzt nicht, wie ich das mittels eines joins mache...

Habe mich eigentlich nie mit Joins beschäftigt, das letzte mal vom OpenOffice (meeeeeeeeeeei ists lange her xD) Youtube-Lernvideo.

Sprich, ich weiß es gibt right-joins, left-joins, inner-joins, und man braucht mehrere joins um einen m:n-join zusammenzubauen, oder so, aber kA was nicht alles :S

EDIT: POST 300 HIER :S
sollte was besonderes sein... also! *Flaschen verteil*
 
Würde ich kurzerhand mittels der bisherigen Erfahrungen mittels einer Function machen, die den Integer returned, vom entsprechenden Namen.

Ich hatte es befürchtet.

Code:
test=# create table kunde (id int primary key, name text);
CREATE TABLE
test=# create table versandt (id int primary key, kunde int references kunde, artikel text);
CREATE TABLE
test=# insert into kunde values (1, 'kunde1');
INSERT 0 1
test=# insert into kunde values (2, 'kunde2');
INSERT 0 1
test=# insert into versandt values (1, 1, 'Radiergummi');
INSERT 0 1
test=# insert into versandt values (2, 1, 'Flaschenöffner');
INSERT 0 1
test=# insert into versandt values (3, 2, 'Buntstift');
INSERT 0 1

test=# select k.name, v.artikel from versandt v left join kunde k on v.kunde=k.id where k.name = 'kunde1';
  name  |  artikel   
--------+----------------
 kunde1 | Radiergummi
 kunde1 | Flaschenöffner
(2 rows)

test=# select k.name, v.artikel from versandt v left join kunde k on v.kunde=k.id where k.name = 'kunde2';
  name  |  artikel  
--------+-----------
 kunde2 | Buntstift
(1 row)

test=#

Du vergewaltigst PostgreSQL mit Deiner Liebe zu Funktionen. Laß das, das ist der falsche Weg. Funktionen sind nett und ein gutes Mittel, komplexe Geschäftslogig in der DB abzubilden. Man sollte sich aber nicht einsetzen, um Dinge zu machen, die die Datenbank so schon mit Standard-SQL kann. Funktionen sind "teuer".
 
Werbung:
Ich weiß nicht, ob du CSS kennst/kannst, aber ich glaube, das funktioniert hier ziemlich ähnlich.

Man kann allen Links, die zB im Menü stehen eine Farbe geben, und hat das auch mittels eines punktes geregelt, sprich so in etwa nach der Art: menü.link { color: deinefarbe }

Sprich, ich sollte mich die nächsten Wochen mit Joins befassen ;)

EDIT: An die Besserwisser: Ich habe anstatt eines einfachen a's link geschrieben, damit sich auch mein Meister *mich verbeuge* in etwa auskennt.
 
Zurück
Oben