AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Einfaches Datenbankmodell

Einfaches Datenbankmodell

Ein Thema von Delbor · begonnen am 25. Jun 2018 · letzter Beitrag vom 28. Jun 2018
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.241 Beiträge
 
Delphi 12 Athens
 
#1

AW: Einfaches Datenbankmodell

  Alt 28. Jun 2018, 07:35
Allgemein:
* Die Tabellen alle mit TBL_ beginnen zu lassen ist überflüssig.
* Ich bevorzuge es, die IDs (=PKs) mit dem Tabellennamen zu benennen. So wie du es bei Tbl_User gemacht hast (Tbl_USer -> UserID), aber bei den anderen nicht (Tbl_Konto -> ID)
* Die IDs einmal mit und einmal ohne _ zu bennen ist nicht gut. Adress_ID und UserID ist eine ziemliche Fehlerquelle.
* Ich würde nicht mit den Standarddatentypen arbeiten, sondern UDDT, also selbst definierte Typen, verwenden + allen Feldern, die gleichen Typ haben, diesen zuordnen. Also statt FLOAT bei Beträgen würde ich einen UDDT "Betrag" vom Typ Float zwischenschalten. Diesen ev. mit Default oder not null etc aufpeppen. Das macht es dann zB leichter alle Telefonnummern zu verlängern, weil du nur einmal den UDDT ändern musst.
* Mach dich über den Unterschied zwischen VARCHAR und NVARCHAR schlau.
* INT INTEGER DEC FLOAT ist ein ziemliches Typgemisch - siehe vorher UDDT.
* "Text" als Feldname ist unglücklich, da a) nichtssagend + b) oft ein reserviertes Wort.
* Tabellennamen sollten einheitlich entweder alle Einzahl oder alle Mehrzahl sein. Jetzt gibt es die Tbl_Firma, aber auch die Tbl_Adressen.
Solche Konventionen finde ich immer sehr gut, ich arbeite zwar nicht mit den komplexesten DBs aber hilfreich ist das immer.
Das kann ich Alles unterstreichen, und weiche davon nur in Sonderfällen ab (OK bei den Datentypen manchmal).

Zitat:
* Ich bevorzuge es, die IDs (=PKs) mit dem Tabellennamen zu benennen.
Ich benutze im Moment zwar möglichst konsequent ID, das sit aber eine gute Idee, werde ich mir mal ansehen.

Was ich als Konvention für mich festgestellt habe ist das bei den meisten Tabellen eine
möglichst gleiche Nomenklatur benutzen sein kann (nicht bei Allen Tabellen wohlgemerkt).
In der Art:
  • ID(_xxxx) - als PK
  • Name - Passt fasst immer, da muss ich nicht XxxxName schreiben, denn der Zusammenhang macht es klar
  • Descr - eine Beschreibung zum Eintrag kann ich auch ziemlich oft dazunehmen
  • ChgFirst - Oft ist es sinnvoll den Ersteller des Records zu protokollieren
  • ChgLast - sowie Wer hat den Record zuletzt geändert
  • ChgTime - und wann war das

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#2

AW: Einfaches Datenbankmodell

  Alt 28. Jun 2018, 07:41
Bei mir heißt der PK immer ID, FKs sind nach dem Muster <RefTable>ID benannt, also z.B.
Code:
 CREATE TABLE Address(
  ID INTEGER NOT NULL PRIMARY KEY,
  PersonID INTEGER,
  CONSTRAINT FK_Person
  FOREIGN KEY(PersonID) REFERENCES Person(ID)
)
Letztendlich ist es aber auch wurscht, wie man das handhabt, wichtiger ist in meinen Augen, dass man das Muster erkennen kann und dieses auch konsequent eingehalten wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.251 Beiträge
 
Delphi 12 Athens
 
#3

AW: Einfaches Datenbankmodell

  Alt 28. Jun 2018, 07:50
