Modell für Kalender (1-31) mit Buchstaben als Wert (Normalisieren oder ... )

echdeneth

Neuer Benutzer
Beiträge
2
Moin und Danke für die Aufnahme,

ich habe eine Tabelle als Kalender und Namen
Kalender enthält nen FK für Namen

Nun sollte jeder Tag im Kalender einen Wert als Char haben, das wollte ich normalisieren
also jeder Tag eine FK zu Tabelle "Buchstaben" - Idee kam mir da noch nicht komisch vor
Nur hatte ich die Rechnung ohne den Wirt gemacht...

Ist die Idee blöde? Wie würdet Ihr das machen? Ein enum? (K, H, M, G, I - z.B.)

Danke im vorraus, Marko
 
Werbung:
Ich weiß nicht, ob ich Dich richtig verstanden habe.

Ein Verweiß auf eine Fremdtabelle, die nur einen einzigen Buchstaben liefert, ist ziemlich Kanonen auf Spatzen.
Vielleicht möchtest Du keine Fremdtabelle mit >Foreign Key Constraint, sondern nur einen > Column Constraint?
Der könnte besagen, dass in dieser Spalte nur einige bestimmte Buchstaben stehen dürfen.

Ein solcher Constraint würde vielleicht reichen, besonders wenn dieses erlaubte Set an Buchstaben nicht häufig geändert werden wird. Das würde Dein bedeuten, dass man extra dafür die Tabelle / den Spaltenconstraint ändern muss.
 
Nein, jede Spalte die ein Tag repräsentiert (1-31) soll einen von mehreren Buchstaben (Chars) enthalten. Dies wollte ich normalisieren da es sich immer um diesselben Buchstaben handelt. Also Tag 1-31 jeweils eine FK zu einer Tabelle welche die Buchstaben enthält.
Nur kommt mir das etwas komisch vor, weiss jedoch nicht wie ich es anders machen soll.
 
Mir kommt eher komisch vor, was das alles soll. Du willst eine Tabelle erstellen, die 31 Spalten für max. 31 Monatstage hat? Das ist für mich der komische Teil. Einen FK zu erlaubten Buchstaben zu machen st trivial. Other solution: definieren eine eigene DOMAIN:

Code:
edb=*# create domain buchstaben as char(1) check (value in ('A','B','C','D','E','F'));
CREATE DOMAIN
edb=*# create table kalender(d01 buchstaben, d02 buchstaben, d03 buchstaben);
CREATE TABLE
edb=*# insert into kalender values ('A','B','C');
INSERT 0 1
edb=*# insert into kalender values ('X','Y','Z');
FEHLER:  Wert für Domäne buchstaben verletzt Check-Constraint »buchstaben_check«
edb=*#
 
Also falls Deine Überlegung folgende ist:
Ich baue meinen eigenen Kalender. Also schaue ich mal, wie der Kalender über meinem Schreibtisch aufgebaut ist und baue das nach.
Dann ist das ein falscher Ansatz. (Und Dein Buchstabenproblem inkl. Normalisierung nur ein Rand- oder Folgeproblem.)

Die (visuelle) Darstellung eines Kalenders, welcher Variante auch immer, hat nichts mit der Struktur der Datenhaltung (Datenmodell) zu tun! Wenn Du also "normalisieren" möchtest, dann fang dort an, wo es brennt. (vorne)

Alle Tage in der Tabelle für Deinen Kalender stehen in einem normalisierten Modell in der gleichen Spalte und zwar nicht nur als Tage, sondern als komplettes Datum.

In welcher Form diese Daten irgendwo angezeigt werden, ist eine ganz andere Frage. Sie wird im einfachsten Fall durch ein Reporting Tool gelöst oder durch einfache bis aufwändige Abfragen. Und weil es ein reines Darstellungsproblem ist, kannst Du es beim Tabellenaufbau komplett ignorieren.

Also Datenmodell:
Code:
id | datum | text
-------------
1  | 01.10 | * Mutti
2  | 03.10 | Tag der deutschen Einheit
3  | 08.10 | Urlaub
usw.

Darstellung z.B. nach Kalenderwoche:
Code:
- Oktober 2021 ---------------------------------------------------------------
| Mo      | Di       | Mi       | Do       | Fr       | Sa       | So       |
------------------------------------------------------------------------------
|         |          |          | 1        | 2        | 3        |
------------------------------------------------------------------------------
|         |          |          |          | * Mutti  |          | Tag der  |
|         |          |          |          |          |          | deutschen|
|         |          |          |          |          |          | Einheit  |
------------------------------------------------------------------------------
| 4       | 5        | 6        | 7        | 8        | 9        | 10       |
------------------------------------------------------------------------------
                                               Urlaub     Urlaub     Urlaub
usw.

Das ist nicht nur eine Überlegung, die nicht mit der Visualisierung zusammenhängt oder nicht davon beeinflusst wird, sondern vor allem eine Frage der Algorithmen, die auf den Daten Operationen ausführen sollen (Tage bis xy, Alle Urlaubstage in Jahr oder Zeitraum, alle Brückentage (Einzeltage zwischen Feiertag und Wochenende) in 2022 auflisten, ...
Frag Dich mal, wie Du entsprechende Aufgaben in deiner Tabelle mit 31 Spalten umsetzen würdest.

Und
"..nur kommt mir das etwas komisch vor.."
manchmal hilft auch der Instinkt. Wenn Du in der Strukturdefinition einer Tabelle "alles" ganz oft wiederholen musst, liegt der Verdacht nahe, dass ein Konstruktionsfehler besteht, ohne dass es vertiefte Kenntnisse der Normalisierung braucht.
 
Werbung:
Darstellung z.B. nach Kalenderwoche:
...
usw.
Mir ist aufgefallen, dass hier eine Spalte in einer Zeile der Darstellung der Kalendertage verloren gegangen ist.
Wenn man die einfügt, rückt der 1.10. und die Folgetage eine Spalte weiter nach rechts von Donenrstag auf Freitag. (So, wie man es z.B. am Kalender des heimischen PC für diese Tage ablesen kann.)
 
Zuletzt bearbeitet:
Zurück
Oben