Abstract
数据库是有组织的数据集合。
Organized collection of inter-related data that models some aspect of the real-world.
何谓「有组织」
按照 CMU 15-445 的例子,我们考虑维护一个音乐软件的场景。我们可以以 CSV 格式维护艺人信息 Artist(name, year, country) 和专辑信息 Album(name, artist, year):
"Wu-Tang Clan",1992,"USA"
"Notorious BIG",1992,"USA"
"GZA",1990,"USA""Enter the Wu-Tang","Wu-Tang Clan",1993
"St.Ides Mix Tape","Wu-Tang Clan",1994
"Liquid Swords","GZA",1990这样,我们可以通过简单的 Python 脚本查询想要的信息,例如 GZA 的出道年份:
for line in file.readlines():
record = parse(line)
if record[0] == "GZA":
print(int(record[1]))这其实就实现了一个最基本的 Database,完成了基本的数据「组织」——可以通过可编程的手段对数据做修改和查询。
很多人(至少我)生活中确实有很多数据是通过简单的表格形式维护的,例如账单和通讯录。
但是,上面这种组织形式会有很多问题:
- Integrity:
- 如何保证每个 Album 的 artist 是有效的,而不会有拼写错误或简称之类的问题?
- 如果某个 Artist 的 year 不是合法数字,那上面 Python 代码的 line 4 会抛异常。
- Implementation:
- 找到特定记录,需要遍历整个文件。在数据库很大的时候速度会很慢。
- 每次更改查询都要重新写代码。如果要用同样的数据库开发另一个应用,那就要重新写一遍。换言之,数据没有合理的 抽象。
- 如果这个文件在另一个机器上怎么办?
- 如果有两个线程要同时写入怎么办?
- Durability:
上述问题就是一个现代的 数据库系统 要解决的问题。