文章摘要
文章探讨了世界上最古老的交易记录,追溯到公元前3100年的苏美尔文明,记录了麦芽和大麦的交易。作者进一步研究了现代数据库对最早时间戳的支持,发现MySQL仅支持到公元1000年,而Postgres和SQLite则支持到公元前4713年。文章最后提出了如何存储更早日期的疑问。
文章总结
标题:最古老的交易记录
前几天,我在推特上发布了一张图片,觉得很有趣:
这是公元前3100年最古老的交易记录,记载了麦芽和大麦片的账目。考虑到这件东西已经存在了5000年(天哪!)且从未中断,其耐久性比当今大多数数据库都要强。
我称之为“坚如磐石的耐久性”。
这让我开始思考,能否将这一日期插入到现代数据库中?数据库能支持的最早时间戳是什么?
于是,我检查了三种主流数据库:MySQL、Postgres和SQLite:
| | | | --- | --- | | MySQL | 公元1000年 | | Postgres | 公元前4713年 | | SQLite | 公元前4713年 |
可惜的是,MySQL无法支持这一日期。Postgres和SQLite支持儒略历,最早日期为公元前4713年1月1日:
``` sales=# INSERT INTO orders VALUES ('4713-01-01 BC'::date); INSERT 0 1 sales=# SELECT * FROM orders;
timestamp
4713-01-01 BC (1 row) sales=# INSERT INTO orders VALUES ('4714-01-01 BC'::date); ERROR: date out of range: "4714-01-01 BC" ```
我好奇人们如何存储比这更早的日期。比如,如果我是大英博物馆的管理员,想要记录库存细节,我该怎么做?用纪元时间?以文本形式存储?还是使用某种自定义系统?如何让它支持典型TIMESTAMP的所有操作?
感谢aku、happy_shady、Bhat先生和General Bruh阅读了这篇文章的初稿。
评论总结
评论内容主要围绕古代交易记录、文字起源、数据存储和考古发现展开,观点多样且涉及多个领域。以下是主要观点和论据的总结:
古代交易记录的普遍性与重要性
- 评论5指出,最早的书写样本并非爱情信件或故事,而是收据,反映了其普遍性而非重要性。
- 评论7补充,早期书写主要用于记录经济信息,如谷物分配,并逐渐发展为能够表达苏美尔语言的复杂系统。
数据存储与古代日期的处理
- 评论4提到,SQLite可以存储任何古代时间戳,尽管日期库可能不支持。
- 评论11讨论了博物馆中如何处理无具体日期的物品,通常使用“大约X年”的文本形式。
古代文字的耐久性与幸存者偏差
- 评论6调侃古代记录的耐久性,称其“零停机时间”,但也指出这是幸存者偏差,因为大部分记录已被侵蚀或毁坏。
- 评论8进一步强调,幸存者偏差使得我们只能看到保存完好的极少数样本。
古代文字与交易处理的关系
- 评论10引用《交易处理》一书,指出苏美尔人发明文字是为了处理交易。
- 评论12探讨了数值约束与区间树索引的关系,指出文本形式的区间树索引虽然不常见,但有其应用价值。
考古发现与文化遗产的归属
- 评论14提出,随着古代DNA研究揭示人口更替的复杂性,关于文物归属的争议将加剧。
- 评论9批评了在考古讨论中引入政治观点的做法,认为这会降低文章的可信度。
总结:评论从多个角度探讨了古代交易记录、文字起源、数据存储和考古发现的意义与挑战,既有对古代文化的深入分析,也有对现代技术应用的思考。