Zitat:
Name - Passt fasst immer, da muss ich nicht XxxxName schreiben, denn der Zusammenhang macht es klar
Ah - guter Punkt. Es sollte (bis auf wenige Ausnahmen) keine gleichbenannten Felder geben. Wenn du einen Join über mehrere Tabellen hast + da kommt 4x "Stadt" vor, hilft dir der Zusammenhang nicht viel.

Zitat:
[*]ChgFirst - Oft ist es sinnvoll den Ersteller des Records zu protokollieren[*]ChgLast - sowie Wer hat den Record zuletzt geändert[*]ChgTime - und wann war das
Ein konzeptionelles Datenmodell versteht "Vererbung" + da kann man sowas gut abbilden.

Ich habe in meinen Tabellen auch noch ein Feld "Serial", das bei Änderungen hochgezählt wird. Dann kann die WHERE Clausel für das Update "where PK=... and Serial=..." lauten + darauf kann man einen knackigen Index setzen.

Zitat:
Bei mir heißt der PK immer ID, FKs sind nach dem Muster <RefTable>ID benannt, also z.B.
Warum nicht gleich <table>ID? Siehe oben - ein Join über 4 Tabellen + du hast 4x ID.
Außerdem: Gleiche Bezeichnung == gleicher Inhalt. (Bis auf wenige Ausnahmen, meistens so Verwaltungsfelder.)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#4

AW: Einfaches Datenbankmodell

  Alt 28. Jun 2018, 07:54
Weil <Table>ID bei mir ein Zeichen für einen Fremdschlüssel ist, dann kommt man nicht durcheinander.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.881 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Einfaches Datenbankmodell

  Alt 28. Jun 2018, 07:55
Zitat:
Warum nicht gleich <table>ID? Siehe oben - ein Join über 4 Tabellen + du hast 4x ID.
Ich nenne PK auch immer nur ID. In Deinem Beispiel könnte man bei der Abfrage Aliase setzen oder die FK-Felder der Detailtabellen.
Markus Kinzler
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.241 Beiträge
 
Delphi 12 Athens
 
#6

AW: Einfaches Datenbankmodell

  Alt 28. Jun 2018, 08:05
[QUOTE=TigerLilly;1406004]
Zitat:
Wenn du einen Join über mehrere Tabellen hast + da kommt 4x "Stadt" vor, hilft dir der Zusammenhang nicht viel.
Ja ich gebe zu das ich nicht mit superkomplexen DB-Strukturen arbeite (bis auf ein DATEV-Projekt), aber manches lässt sich auch dann besser lesbar darstellen:

Code:
select mi.Personalnummer as MitNr,
       mi.Name as MitName, // Alias
       mi.Vorname,
       dw.ID, dw.Kennzeichen, dw.Fahrzeugtyp_ID as Typ
  from Mitarbeiter mi
       join Dienstwagen dw
         on mi.ID = dw.Mitarbeiter_ID
 where dw.Fahrzeugtyp_ID in ( SELECT ft.ID
                                from Fahrzeugtyp ft
                                     join Fahrzeughersteller Fzg // Alias
                                       on ft.Hersteller_ID = fh.ID
                               where Fzg.Name = 'Mercedes-Benz'); // Alias.Name
Ist jetzt vielleicht nicht das beste Beispiel

Geändert von Rollo62 (28. Jun 2018 um 09:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.251 Beiträge
 
Delphi 12 Athens
 
#7

AW: Einfaches Datenbankmodell

  Alt 28. Jun 2018, 09:41
Geschmäcker und so.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.241 Beiträge
 
Delphi 12 Athens
 
#8

AW: Einfaches Datenbankmodell

  Alt 28. Jun 2018, 10:24
Nein nein, du hast ja Recht.
Bei 5+ Tabellen im JOIN wird es wohl unübersichtlicher.
Dann bin ich ganz bei dir

Ich wollte ja nur mögliche Auswege zeigen.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz