有ER图的情况下,创建数据库会相对简单一些。
这个项目使用的是Postgresql这个数据库,下载地址是:www.postgresql.org/download/ma… , 使用的是推荐的installer安装的。
数据库管理软件使用的是下载包里面自带的pgAdmin4.
1. 创建数据库
打开pgAdmin。(如果安装成功,第一次使用会要求输入你设置的密码)
在左侧的Databases上右键->Create->Database.
在database这里输入你想要的数据库的名字,其他保持默认就好。保存。
2. 创建数据库表
当你完成了创建以后,左侧就会出现已经建立好的数据库。
右键点击你刚刚创建的数据库,选择 Query Tool,进入SQL编辑窗口。我们将在这里编辑建表语句。
首先创造users表。
在SQL编辑器中如下图所示:
具体SQL语句如下:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
full_name TEXT,
role TEXT CHECK (role IN ('admin', 'staff', 'warehouse')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
点击上方 运行图标(execute按钮) 运行。运行成功下方会有提示。
同理,其他几张表的SQL语句是:
-- 注意,这里建表时有一定的顺序,因为涉及到一些表的外键(FK)的引用
-- 1. 用户表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
full_name TEXT,
role TEXT CHECK (role IN ('admin', 'staff', 'warehouse')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 2. 产品表
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
specification TEXT,
unit TEXT,
price NUMERIC(10, 2),
stock_quantity INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 3. 客户表
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
contact_number TEXT,
email TEXT,
address TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 4. 入库记录表
CREATE TABLE inbound_shipments (
id SERIAL PRIMARY KEY,
product_id INTEGER REFERENCES products(id),
quantity INTEGER NOT NULL,
shipment_code TEXT,
arrival_date DATE,
created_by INTEGER REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 5. 订单表
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INTEGER REFERENCES customers(id),
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by INTEGER REFERENCES users(id),
is_delivery BOOLEAN DEFAULT FALSE,
status TEXT CHECK (status IN ('pending', 'fulfilled', 'canceled')) DEFAULT 'pending'
);
-- 6. 订单明细表
CREATE TABLE order_items (
id SERIAL PRIMARY KEY,
order_id INTEGER REFERENCES orders(id),
product_id INTEGER REFERENCES products(id),
quantity INTEGER NOT NULL,
unit_price NUMERIC(10, 2) NOT NULL
);
-- 7. 配送记录表(可选)
CREATE TABLE delivery (
id SERIAL PRIMARY KEY,
order_id INTEGER UNIQUE REFERENCES orders(id),
delivery_date DATE,
delivered_by INTEGER REFERENCES users(id),
is_delivered BOOLEAN DEFAULT FALSE,
notes TEXT
);
3. 创建完成
创建完成后,可以在左侧 Schemas->public->Tables 下面找到刚刚创建的表单。
========
以下为补充内容:
这几张表的字段以及各字段的含义如下:
users(系统用户):
| 字段名 | 类型 | 描述 |
|---|---|---|
id | SERIAL (PK) | 用户 ID,自增主键 |
username | TEXT | 登录名(唯一) |
password_hash | TEXT | 加密后的密码 |
full_name | TEXT | 用户姓名 |
role | TEXT | 角色:如 'admin'、'staff'、'warehouse' |
created_at | TIMESTAMP | 创建时间 |
products(商品信息):
| 字段名 | 类型 | 描述 |
|---|---|---|
id | SERIAL (PK) | 产品 ID,自增主键 |
name | TEXT | 产品名称(如 角铝、圆管 等) |
specification | TEXT | 规格(如 20x20mm、2mm 厚) |
unit | TEXT | 单位(如 米、条、根) |
price | NUMERIC(10, 2) | 单价(如 12.50) |
stock_quantity | INTEGER | 当前库存数量 |
created_at | TIMESTAMP | 添加时间 |
inbound_shipments(入库记录):
| 字段名 | 类型 | 描述 |
|---|---|---|
id | SERIAL (PK) | 入库记录 ID |
product_id | INTEGER (FK → products.id) | 入库的产品 |
quantity | INTEGER | 入库数量 |
shipment_code | TEXT | 货柜编号或批次号(可选) |
arrival_date | DATE | 到货日期 |
created_by | INTEGER (FK → users.id) | 哪个用户录入的 |
created_at | TIMESTAMP | 入库登记时间 |
customers(客户信息):
| 字段名 | 类型 | 描述 |
|---|---|---|
id | SERIAL (PK) | 客户 ID |
name | TEXT | 客户名称(公司名或个人名) |
contact_number | TEXT | 电话号码 |
email | TEXT | 邮箱(可选) |
address | TEXT | 地址 |
created_at | TIMESTAMP | 添加时间 |
orders(客户订单):
| 字段名 | 类型 | 描述 |
|---|---|---|
id | SERIAL (PK) | 订单 ID |
customer_id | INTEGER (FK → customers.id) | 所属客户 |
order_date | TIMESTAMP | 下单时间 |
created_by | INTEGER (FK → users.id) | 哪位员工录入的 |
is_delivery | BOOLEAN | 是否需要配送 |
status | TEXT | 状态(如:pending, fulfilled, canceled) |
order_items(订单中的商品):
| 字段名 | 类型 | 描述 |
|---|---|---|
id | SERIAL (PK) | 明细 ID |
order_id | INTEGER (FK → orders.id) | 所属订单 |
product_id | INTEGER (FK → products.id) | 产品 |
quantity | INTEGER | 数量 |
unit_price | NUMERIC(10, 2) | 下单时的单价(防止价格变动影响历史) |
delivery(配送信息,可选):有些客户选择过来自提(pick up)货物(铝制建筑材料),有些客户选择付款让仓库人员配送。
| 字段名 | 类型 | 描述 |
|---|---|---|
id | SERIAL (PK) | 配送记录 ID |
order_id | INTEGER (FK → orders.id) | 对应的订单 |
delivery_date | DATE | 配送日期 |
delivered_by | INTEGER (FK → users.id) | 配送人员 |
is_delivered | BOOLEAN | 是否已送达 |
notes | TEXT | 配送备注(可选) |
各个表的一对多关系:
| 主表 | 子表 | 关系类型 |
|---|---|---|
customers → orders | 1 → ∞ | |
orders → order_items | 1 → ∞ | |
products → order_items | 1 → ∞ | |
products → inbound_shipments | 1 → ∞ | |
users → orders, inbound_shipments, delivery | 1 → ∞ | |
orders → delivery | 1 → 1(可选) |
========
下一篇内容:手动往数据库里面添加一些测试数据。