Erstellen von Tabellen
-
- Beiträge: 609
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Erstellen von Tabellen
Hallo,
vorne weg muss ich sagen ich mache sehr wenig mit Datenbanken. Meine kleinen Projekte beschränken sich auf SQLite und sehr einfache Tabellen die ich mit dem DB Browser für SQLite erstellt habe. Der Umgang mit Lazarus und SQLite bereitet mir dabei (bis jetzt) aber weniger Probleme. Dagegen habe ich große Wissenslücken wie ich die Datenbank Tabellen richtig erstellen kann. Die Tutorials die ich bis jetzt gefunden habe haben meist fertige Tabellen oder beschreiben nur ganz einfache Tabellen mit einer 1-n Beziehung. Mir gehen schon die Ideen mit sowas aus:
Kann mir jemand ein deutschsprachiges Tutorial empfehlen das auf die Erstellung von Tabellen eingeht?
Viele Grüße
Bernd
vorne weg muss ich sagen ich mache sehr wenig mit Datenbanken. Meine kleinen Projekte beschränken sich auf SQLite und sehr einfache Tabellen die ich mit dem DB Browser für SQLite erstellt habe. Der Umgang mit Lazarus und SQLite bereitet mir dabei (bis jetzt) aber weniger Probleme. Dagegen habe ich große Wissenslücken wie ich die Datenbank Tabellen richtig erstellen kann. Die Tutorials die ich bis jetzt gefunden habe haben meist fertige Tabellen oder beschreiben nur ganz einfache Tabellen mit einer 1-n Beziehung. Mir gehen schon die Ideen mit sowas aus:
Kann mir jemand ein deutschsprachiges Tutorial empfehlen das auf die Erstellung von Tabellen eingeht?
Viele Grüße
Bernd
- af0815
- Lazarusforum e. V.
- Beiträge: 6848
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Erstellen von Tabellen
Schon mal in den LazInfos geblättert ? Vielleicht gibt es dort ein paar Grundlagen Infos.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 609
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Erstellen von Tabellen
Hallo,
ja dein Buch hab ich natürlich schon gelesen. Find ich sehr hilfreich (vor allem die SQL Anweisungen). Da ich aber von Tabellen gar keine Ahnung hab bräuchte ich irgendwie eine schrittweise Anleitung damit ich verstehe wie da die Vorgehensweise ist.
Viele Grüße
Bernd
ja dein Buch hab ich natürlich schon gelesen. Find ich sehr hilfreich (vor allem die SQL Anweisungen). Da ich aber von Tabellen gar keine Ahnung hab bräuchte ich irgendwie eine schrittweise Anleitung damit ich verstehe wie da die Vorgehensweise ist.
Viele Grüße
Bernd
Re: Erstellen von Tabellen
Wie möchtest du dir das Thema denn erschließen? Eher akademisch umfassend oder lieber am konkreten Beispiel? Wenn Du Dir etwas Zeit nehmen und das ganze etwas grundsätzlicher anschauen möchtest, dann könntest Du einen Blick auf das hier werfen: https://www.schule-bw.de/faecher-und-sc ... ierung.pdf. Kommt aus dem Informatikunterricht und ist eine gute, wenngleich nicht datenbankspezifische, Einführung in die relationale Datenmodellierung. Natürlich bieten auch die meisten (Online-)Unis und eine Einführungsvorlesung als PDF oder Video zum Runterladen an.
Ansonsten gibt es zu jeder Datenbank mindestens ein gutes Tutorial da draußen:
* Beispiel MariaDB: https://www.ionos.de/digitalguide/serve ... t-gemacht/
* Beispiel MS SQL Server: https://blog.devart.com/types-of-relati ... abase.html
* Beispiel PostgreSQL: https://medium.com/@tkachuk.m_ak17/sql- ... 9a75c29c9 .
Ansonsten einfach loslegen und schauen, wie es läuft. Meiner Erfahrung nach macht es bei der relationalen Modellierung irgendwann 'klick' und dann hat man es verstanden.
Ansonsten gibt es zu jeder Datenbank mindestens ein gutes Tutorial da draußen:
* Beispiel MariaDB: https://www.ionos.de/digitalguide/serve ... t-gemacht/
* Beispiel MS SQL Server: https://blog.devart.com/types-of-relati ... abase.html
* Beispiel PostgreSQL: https://medium.com/@tkachuk.m_ak17/sql- ... 9a75c29c9 .
Ansonsten einfach loslegen und schauen, wie es läuft. Meiner Erfahrung nach macht es bei der relationalen Modellierung irgendwann 'klick' und dann hat man es verstanden.

