使用什么作为 SQL 数据库日期的主键
我正在使用 Java 界面制作 SQLite 数据库,用户可以在其中输入不同日期的信息。基本上它就像一本日记。但我在为数据库构建表时遇到问题。 我有称为年份(例如 2011)、月份(从 1 到 12)、月份日期(从 1 到 31)的字段以及与用户输入相关的其他字段。但这些对于初级领域来说都没有任何好处。我考虑连接yearmonthdayofmonth,这样2011年1月11日就是20111101(确保小于10的值前面有一个零,所以它与2011年11月1日不一样)。但这似乎很笨拙,即使它返回唯一的数字。 有更好的方法可以推荐吗?
I am making a SQLite database with Java interface where the user can input information for different dates. Basically its like a diary. But I am having trouble constructing a table for the database.
I have fields called year (eg 2011), month (from 1 to 12), dayofmonth (from 1 to 31) and other fields relating to user input. But none of these are any good for a primary field. I thought of concatenating yearmonthdayofmonth so January 11 2011 is 20111101 (making sure values less than 10 have a zero in front, so it isnt the same as November 1st 2011, for example). But this seems clumsy, even if it returns unique numbers.
Is there a beter way you can recommend?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我不认为日期实际上是您表的一个好的主键,当您的用户想要在一天内做不止一件事时会发生什么?当他决定周六而不是周五吃披萨时会发生什么?
使用自动增量主键,使用 Datetime() 函数将 eventDate 存储为单个整数,并为该列定义辅助索引。
I don't think the date is actually a good primary key for your table, what happens when your user wants to do more than one thing on one day? What happens when he decides to have Pizza on Saturday rather than Friday?
Use an autoincrement primary key, store the eventDate as a single integer using the Datetime() function and define a secondary index for that column.
考虑使用简单的自动递增整数作为主键。然后您可以使用唯一索引来强制唯一性,例如;
这使主键保持较小,避免使用计算键或复合键,但仍确保正确性。
Consider using a simple auto-incrementing integer as the primary key. Then you can enforce uniqueness with a unique index, like;
This keeps the primary key small, avoids a computed or composite key, but still ensures correctness.
一种方法是开始计算自固定日期以来经过的天数。即选择 2011 年 1 月 1 日作为第 0 天,然后 2011 年 1 月 2 日作为第 1 天,依此类推...
如果您了解用户将使用的最短日期(可以将其设置为第 0 天),那么这应该可行。
Well one way would be to start counting the number of days elapsed since a fixed date. i.e pick 1st January 2011 as Day 0, then 2nd Jan 2011 is Day 1, and so on...
This should work if you have some idea of the minimum date that the user will use, which you can set as day 0.
不要使用日期作为表中的主键。这是一个坏主意,如果用户每天输入多个条目,您最终会出现主键违规错误。有一个单独的自动增量或一些其他唯一值列。使用日期列选择特定日期的记录。
Don't use date as a primary key in your table. It's a bad idea and you will end up in primary key violation error if user enters more than one entry per day. Have a separate auto increment or some other unique value column. Use the date column to select records for a particular date.