【问题标题】:Is a bidirectional relationship appropriate for reference tables? [closed]双向关系是否适用于引用表?
【发布时间】:2012-06-09 20:43:29
【问题描述】:

如果这是一个愚蠢的问题,请原谅,但我是关系数据库的新手,似乎找不到答案(可能是因为其他人都已经知道答案了)。

我正在存储测试数据,其中可能包含不同格式的时间(TAI、UTC、GPS 等)。我不确定我是否想在输入之前强制将时间转换为任意一致的格式(或者这可能是最好的方法?),但假设我可以保持灵活性,我计划使用参考表(查找表) 的时间类型如下:

ref_time_types
--------------
id (PK)
desc (UTC, GPS, TAI, etc)

我还会有一个表格来存储实际时间:

tbl_time
-------------
id (PK)
ref_time_types.id (FK)
seconds
year
.
.
.

我的问题是我确定非常基本。我应该在这些之间建立双向关系,还是从 tbl_time 到 ref_time_types 建立单向多对一关系?例如,我想不出任何理由想要找到所有 UTC 时间。这是是否建立双向关系的指导原则吗?在引用表的关系方面是否有任何最佳做法?

如果有什么不同的话,我正在使用 python、sqlalchemy 和 sqlite。

【问题讨论】:

  • 除了这个具体例子的细节之外,一般情况下是否不需要为引用表建立双向关系?

标签: database database-design relationship


【解决方案1】:

你真的需要保留格式吗?

  1. 如果不是,则不要将其存储在数据库中。数据库用于存储数据,它不应该关心数据在 UI 中的表示方式。所以,我建议你在 UI 中处理你想要的输入(如果这意味着多种格式,那就这样吧),但在将其存储到数据库之前将其转换为一致的格式,并完全摆脱 ref_time_types
  2. 如果是,则继续存储格式,但我仍会使用日期/时间本身的一致表示,因为它在查询时需要较少的转换(您只需转换输入条件查询,而不是所有与所需格式不匹配的行)。

此外,请务必使用您的 DBMS 支持的日期/时间类型 - 我没有看到将各种日期/时间组件拆分为单独字段的特殊原因除非您真的想查询这些个人组件(并希望对它们进行索引)。

我应该在这些之间建立双向关系,还是从 tbl_time 到 ref_time_types 建立单向多对一关系?

如上所述,在第一种情况下您不需要任何关系(因为只有一个表)。在第二种情况下,关系将是多对一。

【讨论】:

  • 谢谢,我倾向于在存储到数据库之前将所有时间转换为 GPS 秒数。这将导致整个数据库的一致性更高,并且更容易查询。至于使用日期/时间类型,这是不可能的,因为 sqlite 没有闰秒的概念,这对我来说很重要。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多