- Zvoni
- Beiträge: 396
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Erstellen von Tabellen
Wonach du suchst nennt sich "Normalisierung", und Stevie hat da auch schon ein paar Links gepostet.
Um in deinem Beispiel zu bleiben:
Du musst dir immer die Frage stellen: Welches Attribut/Eigenschaft gehört zu welcher Entität/zu welchem Objekt?
Aus deinem Beispiel lese ich wie folgt ab:
Es gibt eine Entität/Objekt "Person", welche die Eigenschaft "Name" hat (Beispiel "Bernd")
Es gibt eine Entität/Objekt "Team", welches eine Eigenschaft "Bezeichnung (Name)" hat (Beispiel "T1")
Es gibt eine Entität/Objekt "Tätigkeiten", welches eine Eigenschaft "Bezeichnung" hat (Beispiel "abwaschen")
Ich setze jetzt voraus, dass eine "Person" immer nur einem "Team" zugehörig sein kann.
Daraus folgert: "Team" zu "Person" in "1 zu n"
Desweiteren kann man schlussfolgern:
"Person" zu "Tätigkeit" in "m zu n" (Einer Person sind mehrere Tätigkeiten zugewiesen, und eine Tätigkeit wird von mehreren Personen durchgeführt)
Hierfür braucht man in der Regel eine Verbindungs-Tabelle.
Hier würde auch das Datum eingetragen werden.
Das ist jetzt nur der erste Ansatz.
Und niemals vergessen: Wie du etwas "speicherst" hat nie etwas damit zu tun, wie du etwas dem User anzeigst
Um in deinem Beispiel zu bleiben:
Du musst dir immer die Frage stellen: Welches Attribut/Eigenschaft gehört zu welcher Entität/zu welchem Objekt?
Aus deinem Beispiel lese ich wie folgt ab:
Es gibt eine Entität/Objekt "Person", welche die Eigenschaft "Name" hat (Beispiel "Bernd")
Es gibt eine Entität/Objekt "Team", welches eine Eigenschaft "Bezeichnung (Name)" hat (Beispiel "T1")
Es gibt eine Entität/Objekt "Tätigkeiten", welches eine Eigenschaft "Bezeichnung" hat (Beispiel "abwaschen")
Ich setze jetzt voraus, dass eine "Person" immer nur einem "Team" zugehörig sein kann.
Daraus folgert: "Team" zu "Person" in "1 zu n"
Desweiteren kann man schlussfolgern:
"Person" zu "Tätigkeit" in "m zu n" (Einer Person sind mehrere Tätigkeiten zugewiesen, und eine Tätigkeit wird von mehreren Personen durchgeführt)
Hierfür braucht man in der Regel eine Verbindungs-Tabelle.
Hier würde auch das Datum eingetragen werden.
Das ist jetzt nur der erste Ansatz.
Und niemals vergessen: Wie du etwas "speicherst" hat nie etwas damit zu tun, wie du etwas dem User anzeigst
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
- Beiträge: 1084
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Erstellen von Tabellen
Einfach mal eine kleine Direkthilfe wie ein mögliches Design zu einer Tabelle aussehen könnte:
Die Daten sähen dann exemplarisch so aus
Als mögliches Design bezeichne ich es auch deshalb, weil die Teamzugehörigkeit quasi fix zugeordnet wird und bei diesem Design nicht berücksichtigt ist, ob jemand das Team wechselt und vor allem auch wann.
Meine Tabellennamen beginnen immer mit einem T im Gegensatz zu den in der Datenbank vordefinierten Abfragen (Views genannt) die mit V beginnen.
Primäre Schlüsselfelder (Primary Keys) beginnen immer mit ID gefolgt von einem Kürzel das auf die Tabelle weist, also zb "IDPerson" .
Und genau diese Bezeichner verwende ich auch bei den Fremdschlüsseln.
Das trägt (nur für mich, kann jeder machen wie er glaubt) zur Lesbarkeit/Interpretierbarkeit einer Datenbankstruktur bei.
Code: Alles auswählen
TTeam
---------
IDTeam integer, autoincrement
TeamName varchar(150)
TPerson
---------
IDPerson integer, autoincrement
IDTeam integer, Fremdschlüssel
Nachname varchar(150)
TAktionen
---------
IDAktion integer, autoincrement
Aktionname varchar(150)
TPlan
---------
IDPlan integer, autoincrement
IDPerson integer, Fremdschlüssel
IDAktion integer, Fremdschlüssel
Plandatum Date
Code: Alles auswählen
TTeam
---------
IDTeam TeamName
******************
1 T1
2 T2
TPerson
---------
IDPerson IDTeam Nachname
1 1 Bernd
2 1 Ulf
3 1 Lars
3 2 Herbert
5 2 Dieter
6 2 Basti
TAktionen
---------
IDAktion Aktionname
1 kochen
2 putzen
3 streichen
4 saugen
5 abwaschen
6 mähen
TPlan
---------
IDPlan IDPerson IDAktion Plandatum
1 1 1 30.08.24
2 5 4 01.10.24
....etc
Meine Tabellennamen beginnen immer mit einem T im Gegensatz zu den in der Datenbank vordefinierten Abfragen (Views genannt) die mit V beginnen.
Primäre Schlüsselfelder (Primary Keys) beginnen immer mit ID gefolgt von einem Kürzel das auf die Tabelle weist, also zb "IDPerson" .
Und genau diese Bezeichner verwende ich auch bei den Fremdschlüsseln.
Das trägt (nur für mich, kann jeder machen wie er glaubt) zur Lesbarkeit/Interpretierbarkeit einer Datenbankstruktur bei.
Zuletzt geändert von charlytango am Do 26. Sep 2024, 15:33, insgesamt 1-mal geändert.
- Zvoni
- Beiträge: 396
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Erstellen von Tabellen
Charly, wieso ist in TTeam das Feld "IDTeam" ein Fremdschlüssel???
Müsste Primärschlüssel autoincrement sein
Müsste Primärschlüssel autoincrement sein
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
- Beiträge: 1084
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Erstellen von Tabellen
Du hast völlig recht -- Kopierfehler -- Schande über mein Haupt --habs ausgebessert
-
- Beiträge: 609
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Erstellen von Tabellen
Hallo,
allen vielen Dank für die Antworten!
Stevie schrieb:
@charlytango:
Danke für das konkrete Beispiel. Ich werde versuchen es zu vestehen und nachzuvollziehen.
Viele Grüße
Bernd
allen vielen Dank für die Antworten!
Stevie schrieb:
Der erste Link schaut für mich sehr viel versprechend aus, den werde ich in Ruhe durchackern.Wie möchtest du dir das Thema denn erschließen?
@charlytango:
Danke für das konkrete Beispiel. Ich werde versuchen es zu vestehen und nachzuvollziehen.
Viele Grüße
Bernd
-
- Beiträge: 1084
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Erstellen von Tabellen
@wennerer
Hab einfach mal in Wikipedia nachgesehen, interessanterweise ist deren Erklärung wirklich gut -- Die ganzen Formeln sind informativ aber imho nicht wirklich nötig, die Erklärung ist absolut ausreichend.
Ich würde mich zumindest bis zur 3. Normalform duecharbeiten
Hab einfach mal in Wikipedia nachgesehen, interessanterweise ist deren Erklärung wirklich gut -- Die ganzen Formeln sind informativ aber imho nicht wirklich nötig, die Erklärung ist absolut ausreichend.
Ich würde mich zumindest bis zur 3. Normalform duecharbeiten
- Zvoni
- Beiträge: 396
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Erstellen von Tabellen
Yep.charlytango hat geschrieben: Fr 27. Sep 2024, 09:07 @wennerer
Hab einfach mal in Wikipedia nachgesehen, interessanterweise ist deren Erklärung wirklich gut -- Die ganzen Formeln sind informativ aber imho nicht wirklich nötig, die Erklärung ist absolut ausreichend.
Ich würde mich zumindest bis zur 3. Normalform duecharbeiten
3NF ist in der Regel "Industrie-Standard", womit man in der Regel so gut 95% aller Fälle abfangen kann
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: Erstellen von Tabellen
... und wenn man die Normalformen dann verstanden hat, kommt jemand mit einer nichtrelationalen Datenbank um die Ecke und rät einem, die Normalisierung schnell wieder zu vergessen. 

