Erstellen von Tabellen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
wennerer
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

Beitrag von wennerer »

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:
Tabelle.png
Tabelle.png (43.12 KiB) 3442 mal betrachtet
Kann mir jemand ein deutschsprachiges Tutorial empfehlen das auf die Erstellung von Tabellen eingeht?

Viele Grüße
Bernd

Benutzeravatar
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

Beitrag von af0815 »

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).

wennerer
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

Beitrag von wennerer »

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

Stevie
Beiträge: 172
Registriert: Di 27. Feb 2024, 22:40

Re: Erstellen von Tabellen

Beitrag von Stevie »

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. :-)

Benutzeravatar
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

Beitrag von Zvoni »

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
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.

charlytango
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

Beitrag von charlytango »

Einfach mal eine kleine Direkthilfe wie ein mögliches Design zu einer Tabelle aussehen könnte:

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
Die Daten sähen dann exemplarisch so aus

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
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.
Zuletzt geändert von charlytango am Do 26. Sep 2024, 15:33, insgesamt 1-mal geändert.

Benutzeravatar
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

Beitrag von Zvoni »

Charly, wieso ist in TTeam das Feld "IDTeam" ein Fremdschlüssel???
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.

charlytango
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

Beitrag von charlytango »

Du hast völlig recht -- Kopierfehler -- Schande über mein Haupt --habs ausgebessert

wennerer
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

Beitrag von wennerer »

Hallo,
allen vielen Dank für die Antworten!

Stevie schrieb:
Wie möchtest du dir das Thema denn erschließen?
Der erste Link schaut für mich sehr viel versprechend aus, den werde ich in Ruhe durchackern.

@charlytango:
Danke für das konkrete Beispiel. Ich werde versuchen es zu vestehen und nachzuvollziehen.

Viele Grüße
Bernd

charlytango
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

Beitrag von charlytango »

@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

Benutzeravatar
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

Beitrag von Zvoni »

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
Yep.
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.

Stevie
Beiträge: 172
Registriert: Di 27. Feb 2024, 22:40

Re: Erstellen von Tabellen

Beitrag von Stevie »

... 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. :D

Benutzeravatar
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

Beitrag von Zvoni »

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. :D
.... 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"
:twisted: :twisted: :twisted: :twisted: :twisted: :twisted:
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.

schoschy
Beiträge: 56
Registriert: Di 18. Okt 2022, 15:46

Re: Erstellen von Tabellen

Beitrag von schoschy »

Zvoni hat geschrieben: Fr 27. Sep 2024, 11:57
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. :D
.... 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"
:twisted: :twisted: :twisted: :twisted: :twisted: :twisted:
"Das kann Excel alles besser!"
"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.

Stevie
Beiträge: 172
Registriert: Di 27. Feb 2024, 22:40

Re: Erstellen von Tabellen

Beitrag von Stevie »

.... 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"
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) . :lol:

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. :)

Antworten