命名MYSQL时间戳列的语义

时间:2011-02-02 20:13:47

标签: mysql naming-conventions

我需要一个代表这些数据的MySQL表:

  • 2月12日下午5:00 - Verdasco VS Monfils
  • 2月12日,9:25 pm - Sampras VS Hewitt
  • 2月13日,上午8:15 - Nishikori VS Del Potro

我想将时间列命名为 time timestamp date ,但如您所知,这些都是保留关键字。命名时间列的最佳方法是什么,而没有故意听起来俗气,以绕过命名限制?

4 个答案:

答案 0 :(得分:4)

我理解在名为EventDate的表中有一个名为Events的列的感觉(根据我所学过的所有数据库约定,应该被称为事件 ......;))是多余的,但请考虑:

您有一个Event表,其中包含Date列和Booking表,其记录代表客户在事件中预订座位,同时还有Date列(在此上下文中,指的是座位被预订的日期):

SELECT e.Date AS EventDate, b.Date AS BookingDate, [...]
FROM Event e
JOIN Booking b ON b.EventId = e.Id

在每个此类查询中必须考虑不明确的列名称是一种惩罚,可能(并且 ,在我看来)超过假定的Event.EventDate冗余。

考虑另一个我们可以应用于每个表中ID列名称的参数:在Event EventId中调用PK而不仅仅是Id让我们编写这个JOIN标准:

JOIN Booking b ON b.EventId = e.EventId

我们可以一目了然地参考正确的列。

总之,如果我们必须在调用列DateEventDate之间做出决定,后者有很多好处:

  • 正如@Benjamin Seiller指出的那样,列应该标识列的含义,不一定是其数据类型
  • 此外,如果您的表有三个不同的日期字段表示与该实体相关的日期,会发生什么?如果你没有根据他们的含义来命名,你现在必须记住哪个字段意味着什么......
  • 一旦我们希望查询多个表,不明确的列名就会出现问题
  • 如果出现在多个表中的列(例如外键)具有明确且相同的名称,则我们的查询语法会对错误产生更大的抵抗力(例如加入错误的列)

考虑在决定列名时可以使用表的所有情况。在这种情况下,我认为在列名中提供特定于上下文的信息的好处远远超过重复表名的冗余。

答案 1 :(得分:2)

列名不应指向数据类型,而应指向其含义。 与event_start_datetimecreated一样,用于创建该条目的时间戳。

答案 2 :(得分:2)

我更喜欢动词过去时和“时间”,即'createdTime','publishedTime',在你的情况下我找不到动词,但'matchTime'看起来没问题。

答案 3 :(得分:1)

什么是Verdasco VS Monfils?他们是活动吗?然后我会选择EventDate或类似的东西。试着说出你将如何形容它。