双向关系是否适合参考表?

时间:2012-06-05 19:51:59

标签: database database-design relationship

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

我正在存储测试数据,这些测试数据可能包含各种格式稍有不同的时间(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。

1 个答案:

答案 0 :(得分:2)

您确实需要保留格式吗?

  1. 如果不是,则不要将其存储在数据库中。数据库用于存储数据,它不应该关心如何在UI中表示数据。所以,我建议你在UI中处理你想要的输入(如果这意味着多种格式,也就是它),但在将其存储到数据库之前将其转换为一致的格式并摆脱ref_time_types
  2. 如果是,那么继续存储格式,但我仍然使用日期/时间本身的一致表示,因为在查询时需要较少的转换(您只需要转换输入条件查询,而不是所有与所需格式不匹配的行。)
  3. 此外,请使用您的DBMS支持的日期/时间类型 - 我没有看到将各种日期/时间组件拆分到单独的字段的特定原因,除非您实际上想要查询这些个人组件(并希望将它们编入索引)。

      

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

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