- Zvoni
- Beiträge: 396
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Erstellen von Tabellen
.... und da ich lange Jahre im Einkauf eines Grosshandels gearbeitet habe, würde ich diesem jemand nur entgegensetzen:Stevie hat geschrieben: Fr 27. Sep 2024, 11:27 ... und wenn man die Normalformen dann verstanden hat, kommt jemand mit einer nichtrelationalen Datenbank um die Ecke und rät einem, die Normalisierung schnell wieder zu vergessen.![]()
"Dann verkauf mir mal deine Idee, wieso eine nicht-relationale Datenbank das Beste seit geschnitten Brot ist"






Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: Erstellen von Tabellen
"Das kann Excel alles besser!"Zvoni hat geschrieben: Fr 27. Sep 2024, 11:57.... und da ich lange Jahre im Einkauf eines Grosshandels gearbeitet habe, würde ich diesem jemand nur entgegensetzen:Stevie hat geschrieben: Fr 27. Sep 2024, 11:27 ... und wenn man die Normalformen dann verstanden hat, kommt jemand mit einer nichtrelationalen Datenbank um die Ecke und rät einem, die Normalisierung schnell wieder zu vergessen.![]()
"Dann verkauf mir mal deine Idee, wieso eine nicht-relationale Datenbank das Beste seit geschnitten Brot ist"
![]()
![]()
![]()
![]()
![]()
![]()
"Da braucht man doch gar keine Datenbank, habe ich Ihnen ja gleich gesagt!"
3 Monate später kam die Anfrage, wie das mit einer Datenbank aussieht, da Excel "etwas" langsam und unübersichtlich wurde

