网站首页 > 精选文章 正文
有 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 语句是:
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
);
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 );
CREATE TABLE customers ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, contact_number TEXT, email TEXT, address TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
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 );
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' );
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 );
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(可选) | |
========
下一篇内容:手动往数据库里面添加一些测试数据。
- 上一篇: MySQL数据库之数据库约束,一文带你了解
- 下一篇: 系统性能分析从入门到进阶(系统性能分析怎么写)
猜你喜欢
- 2025-07-23 MySQL之数据库的设计(mysql数据库设计与应用)
- 2025-07-23 MySQL--索引(mysql索引有哪几种)
- 2025-07-23 系统整容纪:用知识来"武装"自己~认识MySQL的锁与事务
- 2025-07-23 MySQL innodb的B+树到底长什么样,为什么MySQL要这样设计?
- 2025-07-23 软网推荐:超强密码的产生与记忆(网络密码解锁软件)
- 2025-07-23 Go语言数据库编程:GORM 的基本使用
- 2025-07-23 数据库——主键和唯一键的区别(mysql简述主键与唯一约束的区别)
- 2025-07-23 系统性能分析从入门到进阶(系统性能分析怎么写)
- 2025-07-23 MySQL数据库之数据库约束,一文带你了解
- 2025-07-23 mysql数据库——约束(mysql中约束)
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)