开发者

Semantics of naming a MYSQL timestamp column

I need a MySQL table that represents this data:

  • Feb 12, 5:00pm - Verdasco VS Monfils
  • Feb 12, 9:25pm - Sampras VS Hewitt
  • Feb 13, 8:15am - Nishikori VS Del Potro

I wanted to name the time column time, timestamp, or date, but as you know, those are all reserved keywords. What is the best way to name a time column without purposely sounding cheesy to get around th开发者_如何转开发e naming limitations?


I understand the feeling that a column called EventDate in a table called Events (which, by all the DB conventions I've ever learned, should be called Event... ;)) is redundant, but consider:

You have an Event table with a Date column and a Booking table, whose records represent a customer's booking a seat at an event, also with a Date column (which, in this context, refers to the date that the seat was booked):

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

Having to account for the ambiguous column names in every such query is a penalty which may (and does, in my opinion) outweigh the supposed redundancy of Event.EventDate.

Consider another argument which we can apply to the names of the ID columns in each table: calling the PK in Event EventId instead of merely Id lets us write this JOIN criterion:

JOIN Booking b ON b.EventId = e.EventId

Which we can see at a glance references the correct columns.

In summary, if we have to make the decision between calling the column Date or EventDate, the latter has many benefits:

  • As @Benjamin Seiller points out, a column should identify the column's meaning, not necessarily its datatype
  • Further, what happens when you have a table with three different date fields representing dates relevant to the entity? If you don't name them all based on their meaning, you now have to remember which field means what...
  • As soon as we wish to query multiple tables, ambiguous column names present problems
  • If columns that appear in multiple tables (such as foreign keys) have explicit and identical names, our query syntax becomes a little more resistant to bugs (such as joining on the wrong column)

Consider all the situations in which your table may be used when deciding on column names. In this case, I'll argue that the benefits of supplying context-specific information in the column name far outweigh the redundancy of repeating the table name.


I prefer verb in past tense and "Time", i.e. 'createdTime', 'publishedTime', in your case I can't find a verb, but 'matchTime' looks ok.


The column-name should not point to the data-type but to its meaning. Like event_start_datetime or created for the timestamp of creation of that entry.


What is Verdasco VS Monfils? Are they events? Then I would go with EventDate or something similar. Try to name it of how you would describe it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