Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Java-Programm zur Reservierung von Arztterminen (Mysql). Probleme beim Entwerfen des Terminschemas

Datum-Uhrzeit ist ein Wert

Datums- und Uhrzeitwerte werden in Software fast immer als Einzelwerte verfolgt. Technisch gesehen werden sie intern als Anzahl von Sekunden/Millisekunden/Mikrosekunden/Nanosekunden seit einer Epoche dargestellt .

Möglicherweise möchten Sie ein Datum und eine Uhrzeit separat in der Benutzeroberfläche anzeigen, aber nicht intern.

Außerdem sollten Sie mit ziemlicher Sicherheit über Zeitzonen nachdenken. Naive Programmierer denken oft, dass sie Zeitzonen ignorieren können, aber das wird ihnen später mit ziemlicher Sicherheit Sorgen bereiten.

Verstehen Sie den Umgang Ihrer Datenbank mit Datum und Uhrzeit

Unterschiedliche Datenbanken behandeln Datum und Uhrzeit unterschiedlich. Es ist absolut wichtig, dass Sie die Dokumentation lesen, herumspielen, experimentieren und genau lernen, wie Ihre Datenbank funktioniert.

Postgres hat eine ausgezeichnete und vernünftige Behandlung von Datum und Uhrzeit. Auch wenn Sie eine andere Datenbank verwenden, konsultieren Sie die hervorragende Postgres-Dokumentation unter date- Zeitdatentypen und Datum-Uhrzeit-Funktionen (Befehle), um mehr über die verschiedenen Probleme und darüber zu erfahren, was durch den SQL-Standard definiert ist und was für Ihre Datenbank spezifisch ist.

Global speichern, lokal präsentieren

Date-Time ist ein überraschend schlüpfriges und kompliziertes Problem. Ein Schlüssel, um das Problem in den Griff zu bekommen, ist die Arbeit in UTC . Speichern Sie Ihre Datum-Uhrzeit-Werte in der Datenbank (oder in serialisierten Dateien oder XML/JSON-Kommunikationen) in UTC. Schreiben Sie den größten Teil Ihrer Geschäftslogik in UTC, außer wenn die lokale Zeitzone von Bedeutung ist, wie z. B. die Definition von "Beginn eines neuen Tages".

Wenn Sie dem Benutzer präsentieren, verwenden Sie entweder das ISO 8601-Format oder lokalisieren Sie ihn in seiner eigenen Zeitzone (oder der erwarteten Zeitzone). Dies folgt dem Grundgedanken der Internationalisierung/Lokalisierung. Für Textwerte verwenden Sie bestimmte Schlüsselzeichenfolgen in Ihrem Code. Bei der Präsentation in der Benutzeroberfläche ordnen Sie diese internen Zeichenfolgen lokalisierten (übersetzten) Textwerten für die Benutzeroberfläche zu. Einige mit Datum-Uhrzeit:UTC intern, lokale Zeitzone in der Benutzeroberfläche.

Eine Einschränkung:Vielleicht möchten Sie auch Speichern Sie ein lokales Datum und eine Uhrzeit aus Gründen der Geschichte. Zeitzonenregeln ändern sich aufgrund von Politikern und Bürokraten häufig und willkürlich. Die Zeitzonendatenbank Ihrer Software ist möglicherweise veraltet. Vielleicht möchten Sie also speichern, was Sie oder der Benutzer für ein bestimmtes Datum und eine bestimmte Zeit dann hielten . Aber verlassen Sie sich nicht darauf; ermitteln und speichern Sie den UTC-Wert.

Tipp:Lernen Sie in 24 Stunden denken und lesen. Ihr Leben als Programmierer/Debugger/Systemadministrator wird dadurch viel einfacher und weniger fehleranfällig.

Joda-Time oder java.time

Die mit Java gebündelten Klassen java.util.Date und .Calendar sind notorisch problematisch. Vermeide sie.

Verwenden Sie stattdessen entweder Joda-Time oder das neue java.time-Paket eingebaut in Java 8 (inspiriert von Joda-Time, definiert durch JSR 310).

