我需要使用Java构建一个程序,该程序使用MySQL来存储医生的约会。我有一个大概的主意,我需要一个表来在同一表中跟踪医生的ID,患者的ID以及约会的日期和时间。我还缺少其他属性吗?我假设我在Java实现中需要compareTo方法来检查可用时间。我希望我已明确说明要完成的工作。
目前,我有一个Doctor表和Patient表,它们都有自己的ID作为主键。如果重要的话,我正在使用Hibernate在MySQL中将关系映射到面向对象的设计。

最佳答案

日期时间是一个值

日期时间值几乎总是在软件中作为单个值进行跟踪。从技术上讲,它们在内部表示为自epoch以来的秒/毫秒/微秒/纳秒的计数。

您可能希望在用户界面中单独显示日期和时间,而不是在内部显示。

另外,您几乎肯定应该考虑时区。天真的程序员经常认为他们可以忽略时区,但是几乎可以肯定会在以后引起痛苦。

了解数据库对日期时间的处理

不同的数据库对日期时间的处理方式不同。阅读文档,进行游戏,进行实验以及确切了解数据库的工作方式绝对至关重要。

Postgres具有出色的日期时间处理能力。即使您使用其他数据库,也请查阅date-time data typesdate-time functions(命令)上出色的Postgres文档,以了解各种问题以及SQL标准与数据库特有的定义。

全球存储,本地呈现

日期时间是一个令人惊讶的滑行和复杂的问题。保持问题的一个关键是在UTC中工作。将您的日期时间值存储在UTC中的数据库(或序列化文件或XML / JSON通信)中。用UTC编写大多数业务逻辑,除非当地时区很重要,例如定义“新的一天的开始”。

向用户展示时,请使用ISO 8601格式或本地化到他们自己的时区(或他们期望的时区)。这遵循国际化/本地化的基本思想。对于文本值,可以在代码中使用某些键字符串。在用户界面中呈现后,您可以将这些内部字符串映射到用户界面的本地化(翻译)文本值。有些带有日期时间:内部为UTC,用户界面中为本地时区。

一个警告:为了历史起见,您可能还想存储一个本地日期时间。时区规则由于政治人物和官僚而经常且反复无常地更改。您的软件的时区数据库可能已过期。因此,您可能想要存储当时您或用户认为是某个日期时间的内容。但是不要依赖它。确定并存储UTC值。

提示:学会在24小时内思考和阅读。您作为程序员/调试器/系统管理员的生活将变得更加轻松,并且不易出错。

Joda-Time或java.time

众所周知,与Java捆绑在一起的java.util.Date和.Calendar类很麻烦。避免他们。

而是使用Joda-Time或Java 8中内置的新java.time package(受Joda-Time启发,由JSR 310定义)。

这两个库均使用ISO 8601格式作为默认值,用于解析和生成字符串。

ISO 8601

ISO 8601是一个明智的标准,定义了如何以特定且无歧义的文本格式显示日期时间值,时区和偏移量,持续时间和期间。研究精心编写的Wikipedia页面。

特别注意标准称为Durations的内容。时间跨度以以下格式定义:PnYnMnDTnHnMnS其中,P表示“句点”,T将日期部分与时间部分分开,其他可选部分是数字+字母。一个半小时的约会将是PT30M。这可能对您来说很方便,例如在下面我的ERD中看到的“ period_”字段。在Joda-Time中,Period类通过跟踪其月,日,小时等来表示时间跨度,并且知道如何解析和生成这种格式的字符串。

半开

您可以选择以两种方式之一存储约会。一种方法是开始日期时间和持续时间(90分钟,20分钟等)。另一种方法是同时记录开始和结束日期时间。在这种情况下,通常且通常最佳的方法称为“半开放式”。这意味着开始是包容性的,而结尾是排他的。

例如,一个小时的一个小时约会将在11:00到12:00之间进行,这意味着“从上午11点开始运行,直到(但不包括)下一小时(中午)的第一时刻。”下一次约会将从12:00到13:00。

在StackOverflow中搜索“半开放式”,以查找更多讨论以及示例和图表。

多对多

患者和医生之间的关系就是我们所说的Many-To-Many。医生看望许多患者,并且患者可能会见到不止一名医生。确保您了解关系数据库设计中的多对多表。解决方案始终是将第三个表(有时称为“桥”表)添加到其他两个父表中,作为子表。在您的情况下,约会表是桥接表。

您将需要知道如何在多对多关系中执行联接。

直接SQL

如果您是编程或关系数据库的新手,建议您避免使用Hibernate。您确实应该了解发生了什么。 Hibernate有一些适当的用途。但是,如果您认为Hibernate会神奇地使数据库问题消失,那么您将感到失望。

属性

属性取决于您。它们取决于您要解决的业务(或家庭作业?)问题。您拥有基本权利。

预约计划是编写软件的一个非常困难的业务问题。例如,您是否只是在记录约会的时间?还是通过创建预定义的时隙来跟踪医生的可用性,如果是,那么如何处理每个医生日历的例外情况和更改?您需要编写非常具体的需求和用例。用户的期望很容易超出您的预期要求。

这是一个简单的视图。

关于java - Java医生约会预约数据库(mysql)程序..在设计约会架构时遇到麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22618161/

10-13 04:47