![]() |
AW: Einfaches Datenbankmodell
Hi jobo
Zitat:
Zitat:
Dagegen gibt es andere Verträge, die ohne vorliegende rechtzeitige Kündigung auch automatisch verlängert werden, aber ohne dass sich der Betrag ändert. Grundsätzlich denke ich, sollte es in einem Privathaushalt ausreichen, solche unterschiedlichen Rechnungen nicht in verschiedenen Tabellen zu führen. Ausnahme könnte ein Haushalt sein, der in Wertpapiere diverser Art investiert. Das würde wohl zu einigen zusätzlichen Tabellen führen. Gruss Delbor |
AW: Einfaches Datenbankmodell
@Schokohase
Das Grundgerüst der Datenhaltung ist die Datenbank. Die Daten werden dazu ausmodelliert. Mit was für 'ner Software man dann auf die Daten zugreift ist wurscht. Man kann auf ein Datenmodell mit 'ner Software zugreifen, die über eine GUI verfügt. Man kann auch mit Batchprogrammen drauf zugreifen. Oder ein Webinterface dazu bauen. Oder ... Die Daten sind immer in der gleichen Datenbank mit einem Datenmodell. Das Wesentliche sind die Daten. Die Software ist dazu da, um vereinfacht an die Daten zu kommen. Delbor will eine Datenbankanwendung schreiben. Welche Datenbank(en) genutzt wird/werden soll, steht im Eingangspost. Die Datenbankkomponenten dienen dem Zugriff auf die Datenbank. Sie sind nicht die Ursache für die Nutzung einer Datenbank. Und wenn man mal mit "richtigen" Daten gearbeitet hat (so ein paar millionen Datensätzen in diversen Tabellen) dann wird man sehr schnell feststellen, dass man zuerst eine vernünftige Analyse benötigt, dann ein Datenmodell dazu und erst dann anfängt die Software zu implementieren. Und Unit-Tests gehen auch bei Datenbankanwendungen. Damit kann man alle Funktionen des Programmes testen, einschließlich der ggfls. in der Datenbank enthaltenen Logik (Trigger, Datenbankprozeduren ...) Man muss es halt können ;-) Der Ansatz ist: Die Software dient zur Bearbeitung der Daten in der Datenbank. Und nicht: Die Datenbank ist ein notwendiges Übel, um die vom Programm verabeiteten Daten irgendwie speichern zu können, um sie ggfls. später nochmal zur Verfügung zu haben. Ich halte Delbors Ansatz, sich erstmal Gedanken über die benötigten Daten und deren sinnvolle Ablage zu machen, für absolut korrekt. Meiner Meinung nach ist das ein professioneller Ansatz. |
AW: Einfaches Datenbankmodell
@Delphi.Narium
Wenn du bei einem "Unit-Test" die Trigger der Datenbank mittestest dann hast du per Definition keinen Unit-Test sondern einen Integration-Test. Das sind zwei paar Schuhe. Ein Unit-Test testet die kleinst mögliche Einheit (z.B. eine öffentliche Methode) ohne irgendwelche externen Abhängigkeiten (z.B. Datenbanken). Wenn es Abhängigkeiten gibt, dann werden diese per Mock bereitgestellt. So ein Unit-Test ist klein und schnell und wird bei jeder Quelltext-Änderung ausgeführt (siehe TestInsight). Ein Integration-Test ist wesentlich fetter als der Unit-Test aufgrund der Abhängigkeiten (z.B. von der Datenbank) die jetzt auch mit im Boot sind. Weil diese gewöhnlich (wesentlich) länger dauern als die Unit-Tests, werden diese auch nur zu bestimmten Zeitpunkten ausgeführt (Einchecken im Repository, Release-Build, etc.) Wer es weiß der kann es auch. Eine Datenbank ist kein Übel, sondern Mittel zum Zweck und manchmal auch völlig überflüssig und ein paar schlichte Dateien hätten es auch getan. Natürlich macht man sich Gedanken was für Datenstrukturen die Anwendung benötigt um ihre Aufgabe zu erledigen, aber eben völlig losgelöst von dem eventuell zu verwendenden Datenbank-System. Hat man diese Strukturen und die Anwendung, dann ist die Datenbank-Anbindung nur noch ein Spaziergang und das Datenbank-System wird austauschbar. Das ist professionell. |
AW: Einfaches Datenbankmodell
Zunächst, es werden wohl nicht Millionen von Datensätzen werden, daher sind Peformanceüberlegungen eher nebensächlich. Trotzdem spricht nichts gegen ein Datenmodell, das alle Möglichkeiten (oder doch nur 95%,98%..) abdeckt.
@Schokohase Eine Datenbankanwendung ist die Schnittstelle zwischen Benutzer und den Daten. Nicht mehr und nicht weniger. In dieser Schnittstelle kann man z.B. über Prüfungen sicherstellen, daß nur korrekte Daten in der Datenbank landen. Aber der erste Schritt zu einer solchen Anwendung, ist die Definition der Daten und der Datenhaltung, unabhängig vom später eingesetzten DB-System. Wer hierbei Hausnummern, Postcodes oder Telefonnummern als Zahlen ablegt, legt schon eine fehlerhafte Basis für die spätere Schnittstelle. Wohin gehört z.B. die Telefonnummer 49211789 ? Ist es 0049211789 oder 049211789 oder doch 49211789 ? Zitat:
Gruß K-H |
AW: Einfaches Datenbankmodell
Zitat:
Und wenn sie doch Daten hat, aber keine Datenbank, ist es dann eine Datenanwendung oder eher eine DatenOhneBankanwendung? Bei mir ist jede Anwendung eine Schnittstelle zwischen Benutzer und Daten. Und die Daten liegen irgendwo, der Anwendung grundsätzlich egal, denn die bekommt den Zugriff auf die Daten über eine Abstraktion zugeteilt. Ist es dann eine IrgendwoDatenanwendung? |
AW: Einfaches Datenbankmodell
Hi p80286
Zitat:
Gruss Delbor |
AW: Einfaches Datenbankmodell
Vielleicht zurück zum Anliegen des TE. Ergänzend zu noch nicht Gesagtem:
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. Tbl_Konto * Wenn Saldo die Differenz/Summe aus Gutschrift und Belastung ist, lass es. Das kannst du als Abfrage ausrechnen. Außer du musst Rundungseffekte berücksichtigen, dann kann das sinnvoll sein. * Vertrag_ID verweist wohin? Ist das nicht redundant, denn über die Rechnung kommst du ja auch zum Vertrag? Tbl_Adressen * Mir fehlt da Land+PLZ+eine zweite Adresszeile * 45 zeichen für die Straße können knapp werden * Das Design ist da etwas komisch - es gibt Adressen + User+Firmen bekommen welche zugeordnet? Tbl_User * da gibt es drei Verweise in die Tbl_Adressen. Warum? Ich lass es mal gut sein - da gibt es schon Dinge zum Bessermachen :thumb: |
AW: Einfaches Datenbankmodell
Hi hstreicher
Zitat:
Zitat:
Andere Webseiten wurden auch 'modernisiert' und präsentieren sich nun auf einem Desktop genau so, wie auf einem Mobile - man darf auch genauso oft Scrollen. Nur scrollt eine Mausradumdrehung nicht so weit wie ein Fingerwisch - ich empfinde diesen 'Modernisierungswahn' schlicht und einfach fürchterlich. Im Code ist das auch nicht gerade Zielführend: du musst (d.h. das SQL) jede Zeile lesen und auf Vorzeichen prüfen. Im Falle einer Anwendung wie die von mir geplante fällt dies wohl weniger ins Gewicht, aber bei bei Millionen von Datensätzen sieht das anders aus. Ich bin mir nicht sicher, ob eine weitere Normalisierung im Bereich der Kontotabelle Sinn macht, nichtzuletzt eben auch wegen der zu erwartenden Datenmenge. Andrerseits müssten in der eigentlichen Kontotabelle nur die Datensätze mit dem richtigen Index (Integer) gelesen werden. Gruss Dellbor |
AW: Einfaches Datenbankmodell
Zitat:
|
AW: Einfaches Datenbankmodell
Hi Delphi.Narium
Zitat:
Zitat:
Voraussichtllich noch heute morgen werde ich das Modell überarbeiten und hier einstellen und dabei auch dies berücksichtigen - offensichtlich habe ich beim Erstellen des Screenshots den unteren Rahmen zu knapp gezogen. Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:15 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