爬虫工作量由小到大的思维转变---<第十章 Scrapy之sql表单的小心得>

前言:

太多的设计理论也不说了;但是,针对爬虫这一块,有几个小地方,我觉得还是通用的!

(-----版权所有。未经作者书面同意,不得转载或用于任何商业用途!----)

正文:

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使得产品信息更新时,所有引用了该产品的订单信息也会同步更新。

(-----版权所有。未经作者书面同意,不得转载或用于任何商业用途!----)

你可能感兴趣的:(15天玩转高级python,scrapy,sql,数据库)