前言:
太多的设计理论也不说了;但是,针对爬虫这一块,有几个小地方,我觉得还是通用的!
(-----版权所有。未经作者书面同意,不得转载或用于任何商业用途!----)
正文:
1. `DATETIME` 数据类型
`DATETIME` 类型存储精确到秒的日期和时间信息,对于需要记录具体事件发生时间的应用场景至关重要。例如,在一个体育赛事数据库中,`match_time DATETIME` 字段可以精确地记录每场比赛的开始时间,这对于跟踪比赛进度、安排转播或实施赛事日程至关重要。
案例:?
在线预订系统中,`DATETIME` 可用于记录用户预订房间或票务的确切时间,进而对用户行为进行分析,为用用户提供个性化推荐。
match_time DATETIME, --时间如 '2023-12-15 14:30:00'包括年、月、日、时、分、秒
?2. `DATE` 数据类型
`DATE` 类型只存储年月日,适用于不需要时间信息的场景。比如,一家公司可能只需要知道雇员的入职日期,而时分秒对于这种用途是多余的。
案例:
在人力资源管理系统中,雇员的`hire_date DATE`字段用于记录其入职日期,这有助于计算工龄、安排年度评估等。
date DATE, -- 记录的信息只有年、月、日'比如 2023-12-15'
3. `JSON` 数据类型
`JSON`(JavaScript Object Notation)数据类型用于存储结构化的数据,允许在单个字段中保存数据对象或数组。这是数据库与现代Web应用间灵活交互的关键,因为JSON广泛用于Web API。
案例:?
在电商平台上,raw_data JSON 字段可用于存储商品的详细信息,如尺寸、颜色和库存级别。这样的结构使得可以在单独的字段中存储和查询复杂的数据结构。
raw_data JSON, --原始数据(可以存成json(dataframe))
4.TIMESTAMP??数据类型和自动时间戳
created_at 和 updated_at 字段通常用 TIMESTAMP 数据类型,它们自动记录数据的创建和最后更新时间。这对于维护数据的版本控制和审计跟踪非常有帮助。
案例:
在用户管理系统中,每当用户记录被创建或修改时,created_at 和 updated_at 字段自动更新,帮助管理员跟踪用户信息的变更历史。
--时间戳会以 YYYY-MM-DD HH:MM:SS 的格式自动插入,例如"2023-12-15 14:30:00"
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, --创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, --修改时间
5. 外键约束和级联操作
外键约束用于维持不同数据表之间的引用完整性。在本例中,FOREIGN KEY (match_id) REFERENCES match_info(id) 保证 match_id 字段总是指向 match_info 表中的一个有效 id。ON DELETE CASCADE 选项确保如果主表中的记录被删除,所有依赖这个记录的从表中的相关记录也会被自动删除,这有助于避免孤立数据的产生。
案例:
在XX系统中,如果一个比赛项 match_info 被删除,比如因为比赛取消,所有相关的赔lv记录、历史分析等也应该随之删除,ON DELETE CASCADE 会自动处理这种情况,从而避免了手动清理数据的成本和可能的错误。
FOREIGN KEY (match_id) REFERENCES match_info(id) ON DELETE CASCADE ON UPDATE NO ACTION --关联主表的删除
整体结合案例:
?-案例简介:
? ?在迅速发展的电子商务行业,为了高效处理庞大的产品数据和用户行为信息,我们设计一个由多个表构成的强大数据库系统。这个系统将用来追踪产品信息、用户订单、以及库存变化,其中会运用到DATETIME, DATE, JSON, TIMESTAMP, 以及外键约束等关键SQL特性,以确保数据的准确性、完整性和即时性。
CREATE TABLE product_info (
id INT PRIMARY KEY,
name VARCHAR(255),
description TEXT,
price DECIMAL(10, 2),
raw_data JSON,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE order_info (
order_id INT PRIMARY KEY,
user_id INT,
product_id INT,
quantity INT,
order_time DATETIME,
status VARCHAR(50),
details JSON,
FOREIGN KEY (product_id) REFERENCES product_info(id) ON DELETE RESTRICT ON UPDATE CASCADE
);
CREATE TABLE user_activity (
activity_id INT PRIMARY KEY,
user_id INT,
activity_date DATE,
activity_type VARCHAR(100),
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
案例总结说明:
product_info 表用来存储产品的JSON数据,order_info 表记录了订单时间和订单详细信息,而user_activity 表跟踪用户的活动和行为模式。使用FOREIGN KEY约束保护了产品信息,ON DELETE RESTRICT确保了产品信息在被其他表引用时不能被删除,ON UPDATE CASCADE使得产品信息更新时,所有引用了该产品的订单信息也会同步更新。
(-----版权所有。未经作者书面同意,不得转载或用于任何商业用途!----)