Waren auch nur ~40k Zeilen.
Re: Erstellen von Tabellen
Na wie schon??! Das nimmt man natürlich, weil Netflix es nutzt (Cassandra), Amazon es verwendet (DynamoDB), und LinkedIn es unter der Haube hat (Voldemort) ..... und da ich lange Jahre im Einkauf eines Grosshandels gearbeitet habe, würde ich diesem jemand nur entgegensetzen:
"Dann verkauf mir mal deine Idee, wieso eine nicht-relationale Datenbank das Beste seit geschnitten Brot ist"

Aber ernsthaft: Ein Vorteil nichtrelationaler und dokumentenorientierter Datenbanken ist, dass man sich das Schemadesign spart und gerade bei sehr großen _existierenden_ Datenmengen jederzeit in Mikrosekunden ändern kann, was gespeichert wird. Fällt einem also nach Monaten auf, dass man ein Feld vergessen hat, hat man keine Schemaänderungen am Hals, sondern definiert einfach eine neue Version des Dokumententyps und speichert seine Daten fortan mit diesem Typ. Und sowohl neue wie alte Programmversionen können brav nebeneinanderher laufen und jeweils ganz nach Belieben und Code-Base Datensätze der alten und neuen Struktur schreiben und lesen. Das macht so einen Releasewechsel _massiv_ einfacher.
Insbesondere die Varianten, die zur Speicherung JSON verwenden, fügen sich sehr harmonisch in die heute eher Javascript-lastigen Entwicklungsprozesse ein. Keine logischen Brüche am Übergang in die Persistenzschicht, sondern einfach dieselben JSON-Objekte speichern, mit denen man in seiner Anwendung sowieso hantiert.
Auch so etwas wie Sharding oder verzögerte Replikation baut sich mit MongoDB tatsächlich einfacher als mit PostgreSQL oder MariaDB. Und last, not least, horizontales Scaling (sprich: unter Last mal eben zusätzliche Knoten in den Cluster nehmen) ist mit MariaDB, PostgreSQL oder anderen RDBMS teilweise echt komplex.
Aber das nur als _mögliche_ Argumente, weil du fragst. Wenn es hart auf hart kommt, würde ich auch immer erstmal ein RDBMS vorschlagen und dann überlegen, ob etwas dagegen spricht.
