Database design 将时间戳与数据库中的实际表分开

Database design 将时间戳与数据库中的实际表分开,database-design,timestamp,separation-of-concerns,Database Design,Timestamp,Separation Of Concerns,我想知道仅仅为数据库中的时间戳创建一个单独的表是否是一种好的做法 我有一个数据库,它有多个使用时间戳的表——所有6个相同的字段——我想知道,与其重复这些列,我可以只包含时间戳表的外键 以下是我过于简化的示例: 用户表: +----+-----------+-----------------------+ | ID | timestamp | username | +----+-----------+-----------------------+ | 1 | 1

我想知道仅仅为数据库中的
时间戳创建一个单独的
是否是一种好的做法

我有一个数据库,它有多个使用时间戳的表——所有6个相同的字段——我想知道,与其重复这些列,我可以只包含时间戳表的
外键

以下是我过于简化的示例:

用户表:

+----+-----------+-----------------------+
| ID | timestamp | username              |
+----+-----------+-----------------------+
| 1  | 1         | Nobody@nowhere.com    |
+----+-----------+-----------------------+
| 2  | 2         | nobody@nothere.ca     |
+----+-----------+-----------------------+
| 3  | 3         | nobody@hiding.org     |
+----+-----------+-----------------------+
| 4  | 4         | someone@somewhere.com |
+----+-----------+-----------------------+
| 5  | 4         | somebody@here.org     |
+----+-----------+-----------------------+
订单表

+----+-----------+--------------------+--------+
| ID | timestamp | ordersBlob         | userid |
+----+-----------+--------------------+--------+
| 1  | 6         | some text          | 1      |
+----+-----------+--------------------+--------+
| 2  | 7         | more text          | 1      |
+----+-----------+--------------------+--------+
| 3  | 8         | no text            | 2      |
+----+-----------+--------------------+--------+
| 4  | 9         | irony poining text | 3      |
+----+-----------+--------------------+--------+
| 5  | 10        | paradox text       | 4      |
+----+-----------+--------------------+--------+
+----+-----------+-----------+------------+------------+
| ID | createdOn | createdBy | modifiedOn | modifiedBy |
+----+-----------+-----------+------------+------------+
| 1  | 20170616  | 1         |            |            |
+----+-----------+-----------+------------+------------+
| 2  | 20170621  | 3         | 20170621   | 2          |
+----+-----------+-----------+------------+------------+
| 3  | 20160512  | 4         |            |            |
+----+-----------+-----------+------------+------------+
| 4  | 20160512  | 4         | 20160516   | 3          |
+----+-----------+-----------+------------+------------+
| 5  | 20160101  | 2         |            |            |
+----+-----------+-----------+------------+------------+
| 6  | 20160102  | 2         | 20160103   | 3          |
+----+-----------+-----------+------------+------------+
| 7  | 20160103  | 4         |            |            |
+----+-----------+-----------+------------+------------+
| 8  | 20160104  | 1         |            |            |
+----+-----------+-----------+------------+------------+
| 9  | 20160105  | 5         |            |            |
+----+-----------+-----------+------------+------------+
| 10 | 20160106  | 1         | 20160106   | 1          |
+----+-----------+-----------+------------+------------+
时间戳表

+----+-----------+--------------------+--------+
| ID | timestamp | ordersBlob         | userid |
+----+-----------+--------------------+--------+
| 1  | 6         | some text          | 1      |
+----+-----------+--------------------+--------+
| 2  | 7         | more text          | 1      |
+----+-----------+--------------------+--------+
| 3  | 8         | no text            | 2      |
+----+-----------+--------------------+--------+
| 4  | 9         | irony poining text | 3      |
+----+-----------+--------------------+--------+
| 5  | 10        | paradox text       | 4      |
+----+-----------+--------------------+--------+
+----+-----------+-----------+------------+------------+
| ID | createdOn | createdBy | modifiedOn | modifiedBy |
+----+-----------+-----------+------------+------------+
| 1  | 20170616  | 1         |            |            |
+----+-----------+-----------+------------+------------+
| 2  | 20170621  | 3         | 20170621   | 2          |
+----+-----------+-----------+------------+------------+
| 3  | 20160512  | 4         |            |            |
+----+-----------+-----------+------------+------------+
| 4  | 20160512  | 4         | 20160516   | 3          |
+----+-----------+-----------+------------+------------+
| 5  | 20160101  | 2         |            |            |
+----+-----------+-----------+------------+------------+
| 6  | 20160102  | 2         | 20160103   | 3          |
+----+-----------+-----------+------------+------------+
| 7  | 20160103  | 4         |            |            |
+----+-----------+-----------+------------+------------+
| 8  | 20160104  | 1         |            |            |
+----+-----------+-----------+------------+------------+
| 9  | 20160105  | 5         |            |            |
+----+-----------+-----------+------------+------------+
| 10 | 20160106  | 1         | 20160106   | 1          |
+----+-----------+-----------+------------+------------+
这些表格只是一个例子。这样做可以吗。如果您能提供反例和您不愿意这样做的原因,请提供


希望这不是基于太多的意见。

它不会为您节省任何磁盘空间,因为“时间戳”表需要索引。此外,在现实场景中,已审核表中的每一行都需要“timestamps”表中的单独行,因此“timestamps”记录不太可能被重用

这将降低插入/更新/选择的性能,因为每个操作都需要触摸2个表,这将使磁盘IO量加倍(如果要重用“时间戳”记录,情况会更糟)


此外,这将使您的数据表更难管理,更难保持一致性,并且您的代码将变得更加复杂。

我没有想到这会减慢我的操作。记住这一点很好!谢谢