Beide Bibliotheken verwenden standardmäßig ISO 8601-Formate, sowohl zum Parsen als auch zum Generieren von Zeichenfolgen.

ISO 8601

ISO 8601 ist ein sinnvoller Standard, der definiert, wie Datums- und Uhrzeitwerte, Zeitzonen und Offsets, Dauer und Perioden in bestimmten und eindeutigen Textformaten dargestellt werden. Studieren Sie diese gut geschriebene Wikipedia-Seite.

Beachten Sie insbesondere, was der Standard Dauern nennt . Eine Zeitspanne wird in diesem Format definiert:PnYnMnDTnHnMnS wobei P bedeutet "Punkt", das T trennt den Datumsteil vom Zeitteil, und die anderen optionalen Teile sind Ziffern + Buchstabe. Ein halbstündiger Termin wäre PT30M . Dies kann für Sie praktisch sein, z. B. für das Feld "period_", das in meinem ERD unter. In Joda-Time stellt die Period-Klasse eine Zeitspanne dar, indem sie ihre Monate, Tage, Stunden usw. verfolgt, und weiß, wie man Strings in diesem Format analysiert und generiert.

Halb offen

Sie können Termine auf zwei Arten speichern. Eine Möglichkeit ist ein Startdatum und eine Dauer (90 Minuten, 20 Minuten usw.). Eine andere Möglichkeit besteht darin, sowohl ein Start- als auch ein Enddatum und eine Uhrzeit aufzuzeichnen. In diesem Fall heißt die übliche und allgemein beste Vorgehensweise "Half-Open". Das heißt, der Anfang ist inklusive während das Ende exklusiv ist .

Beispielsweise würde ein einstündiger Termin zur vollen Stunde von 11:00 bis 12:00 laufen, was bedeutet, dass er um 11:00 Uhr beginnt und bis zum ersten Moment der nächsten Stunde (Mittag) läuft, diesen jedoch nicht einschließt. Der nächste Termin läuft von 12:00 bis 13:00 Uhr.

Durchsuchen Sie StackOverflow nach „Half-open“, um weitere Diskussionen, Beispiele und Diagramme zu finden.

Many-to-Many

Die Beziehung zwischen Patient und Doktor nennen wir Many-to-Many . Ein Arzt sieht viele Patienten, und ein Patient kann mehr als einen der Ärzte sehen. Stellen Sie sicher, dass Sie über Many-to-Many-Tabellen im relationalen Datenbankdesign Bescheid wissen. Die Lösung besteht immer darin, eine dritte Tabelle hinzuzufügen, die manchmal als "Brückentabelle" bezeichnet wird und als untergeordnete Tabelle für die beiden anderen übergeordneten Tabellen dient. In Ihrem Fall der Termin Tabelle ist die Bridge-Tabelle.

Sie müssen wissen, wie man Verknüpfungen über eine Viele-zu-Viele-Beziehung durchführt.

Direktes SQL

Wenn Sie neu in der Programmierung oder neu in der relationalen Datenbank sind, schlage ich vor, Hibernate zu vermeiden. Sie sollten wirklich verstehen, was los ist. Hibernate hat einige geeignete Anwendungen. Aber wenn Sie glauben, dass Hibernate Datenbankprobleme auf magische Weise verschwinden lässt, werden Sie enttäuscht sein.

Attribute

Attribute sind bis zu Ihnen. Sie hängen von dem geschäftlichen (oder Hausaufgaben?) Problem ab, das Sie zu lösen versuchen. Sie haben die Grundlagen richtig.

Die Terminplanung ist ein sehr schwieriges Geschäftsproblem, für das Software geschrieben werden muss. Zeichnen Sie zum Beispiel nur Termine auf, die gemacht werden? Oder verfolgen Sie die Verfügbarkeit der Ärzte, indem Sie vordefinierte Zeitfenster erstellen, und wenn ja, wie gehen Sie mit Ausnahmen und Änderungen im Kalender jedes Arztes um? Sie müssen sehr spezifische Anforderungen und Anwendungsfälle schreiben. Sehr einfach für die Erwartungen der Benutzer, Ihre vermeintlichen Anforderungen zu übertreffen.

Hier ist eine vereinfachte Ansicht.