2009-09-04 37 views
35

什么是DATETIME列的命名约定(在我的情况下,使用MS SQL Server)的数据库名称约定:DATETIME列

对于创建行时存储列CreatedDatetime是有道理的,或者LastModifiedDatetime

但对于一个简单的表格,让我们说一个叫事件,你会创建一个名为列:

EventID,     // Primary key 
EventDatetime,   // When the event is happening 
EventEnabled    // Is the event is on 

ID,      // Primary key 
Datetime,    // When the event is happening 
Enabled     // Is the event is on 

如果你既不使用惯例:请提供列你会使用的名字。

回答

68

我通常命名DATETIME列作为ACTION_WORD_on: created_on, completed_on, etc.

ACTION_WORD定义了什么的列表示,和后缀(_on)指示该列表示时间。

其他后缀(或甚至前缀)可用于指定数据类型(_at_UTCwhen_等)。

具有描述性。始终如一。

+0

我喜欢使用'_on'的建议。我通常使用'_at'。但是我搜索了这个问题,因为某些动作词+'_at'不知道该列是关于时间还是位置。 '_on'对于时间更为明确。 – rojobuffalo 2017-11-22 21:55:13

3

我会避免使用数据类型的列名称(DATETIME列称为Datetime),所以我投了第一个选项。

+0

独特的列名称更易于使用。如果你在10个不同的表中有DateTime(作为一个名字),你总是需要在查询中使用带有表名的列名前缀。所以我选择了第一个选项。 – Marc 2009-09-04 14:26:15

+2

@Marc:从某种意义上说,这只是一个单一的字符差异。与EventId相比,引用Event.Id并不困难。无论前缀是附加到列名称还是使用连接时必须执行的操作,它们都有其优点/缺点。 – Brisbe42 2009-09-04 14:38:11

4

我更喜欢以第二种形式创建列 - 尽管我可能想要一个比Datetime更具描述性的名称,具体取决于它的用途。

编辑:在这种情况下,我可能会选择混合使用该单一字段,并将其设置为'EventDate','StartDate'或类似的东西。

+0

在事件的情况下,您将使用什么来代替'Datetime'作为列名? – 2009-09-04 14:19:53

12

该名称应该传达什么业务数据的含义是在列...“DateTime”只是数据的类型。事件发生了吗?当它被记录?当它被存储在数据库中时?数据最后修改时间?

如果它有效地传达了列包含的内容的含义,名称就很好。 “DateTime”不好。 “EventDateTime”只有非常轻微更好。如果表中包含事件,则表中的任何日期时间字段都是EventDateTime(它记录与该事件相关的某个日期时间)。虽然如果在“Events”表中只有一个 datetime列,那么EventDateTime意味着事件发生的时间,所以这可能是好的。

选择或选择名称,以便它传达的意思价值 ...

由于编辑的问题,一些建议的名称可能是:

发生,或OccurredDateTime,或OccurredUTC,(或OccurredLocal),或者,如果您的商业模式中的事件有持续时间,则可能是StartedUtc,BeganUtc或InitiatedUtc等。

+0

那么在这种情况下,你会用什么作为列名? – 2009-09-04 14:24:53

+2

@ Peter-阅读最后一句:“[选择]名称,以便传达值的*含义*。”您尚未在表格中描述日期时间列的含义,因此我们无法推荐更有意义的列名称。 – 2009-09-04 14:34:27

+0

公平评论 - 我用代码注释更新了原始问题,解释了哪一列的含义。 – 2009-09-04 14:37:19

1

我可能会使用类似“WhenRaisedUtc”的内容。

13

为什么调用它EventDateTime,当你不使用EventIDInt或EventEnbaledVarchar?为什么在列名中包含数据类型? (我的经验法则是,如果他们访问表中的数据,他们会更好地知道列数据类型是什么,否则他们不知道他们在处理什么。)

这些天,我喜欢什么,我认为是描述性的列名,如:
CREATEDATE
dateCreated会
CreatedAt
CreatedOn(如果没有时间部分)
AddedOn(可能是semanitcally更合适,取决于数据)

选择一个“标签”并在每张需要这种数据的表格中一致地使用它也是一件好事。例如,在每个表的(几乎)中都有一个“CreateDate”列是没有问题的,因为那样你总能知道每个表的哪一列会告诉你什么时候创建了一行。不要挂上“但他们都必须有独特的名字”的说法;如果你正在写一个查询,你最好知道你要从哪个表中拉出每一列。

- 编辑 -

我只记得一个例外,我已经在过去完成。如果DateTime(或SmallDateTime)列不包含时间部分,只是日期,作为“提醒”,我会将“Date”放在列名称中,例如“BilledDate”而不是“Billed”或“BilledOn”。这不适用于追踪添加行时的情况,因为您也需要时间。

+1

感谢您的专栏名称示例 - 这是我所希望的,有些东西让我的头脑不在意它的命名痕迹 – 2009-09-04 14:38:47

2

我会打电话给列HappensAt,因为该行描述事件和问题的属性(列)详细信息它发生。作为一般规则我试着名字我用单数名词表和我有可以用来读取短语的属性,如

表名(键)columname columnvalue

所以我会再能说

事件(131)HappensAt 2009年12月21日21:30

但是,这不是一个不可侵犯的规则。我仍然会记录某人出生在BirthDate列的日期,而不是WasBornOn列。当你命名事物时,你必须记住自然语言的常见用法。争取自然使用,其余的将随之而来。盲目遵守规则,你的读者会为理解而努力。

2

这里有很多很好的答案,所以我不会重复。但请记住千万不要命名列保留字!

还,我真的很喜欢在选项中的列名1

+0

如果您遇到过使用“不可能”列,表和其他名称处理数据库的问题,请记住SQL标准保留双引号引用名称,因此“THIS COLUMN”是有效的列名。在少数情况下,当我实际使用关键字时,我宁愿立即重命名它,所以我不知道这是否延伸到SQL关键字。为什么即使靠近潜在的痛苦来源? – holdenweb 2017-05-16 09:25:08

2

也许这只是我,但我不相信你应该命名与数据类型的列,既不复制表名遍布田野。