关系型数据库设计注意点

避免冗余

冗余在不经意间就会发生。受登记表格的影响,可能会想在一张数据表里存放比较多的内容。比如要做一个学生宿舍借钥匙的数据表的话,会有如下设计:

mysql> desc key_loans;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | NO   | PRI | NULL    |       |
| s_name   | varchar(255) | YES  |     | NULL    |       |
| time     | datetime     | YES  |     | NULL    |       |
| room     | varchar(255) | YES  |     | NULL    |       |
| returned | tinyint(1)   | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

其中 s_name 是学生的名字,time 是借钥匙的时间,room 是宿舍号码,returned 用来记录该钥匙是否归还。这个表格看着挺好的,但是存在数据冗余的问题,比如一个学生借了多次钥匙,那么他的名字和宿舍号码就会在该表中不必要地出现多次,比如说下面的情况。

+----+--------+---------------------+------+----------+
| id | s_name | time                | room | returned |
+----+--------+---------------------+------+----------+
|  1 | 赵云   | 2019-09-15 23:59:05 | 408  |        1 |
|  2 | 张飞   | 2019-09-15 23:59:38 | 203  |        1 |
|  3 | 赵云   | 2019-09-15 23:59:55 | 408  |        1 |
+----+--------+---------------------+------+----------+

冗余影响更新数据

如果赵云改名字了怎么办?这时候就需要把所有出现赵云的地方都改成新的名字。

冗余影响删除

如果这个表还用作保留学生信息的功能,那删除记录1以后并没有把赵云这位同学的信息都删除。

正确的方式

应该把学生姓名放到额外的表里,然后给学生一个唯一标识符。如果需要学生名字出现在查询结果中,把两个表 join 一下就可以了。

数据像石油,是资源,所以越多越好

时间数据经常可以放一放。用户的行为都伴随着发生的时间,有了这个数据我们能更好地对数据做排序、分类等处理。

通过网络 API 进来的数据带有大量的 HTTP 头部信息。IP 地址是个信息量很大的属性,假设使用 vpn 的用户是少数的话,可以通过它来定位用户的位置。User-Agent 有用户设备的信息,故意修改这个信息的终端不常见。Referer 可以知道用户在访问之前看了哪个网页,等等。

关系型数据库(RDBMS)和非关系型数据库(NoSQL)是两种不同类型的数据库管理系统,它们在数据存储和组织方式上存在一些区别。 1. 数据模型: - 关系型数据库使用表格(表)来组织数据,表由行和列组成,每个表有一个预定义的结构(模式)。 - 非关系型数据库使用不同的数据模型,如键值对、文档、列族或图形等。这些模型可以更灵活地表示数据结构。 2. 数据一致性: - 关系型数据库通常遵循ACID(原子性、一致性、隔离性和持久性)原则,确保数据的一致性和可靠性。 - 非关系型数据库更注重可伸缩性和性能,可能在某些情况下牺牲一致性来提高性能。 3. 扩展性: - 关系型数据库在某些情况下可以很好地扩展,但通常需要垂直扩展(增加硬件资源)或水平扩展(使用分区和复制等技术)。 - 非关系型数据库设计为可水平扩展,可以轻松地通过添加更多的节来处理大规模数据。 4. 查询语言: - 关系型数据库使用结构化查询语言(SQL)进行数据查询和操作。 - 非关系型数据库通常使用特定的查询语言或API,如MongoDB的查询语言或Cassandra的CQL。 5. 数据一致性: - 在关系型数据库中,数据模型是严格的,必须遵循预定义的表结构和约束。 - 在非关系型数据库中,数据模型更加灵活,可以自由地添加、修改和删除数据字段。 需要注意的是,关系型数据库和非关系型数据库各有优劣,适用于不同的用场景。选择适当的数据库类型取决于数据的特用需求和性能要求等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值