Neues Projekt - neue Probleme

Kampfgummibaerlie

Datenbank-Guru
Beiträge
731
Ich denke, ich habe hinter dem Mimoso Projekt jetzt auch ein zweites Projekt gefunden.

Ich weiß nicht wieso, möchte aber alles mögliche irgendwie anhand einer Datenbank und schönen Benutzeroberfläche regeln.

Aber, um zu meinem Problem zu kommen:
Ich glaube, es ist ein ähnliches Problem, wie bei meinem kurzen "Ausflug", wo ich ein Punkte-System für eine World of Warcraft Gilde bauen wollte. Nach langem probieren, dort wieder erfolgreich einzusteigen, aber irgendwie gemerkt habe, dass das Interesse an das Spiel in den Jahren auch verloren ging, habe ich es letzten Endes aufgegeben. Mein Problem jetzt, um es auch kurz zu beschreiben:

Also, ich bin bei einer Einrichtung, mit 5+ anderen Leuten, die sich in ihrer Freizeit zu dem einen oder anderen treffen, wie zum Beispiel:
Brettspielen, Kartenspielen, Dart, Billiard, Tischtennis, oder was auch immer.

Ich glaube mich zu erinnern, wie ich das bei der World of Warcraft Datenbank probiert habe:
1.: Ich habe pro Account der Gilde 1 Eintrag in der Datenbank
2.: Ich habe pro "Aktivität" der Gilde 1 Eintrag in der Datenbank (eigene Tabelle)
3.: Ich habe pro "Teilnehmer" an einer "Aktivität" zu entsprechendem "Zeiten" (TSRange) eingetragen, und mittels der btree_gist extension und einer exclusion constraint geregelt, damit man sich nicht 2 mal für die selbe Aktivität oder zu 2 Aktivitäten zur gleichen Zeit eintragen kann.

Das gleiche Schema wäre jetzt halt anstatt der Accounts eine Tabelle mit Teilnehmern, anstatt der game internen Aktivitäten, jetzt Dinge wie "Dart" oder anderer Aktivitäten, und in der 3. Tabelle halt Dinge, die die Zeit betreffen.

Falls ich da irgendeinen Gedanken vergessen habe, oder so, bitte mir mitteilen.

Ich denke mir gerade, dass anhand bei der Datenbank wenig Probleme auftauchen, weil, wenn ich die Gedanken niederschreibe, offenbar eh so funktioniert.

Denke, eher noch Probleme mit der Homepage zu haben.
Werde meine bisherigen Homepage-Codes noch im PHP-Forum posten, schreibe aber auch hier, falls das Thema für andere interessant werden könnte (denke ich mir)

Ich hoffe, zu keinen unruhen zu kommen mit diesem Thread, weil es ja doch das falsche Forum sein könnte ^^

Create-DB-Codes:

1.: Datenbank erstellen:
Code:
create database bbrz;

2.: Tabelle Teilnehmer erstellen:
Code:
create table teilnehmer(id serial primary key, spitzname text not null);

3.: Tabelle Aktivitäten erstellen:
Code:
create table aktivitäten(id serial primary key, name text unique, zeitaufwand interval not null);

4.: Function time_subtype_diff erstellen (für den Typ Timerange):
Code:
create function time_subtype_diff(x time, y time) returns float8 as $$ select extract(epoch from (x-y)) $$ language sql strict immutable;

5.: Typ Timerange erstellen:
Code:
create type timerange as range (subtype = time, subtype_diff = time_subtype_diff);

6.: Tabelle Arbeitszeiten erstellen:
Code:
create table arbeitszeiten(id serial primary key, wochentag integer not null check(wochentag >= 0), arbeitszeit timerange not null);

7.: Extension btree_gist erstellen:
Code:
create extension btree_gist;

8.: Tabelle Freizeittätigkeiten erstellen:
Code:
create table freizeitaktivitäten(id serial primary key, aktivität integer references aktivitäten(id), aktivitätszeit tsrange not null);

Anhang nebenbei: Es macht mir wahnsinns Spaß, herumzutheorätisieren :D

Anhang 2 nebenbei: Ich schreibe das alles hier aus freiem Kopf, sollte ich mich im Leben wirklich "nurnoch" auf PostgreSQL konzentrieren, oder vl. eher umfangreicher weiterlernen, weil ich das mit PHP und JS/JQ usw nicht aus den Augen verlieren möchte?

9.: Trigger-Funktion erstellen, die die upper(aktivitätszeit) ausfüllt, je nachdem welche aktivität
Code:
create function autocomplete_aktivitätszeit() returns trigger as $$
 begin if(upper(new.aktivitätszeit) is null) then new.aktivitätszeit = tsrange(lower(new.aktivitätszeit), lower(new.aktivitätszeit)+aktivitäten.zeitaufwand) from aktivitäten;
end if;
return new;
end;
$$ language plpgsql;

10.: Trigger, der die autocomplete Funktion zündet:
Code:
create trigger autocomplete_aktivitätszeit before insert or update on freizeitaktivitäten for each row execute procedure autocomplete_aktivitätszeit();

Anhang 3:
Die Codes sind ungetestet, werde ich aber sofort machen ;D
Falls irgendwo ein Gedankenfehler auffällt, bitte mitteilen.

EDIT: die autocomplete-trigger-function hat probleme gezeigt :D ausgebessert
 
Zuletzt bearbeitet:
Werbung:
Komme zu einem Problem:

Ich müsste eine Tabellenübergreifende exclusion-constraint bauen, denke als wieder mittels einer trigger-procedure, habe mich aber noch nie damit befasst, und finde auch nichts darüber per google :(

ich möchte, dass sich teilnehmer nicht zur selben zeit 2 mal eintragen können, habe aber die "Spielzeiten" in einer anderen Tabelle :/
 
Werbung:
Zurück
Oben