【问题标题】:Best database structure to store year with optional month and day?用可选的月份和日期存储年份的最佳数据库结构?
【发布时间】:2021-12-04 10:31:32
【问题描述】:

我需要存储生日,但对于某些人来说,我只知道年份而不知道月份和日期。对于月/日,我只允许填写 null 或两者都填写。我应该如何构建我的数据库?

目前我有这个:

birth_year (YEAR)
birth_month (INT)
birth_day (INT)

birth_monthbirth_day 可以为空,但最好选择类似的东西:

birth_date (DATE)
has_month_and_day (TINYINT/BOOL)

如果has_month_and_day 为假,则将月份和日期设置为“01-01”?

或者这个:

birth_year (YEAR)
bith_date (DATE)

如果所有内容都填写完毕,则选择带有完整日期的bith_date,如果birth_date 为空,则选择birth_year

其他建议?我仍然需要能够判断是否填写了月份和日期,所以我不能只使用一个日期列并将月份和日期设置为“01-01”。

如果这对决定很重要,我还需要按年份过滤并按日期排序。

谢谢!

编辑 // 我在 MySQL 文档中找到了这个。你怎么看?

MySQL 允许您将日期存储在日期或月份和日期所在的位置 DATE 或 DATETIME 列中的零。这对应用程序很有用 需要存储您可能不知道确切日期的生日 日期。在这种情况下,您只需将日期存储为“2009-00-00”或 '2009-01-00'。

【问题讨论】:

    标签: mysql sql laravel database database-design


    【解决方案1】:

    我会将它们分开存放。如果需要,您可以随时使用CONCATCAST 'mystring' as date 查询它们作为完整日期。

    【讨论】:

    • 好的,所以三列带有 year/int/int?或者也许也有月份类型?
    • 在 SQL 数据库中,空值旨在准确表示:丢失/未恢复的数据。所以,最后两个属性应该可以为空。
    • 我会坚持使用空值。旧数据库中的那些“0000-00-00 00:00:00”日期很难遇到和更改。
    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多