Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用什么作为SQL日期数据库的主键_Java_Sql_Date_Primary Key - Fatal编程技术网

Java 使用什么作为SQL日期数据库的主键

Java 使用什么作为SQL日期数据库的主键,java,sql,date,primary-key,Java,Sql,Date,Primary Key,我正在制作一个带有Java界面的SQLite数据库,用户可以在其中输入不同日期的信息。基本上就像日记一样。但是我在为数据库构建表时遇到了问题。 我有一些字段称为年(例如2011年)、月(从1到12)、月日(从1到31)以及其他与用户输入相关的字段。但这些都不适用于初级领域。我考虑将yearmonthdayofmonth连接起来,这样2011年1月11日就是20111101(确保小于10的值前面有一个零,因此它与2011年11月1日不同)。但这似乎很笨拙,即使它返回的是唯一的数字。 你能推荐一种更

我正在制作一个带有Java界面的SQLite数据库,用户可以在其中输入不同日期的信息。基本上就像日记一样。但是我在为数据库构建表时遇到了问题。 我有一些字段称为年(例如2011年)、月(从1到12)、月日(从1到31)以及其他与用户输入相关的字段。但这些都不适用于初级领域。我考虑将yearmonthdayofmonth连接起来,这样2011年1月11日就是20111101(确保小于10的值前面有一个零,因此它与2011年11月1日不同)。但这似乎很笨拙,即使它返回的是唯一的数字。
你能推荐一种更好的方法吗?

一种方法是开始计算从固定日期起经过的天数。i、 e选择2011年1月1日为第0天,然后选择2011年1月2日为第1天,依此类推


如果您知道用户将使用的最短日期,您可以将其设置为第0天,那么这应该是可行的。

一种方法是开始计算自固定日期以来经过的天数。i、 e选择2011年1月1日为第0天,然后选择2011年1月2日为第1天,依此类推


如果您对用户将使用的最短日期有一些想法,可以将其设置为第0天,那么这应该是可行的。

考虑使用一个简单的自动递增整数作为主键。然后可以使用唯一索引强制唯一性,如

create unique index UX_YourTable_Date on YourTable(yearCol, monthCol, dayCol)

这样可以保持主键较小,避免使用计算键或复合键,但仍然可以确保正确性。

考虑使用简单的自动递增整数作为主键。然后可以使用唯一索引强制唯一性,如

create unique index UX_YourTable_Date on YourTable(yearCol, monthCol, dayCol)

这样可以使主键保持较小,避免使用计算键或复合键,但仍然可以确保正确性。

我认为日期实际上不是表的一个好主键,当用户希望在一天内做多件事情时会发生什么?当他决定在周六而不是周五吃比萨饼时会发生什么


使用autoincrement主键,使用Datetime()函数将eventDate存储为单个整数,并为该列定义辅助索引

我不认为日期实际上是您表格的主键,当您的用户希望在一天内做多件事情时会发生什么?当他决定在周六而不是周五吃比萨饼时会发生什么


使用autoincrement主键,使用Datetime()函数将eventDate存储为单个整数,并为该列定义辅助索引

不要将日期用作表中的主键。这是一个坏主意,如果用户每天输入多个条目,您将导致主键冲突错误。有一个单独的自动增量或其他一些唯一的值列。使用“日期”列选择特定日期的记录。

不要将日期用作表中的主键。这是一个坏主意,如果用户每天输入多个条目,您将导致主键冲突错误。有一个单独的自动增量或其他一些唯一的值列。使用“日期”列为特定日期选择记录。

为什么只为日期需要三列?不能只使用一列并将其作为主键吗?为什么不使用从1开始计数的自动递增整数
entryid
?此外,您应该使用
DATETIME
类型而不是3
int
s来表示日期。我想是的,但我应该在该列中输入什么值?@davids0n。我可以这样做,但当用户单击我日历上的某个日期并想查看他/她之前写的内容时,数据库必须搜索给定的(年、月、月)值。如果字段仅为1的倒数,则对查询没有帮助。主键不一定需要可人工搜索。自动递增的int无论如何都适合作为内部逻辑的唯一id。除此之外,还有索引日期时间列。这只是在重复安德奥马尔和达维森所说的。为什么你只需要三栏来记录日期?不能只使用一列并将其作为主键吗?为什么不使用从1开始计数的自动递增整数
entryid
?此外,您应该使用
DATETIME
类型而不是3
int
s来表示日期。我想是的,但我应该在该列中输入什么值?@davids0n。我可以这样做,但当用户单击我日历上的某个日期并想查看他/她之前写的内容时,数据库必须搜索给定的(年、月、月)值。如果字段仅为1的倒数,则对查询没有帮助。主键不一定需要可人工搜索。自动递增的int无论如何都适合作为内部逻辑的唯一id。除此之外,还有索引日期时间列。这只是重复了Andomar和darvids0n的说法。创建唯一索引并没有“避免”复合键——它只是强制复合键的另一种语法。更好的语法是使用唯一的约束——“更好”,因为它是标准SQL,因此更可能被其他开发人员视为密钥,也更可能被开发工具、数据建模工具和其他软件支持。创建唯一索引不会“避免”复合键-它只是强制复合键的另一种语法。更好的语法是使用一个独特的约束——“更好”,因为它是标准SQL,因此更可能被其他开发人员视为密钥,也更可能被开发工具、数据建模工具和其他软件支持。