关系模型
关系模型
当时的其他数据库迫使应用程序开发人员必须考虑数据库内部的数据表示形式,关系模型致力于将上述实现细节隐藏在更简洁的接口之后。多年来,在数据存储和查询方面存在着许多相互竞争的方法。在
随着电脑越来越强大和互联,它们开始用于日益多样化的目的。关系数据库非常成功地被推广到业务数据处理的原始范围之外更为广泛的用例上。你今天在网上看到的大部分内容依旧是由关系数据库来提供支持,无论是在线发布,讨论,社交网络,电子商务,游戏,软件即服务生产力应用程序等等内容。
一对多关系
目前大多数应用程序开发都使用面向对象的编程语言来开发,这导致了对
像

整个简介可以通过一个唯一的标识符
- 传统
SQL 模型(SQL:1999 之前)中,最常见的规范化表示形式是将职位,教育和联系信息放在单独的表中,对User 表提供外键引用。 - 后续的
SQL 标准增加了对结构化数据类型和XML 数据的支持; 这允许将多值数据存储在单行内,并支持在这些文档内查询和索引。这些功能在Oracle ,IBM DB2,MS SQL Server 和PostgreSQL 中都有不同程度的支持。JSON 数据类型也得到多个数据库的支持,包括IBM DB2 ,MySQL 和PostgreSQL 。 - 第三种选择是将职业,教育和联系信息编码为
JSON 或XML 文档,将其存储在数据库的文本列中,并让应用程序解析其结构和内容。这种配置下,通常不能使用数据库来查询该编码列中的值。
对于一个像简历这样自包含文档的数据结构而言,
{
"user_id": 251,
"first_name": "Bill",
"last_name": "Gates",
"summary": "Co-chair of the Bill & Melinda Gates... Active blogger.",
"region_id": "us:91",
"industry_id": 131,
"photo_url": "/p/7/000/253/05b/308dd6e.jpg",
"positions": [
{
"job_title": "Co-chair",
"organization": "Bill & Melinda Gates Foundation"
},
{
"job_title": "Co-founder, Chairman",
"organization": "Microsoft"
}
],
"education": [
{
"school_name": "Harvard University",
"start": 1973,
"end": 1975
},
{
"school_name": "Lakeside School, Seattle",
"start": null,
"end": null
}
],
"contact_info": {
"blog": "http://thegatesnotes.com",
"twitter": "http://twitter.com/BillGates"
}
}

多对一和多对多的关系
值得注意的一点,
- 各个简介之间样式和拼写统一
- 避免歧义(例如,如果有几个同名的城市)
- 易于更新——名称只存储在一个地方,如果需要更改(例如,由于政治事件而改变城市名称
) ,很容易进行全面更新。 - 本地化支持——当网站翻译成其他语言时,标准化的列表可以被本地化,使得地区和行业可以使用用户的语言来显示
- 更好的搜索——例如,搜索华盛顿州的慈善家就会匹配这份简介,因为地区列表可以编码记录西雅图在华盛顿这一事实(从“Greater Seattle Area”这个字符串中看不出来)
存储
使用
不幸的是,对这些数据进行规范化需要多对一的关系(许多人生活在一个特定的地区,许多人在一个特定的行业工作