当前位置:首页 > 问答 > 正文

商场管理数据库源代码,帮你快速搭建高效又实用的商务管理系统

(来源:CSDN博客 -《商场管理系统数据库设计》)

商场管理数据库源代码,帮你快速搭建高效又实用的商务管理系统

这是一个用于商场管理的SQL Server数据库脚本示例,这个脚本包含了创建数据库、数据表以及一些基础数据的过程,这只是一个基础框架,实际商用需要根据具体需求进行大量扩充和优化。

商场管理数据库源代码,帮你快速搭建高效又实用的商务管理系统

-- 创建数据库
CREATE DATABASE ShoppingMallDB;
GO
USE ShoppingMallDB;
GO
-- 1. 创建部门表
CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY IDENTITY(1,1), -- 部门编号,主键,自增长
    DepartmentName NVARCHAR(50) NOT NULL,        -- 部门名称
    ManagerID INT,                               -- 部门经理ID(关联员工表)
    Description NVARCHAR(255)                    -- 部门描述
);
GO
-- 2. 创建员工表
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY IDENTITY(1,1), -- 员工编号,主键,自增长
    EmployeeName NVARCHAR(50) NOT NULL,        -- 员工姓名
    Gender NVARCHAR(10),                       -- 性别
    PhoneNumber NVARCHAR(20),                  -- 电话号码
    HireDate DATE,                             -- 入职日期
    Salary DECIMAL(10,2),                      -- 工资
    DepartmentID INT FOREIGN KEY REFERENCES Departments(DepartmentID) -- 所属部门,外键
);
GO
-- 为部门表添加外键约束,指向员工表(经理也是员工)
ALTER TABLE Departments
ADD CONSTRAINT FK_Departments_ManagerID FOREIGN KEY (ManagerID) REFERENCES Employees(EmployeeID);
GO
-- 3. 创建供应商表
CREATE TABLE Suppliers (
    SupplierID INT PRIMARY KEY IDENTITY(1,1), -- 供应商编号
    SupplierName NVARCHAR(100) NOT NULL,      -- 供应商名称
    ContactPerson NVARCHAR(50),               -- 联系人
    Phone NVARCHAR(20),                       -- 联系电话
    Address NVARCHAR(255)                     -- 地址
);
GO
-- 4. 创建商品类别表
CREATE TABLE Categories (
    CategoryID INT PRIMARY KEY IDENTITY(1,1), -- 商品类别编号
    CategoryName NVARCHAR(50) NOT NULL,       -- 类别名称
    ParentCategoryID INT NULL,                -- 父级类别ID(用于多级分类)
    FOREIGN KEY (ParentCategoryID) REFERENCES Categories(CategoryID) -- 自关联外键
);
GO
-- 5. 创建商品信息表
CREATE TABLE Products (
    ProductID INT PRIMARY KEY IDENTITY(1,1),  -- 商品编号
    ProductName NVARCHAR(100) NOT NULL,       -- 商品名称
    CategoryID INT FOREIGN KEY REFERENCES Categories(CategoryID), -- 商品类别
    SupplierID INT FOREIGN KEY REFERENCES Suppliers(SupplierID), -- 供应商
    UnitPrice DECIMAL(10,2) NOT NULL,         -- 单价
    UnitInStock INT DEFAULT 0,                -- 库存数量
    ReorderLevel INT,                         -- 库存预警线
    Discontinued BIT DEFAULT 0                -- 是否下架(0在售,1下架)
);
GO
-- 6. 创建会员表
CREATE TABLE Members (
    MemberID INT PRIMARY KEY IDENTITY(1,1), -- 会员编号
    MemberName NVARCHAR(50) NOT NULL,       -- 会员姓名
    PhoneNumber NVARCHAR(20) UNIQUE,        -- 手机号(唯一)
    Points INT DEFAULT 0,                   -- 积分
    RegistrationDate DATE DEFAULT GETDATE() -- 注册日期
);
GO
-- 7. 创建销售主表(订单头)
CREATE TABLE SalesOrders (
    OrderID INT PRIMARY KEY IDENTITY(1,1),  -- 订单编号
    OrderDate DATETIME DEFAULT GETDATE(),   -- 下单时间
    MemberID INT FOREIGN KEY REFERENCES Members(MemberID), -- 会员ID(非会员可为空)
    TotalAmount DECIMAL(10,2) DEFAULT 0,    -- 订单总金额
    CashierID INT FOREIGN KEY REFERENCES Employees(EmployeeID), -- 收银员
    PaymentMethod NVARCHAR(20)              -- 支付方式(现金、刷卡、扫码等)
);
GO
-- 8. 创建销售明细表(订单行项目)
CREATE TABLE SalesOrderDetails (
    DetailID INT PRIMARY KEY IDENTITY(1,1), -- 明细项ID
    OrderID INT FOREIGN KEY REFERENCES SalesOrders(OrderID), -- 所属订单
    ProductID INT FOREIGN KEY REFERENCES Products(ProductID), -- 商品
    UnitPrice DECIMAL(10,2) NOT NULL,       -- 成交单价
    Quantity INT NOT NULL,                  -- 购买数量
    SubTotal AS (UnitPrice * Quantity)      -- 小计(计算列)
);
GO
-- 9. 创建库存变更记录表(进货/盘点等)
CREATE TABLE InventoryTransactions (
    TransactionID INT PRIMARY KEY IDENTITY(1,1), -- 交易ID
    ProductID INT FOREIGN KEY REFERENCES Products(ProductID), -- 商品
    TransactionDate DATETIME DEFAULT GETDATE(), -- 交易日期
    QuantityChange INT NOT NULL,              -- 数量变化(正数为入库,负数为出库)
    TransactionType NVARCHAR(20),             -- 交易类型(如:Purchase进货、Sale销售、Adjustment调整)
    ReferenceID INT,                          -- 关联单据ID(如进货单号、销售单号)
    Notes NVARCHAR(255)                       -- 备注
);
GO
-- 插入一些示例数据(来源:个人项目常用测试数据)
-- 插入部门
INSERT INTO Departments (DepartmentName, Description) VALUES ('行政部', '负责行政事务');
INSERT INTO Departments (DepartmentName, Description) VALUES ('财务部', '负责财务管理');
INSERT INTO Departments (DepartmentName, Description) VALUES ('销售部', '负责商品销售');
INSERT INTO Departments (DepartmentName, Description) VALUES ('采购部', '负责商品采购');
-- 插入员工(先不指定经理,因为经理ID需要员工ID)
INSERT INTO Employees (EmployeeName, Gender, PhoneNumber, HireDate, Salary, DepartmentID) VALUES ('张三', '男', '13800138001', '2020-01-01', 8000, 1);
INSERT INTO Employees (EmployeeName, Gender, PhoneNumber, HireDate, Salary, DepartmentID) VALUES ('李四', '女', '13800138002', '2020-02-01', 7500, 3);
INSERT INTO Employees (EmployeeName, Gender, PhoneNumber, HireDate, Salary, DepartmentID) VALUES ('王五', '男', '13800138003', '2020-03-01', 7000, 4);
-- 更新部门经理(假设张三管行政部,李四管销售部)
UPDATE Departments SET ManagerID = 1 WHERE DepartmentID = 1;
UPDATE Departments SET ManagerID = 2 WHERE DepartmentID = 3;
-- 插入供应商
INSERT INTO Suppliers (SupplierName, ContactPerson, Phone, Address) VALUES ('XX食品有限公司', '赵经理', '400-100-1000', 'XX市工业区1号');
INSERT INTO Suppliers (SupplierName, ContactPerson, Phone, Address) VALUES ('YY饮料集团', '钱总', '400-200-2000', 'XX市开发区2号');
-- 插入商品类别
INSERT INTO Categories (CategoryName, ParentCategoryID) VALUES ('食品', NULL); -- 一级分类
INSERT INTO Categories (CategoryName, ParentCategoryID) VALUES ('饮料', NULL);
INSERT INTO Categories (CategoryName, ParentCategoryID) VALUES ('零食', 1);    -- 二级分类,父类是“食品”
INSERT INTO Categories (CategoryName, ParentCategoryID) VALUES ('碳酸饮料', 2);
-- 插入商品
INSERT INTO Products (ProductName, CategoryID, SupplierID, UnitPrice, UnitInStock, ReorderLevel) VALUES ('薯片(原味)', 3, 1, 5.50, 100, 20);
INSERT INTO Products (ProductName, CategoryID, SupplierID, UnitPrice, UnitInStock, ReorderLevel) VALUES ('可乐(500ml)', 4, 2, 3.00, 200, 50);
-- 插入会员
INSERT INTO Members (MemberName, PhoneNumber, Points) VALUES ('顾客A', '13900139001', 150);
INSERT INTO Members (MemberName, PhoneNumber) VALUES ('顾客B', '13900139002');
-- 创建一个销售订单示例(来源:简易销售流程模拟)
-- 1. 创建订单头
INSERT INTO SalesOrders (MemberID, CashierID, PaymentMethod) VALUES (1, 2, '微信支付');
-- 假设上一条插入的OrderID是1
-- 2. 创建订单明细
INSERT INTO SalesOrderDetails (OrderID, ProductID, UnitPrice, Quantity) VALUES (1, 1, 5.50, 2); -- 买2包薯片
INSERT INTO SalesOrderDetails (OrderID, ProductID, UnitPrice, Quantity) VALUES (1, 2, 3.00, 1); -- 买1瓶可乐
-- 3. 更新订单总金额(可以通过触发器自动完成,这里手动更新演示)
UPDATE SalesOrders SET TotalAmount = (SELECT SUM(SubTotal) FROM SalesOrderDetails WHERE OrderID = 1) WHERE OrderID = 1;
-- 4. 更新库存(也可以通过触发器自动完成)
INSERT INTO InventoryTransactions (ProductID, QuantityChange, TransactionType, ReferenceID, Notes) VALUES (1, -2, 'Sale', 1, '销售出库');
INSERT INTO InventoryTransactions (ProductID, QuantityChange, TransactionType, ReferenceID, Notes) VALUES (2, -1, 'Sale', 1, '销售出库');
-- 5. 同步更新商品表的库存(可以通过触发器或存储过程实现)
UPDATE Products SET UnitInStock = UnitInStock - 2 WHERE ProductID = 1;
UPDATE Products SET UnitInStock = UnitInStock - 1 WHERE ProductID = 2;
-- 可以创建一些视图以便查询(来源:常见查询需求)
-- 查看商品完整信息(含类别和供应商名称)
CREATE VIEW V_ProductInfo AS
SELECT p.ProductID, p.ProductName, c.CategoryName, s.SupplierName, p.UnitPrice, p.UnitInStock
FROM Products p
LEFT JOIN Categories c ON p.CategoryID = c.CategoryID
LEFT JOIN Suppliers s ON p.SupplierID = s.SupplierID;
GO
-- 查看销售明细(含商品和订单信息)
CREATE VIEW V_SalesDetail AS
SELECT so.OrderID, so.OrderDate, m.MemberName, e.EmployeeName as CashierName, sod.ProductID, p.ProductName, sod.Quantity, sod.UnitPrice, sod.SubTotal
FROM SalesOrders so
LEFT JOIN Members m ON so.MemberID = m.MemberID
LEFT JOIN Employees e ON so.CashierID = e.EmployeeID
JOIN SalesOrderDetails sod ON so.OrderID = sod.OrderID
JOIN Products p ON sod.ProductID = p.ProductID;
GO
-- 使用视图查询
SELECT * FROM V_ProductInfo;
SELECT * FROM V_SalesDetail WHERE OrderID = 1;

(来源:GitHub上的开源项目说明)

这个脚本提供了一个起点,在实际应用中,你还需要考虑很多其他因素,

  1. 权限管理:创建不同的数据库用户和角色,控制他们对表的增删改查权限。
  2. 存储过程:将复杂的业务逻辑(如完整的销售流程、库存盘点)封装成存储过程,提高效率和安全性。
  3. 触发器:用于实现自动化的业务规则,例如在插入销售明细(SalesOrderDetails)后,自动更新商品库存(Products.UnitInStock)和记录库存变更(InventoryTransactions)。
  4. 索引:在经常用于查询条件的列(如ProductName, PhoneNumber, OrderDate)上创建索引,大幅提高查询速度。
  5. 数据备份与恢复策略:定期备份数据库,防止数据丢失。

直接使用此代码需要你具备基本的数据库知识,例如如何执行SQL脚本,建议先在测试环境中尝试,理解每一张表和每一个字段的作用,再根据你的商场具体业务流程进行修改和扩展。