当前位置:首页>python>Python 并发与 asyncio 5.3 定义数据库模式

Python 并发与 asyncio 5.3 定义数据库模式

  • 2026-08-27 06:30:41
Python 并发与 asyncio 5.3 定义数据库模式

5.3 定义数据库模式

要开始对数据库进行查询,首先得创建数据库模式。我们将设计一个名为 products 的简单模式,模拟线上商店可能库存的真实商品。先定义几个实体,再转为数据库表。

品牌

品牌是生产多种不同产品的制造商。例如,福特(Ford)是一个品牌,生产福克斯、F150 等多款汽车。

产品

产品属于一个品牌,品牌与产品之间是一对多关系。为简化,我们的产品只包含名称。比如“福克斯”是一款产品,品牌是“福特”。此外,每个产品有多种尺寸和颜色。我们将可用的尺寸和颜色定义为 SKU。

SKU

SKU 是“库存单位”的缩写,代表商店销售的具体商品。例如,“牛仔裤”是待售商品,一个 SKU 可能是“牛仔裤,中码,蓝色”或“牛仔裤,小码,黑色”。产品与 SKU 也是一对多关系。

产品尺寸

产品可有多种尺寸。本例中我们只考虑三种:小、中、大。每个 SKU 对应一个产品尺寸,因此产品尺寸与 SKU 是一对多关系。

产品颜色

产品可有多种颜色。本例中库存只有两种颜色:黑色和蓝色。产品颜色与 SKU 也是一对多关系。

图 5.1 产品数据库的实体图

综合来看,我们建模的数据库结构如图 5.1 所示。

接下来,定义一些变量存储创建该模式所需的 SQL 语句。使用 asyncpg 执行这些语句来创建产品数据库。由于尺寸和颜色是固定的,我们还会预先插入几条记录到 product_size 和 product_color 表中。我们将在后续代码清单中引用这些变量,避免重复冗长的 SQL 创建语句。

列表 5.2 产品模式表创建语句

CREATE_BRAND_TABLE = \    """    CREATE TABLE IF NOT EXISTS brand(        brand_id SERIAL PRIMARY KEY,        brand_name TEXT NOT NULL    );"""CREATE_PRODUCT_TABLE = \    """    CREATE TABLE IF NOT EXISTS product(        product_id SERIAL PRIMARY KEY,        product_name TEXT NOT NULL,        brand_id INT NOT NULL,        FOREIGN KEY (brand_id) REFERENCES brand(brand_id)    );"""CREATE_PRODUCT_COLOR_TABLE = \    """    CREATE TABLE IF NOT EXISTS product_color(        product_color_id SERIAL PRIMARY KEY,        product_color_name TEXT NOT NULL    );"""CREATE_PRODUCT_SIZE_TABLE = \    """    CREATE TABLE IF NOT EXISTS product_size(        product_size_id SERIAL PRIMARY KEY,        product_size_name TEXT NOT NULL    );"""CREATE_SKU_TABLE = \    """    CREATE TABLE IF NOT EXISTS sku(       sku_id SERIAL PRIMARY KEY,       product_id INT NOT NULL,       product_size_id INT NOT NULL,       product_color_id INT NOT NULL,       FOREIGN KEY (product_id)       REFERENCES product(product_id),       FOREIGN KEY (product_size_id)       REFERENCES product_size(product_size_id),       FOREIGN KEY (product_color_id)       REFERENCES product_color(product_color_id)    );"""COLOR_INSERT = \    """    INSERT INTO product_color VALUES(1, 'Blue');    INSERT INTO product_color VALUES(2, 'Black');    """SIZE_INSERT = \    """    INSERT INTO product_size VALUES(1, 'Small');    INSERT INTO product_size VALUES(2, 'Medium');    INSERT INTO product_size VALUES(3, 'Large');    """

有了创建表和插入尺寸颜色的语句,接下来就需要一种方式来运行这些查询。

最新文章

随机文章