引自强大而免费的微信小程序:皆我百晓生。
数据库设计说明书
问题的描述:
股票交易系统是一个用于管理股票发行和交易的系统。该系统需要支持管理员用户、交易用户和操盘手用户。管理员用户负责股票的发行和退市操作,交易用户可以进行股票交易和查看股票信息,操盘手用户可以被授权进行股票操作。系统需要支持股票发行、挂盘销售、股票退市等功能,并能提供股票价格、交易量、收盘价等交易数据的查询。
需求分析:
根据问题描述,我们需要设计一个数据库来存储股票交易系统的相关数据,并支持相应的查询操作。数据库需要包括以下表:
- 公司表(Company):记录公司的基本信息,如公司代码、证券代码、公司名称等。
- 股票表(Stock):记录股票的基本信息,如股票代码、股票名称、证券代码等。
- 持有人表(Holder):记录持有人的基本信息,如持有人代码、持有人姓名等。
- 交易表(Trade):记录股票的交易信息,如交易代码、交易日期、交易价格等。
- 操盘手表(Trader):记录操盘手的基本信息,如操盘手代码、操盘手姓名等。
概念模型
- 逻辑结构
逻辑结构包括以下实体表格:
- 用户表(User):存储用户的基本信息,包括用户ID、用户名和密码等。
- 股票表(Stock):存储股票的基本信息,包括股票代码、股票名称和发行数量等。
- 持股表(Holding):存储用户持有的股票信息,包括用户ID、股票代码、持股数量和购入价格等。
- 挂盘表(Listing):存储用户挂盘销售的股票信息,包括用户ID、股票代码、挂盘数量和挂盘价格等。
- 交易表(Transaction):存储用户交易的股票信息,包括用户ID、股票代码、交易类型、交易数量和交易价格等。
2、数据库设计
2.1 逻辑结构
用户表(User):
- 主键:用户ID(UserID)
- 用户名(Username)
- 密码(Password)
- 用户类型(UserType)
股票表(Stock):
- 主键:股票ID(StockID)
- 股票名称(StockName)
- 发行数量(IssueQuantity)
- 开盘价(OpeningPrice)
- 每手数量(LotSize)
持股表(Holding):
- 外键:用户ID(UserID)
- 外键:股票ID(StockID)
- 持有数量(HoldingQuantity)
挂盘表(Listing):
- 外键:股票ID(StockID)
- 挂盘价格(ListingPrice)
- 挂盘数量(ListingQuantity)
交易表(Transaction):
- 主键:交易ID(TransactionID)
- 外键:用户ID(UserID)
- 外键:股票ID(StockID)
- 交易类型(TransactionType)
- 交易数量(TransactionQuantity)
- 交易价格(TransactionPrice)
- 交易日期(TransactionDate)
2.2 数据库实现:创建及查询的 SQL 语句
- 创建表
CREATE TABLE User (
UserID INT PRIMARY KEY,
Username VARCHAR(50),
Password VARCHAR(50),
UserType VARCHAR(20)
);
CREATE TABLE Stock (
StockID INT PRIMARY KEY,
StockName VARCHAR(50),
IssueQuantity INT,
OpeningPrice DECIMAL(10,2),
LotSize INT
);
CREATE TABLE Holding (
UserID INT,
StockID INT,
HoldingQuantity INT,
PRIMARY KEY (UserID, StockID),
FOREIGN KEY (UserID) REFERENCES User(UserID),
FOREIGN KEY (StockID) REFERENCES Stock(StockID)
);
CREATE TABLE Listing (
StockID INT,
ListingPrice DECIMAL(10,2),
ListingQuantity INT,
FOREIGN KEY (StockID) REFERENCES Stock(StockID)
);
CREATE TABLE Transaction (
TransactionID INT PRIMARY KEY,
UserID INT,
StockID INT,
TransactionType VARCHAR(20),
TransactionQuantity INT,
TransactionPrice DECIMAL(10,2),
TransactionDate DATE,
FOREIGN KEY (UserID) REFERENCES User(UserID),
FOREIGN KEY (StockID) REFERENCES Stock(StockID)
);
相关sql:
- 股票发行操作(管理员用户):
-- 添加新的股票
INSERT INTO Stock (StockID, StockName, IssueQuantity, OpeningPrice, LotSize)
VALUES (1, '股票1', 1000, 10.00, 100);
-- 添加持股信息
INSERT INTO Holding (UserID, StockID, HoldingQuantity)
VALUES (1, 1, 1000);
- 股票交易操作(交易用户):
-- 挂盘销售股票
INSERT INTO Listing (StockID, ListingPrice, ListingQuantity)
VALUES (1, 11.00, 100);
-- 购买挂盘股票
INSERT INTO Transaction (TransactionID, UserID, StockID, TransactionType, TransactionQuantity, TransactionPrice, TransactionDate)
VALUES (1, 1, 1, '买入', 10, 11.00, '2020-01-01');
- 股票退市操作(管理员用户):
-- 删除股票
DELETE FROM Stock WHERE StockID = 1;
- 股票查询操作:
-- 查看指定股票的挂盘情况
SELECT * FROM Listing WHERE StockID = 1;
-- 指定日期范围内的交易数据
SELECT * FROM Transaction WHERE TransactionDate BETWEEN '2020-01-01' AND '2020-12-31';
-- 查询用户的历史交易情况及每笔交易的收益
SELECT T.TransactionID, T.UserID, T.StockID, T.TransactionType, T.TransactionQuantity, T.TransactionPrice, T.TransactionDate, (T.TransactionQuantity * T.TransactionPrice) AS Profit
FROM Transaction T
INNER JOIN Holding H ON T.UserID = H.UserID AND T.StockID = H.StockID
WHERE H.UserID = 1;
-- 行业股均值和交易量统计
SELECT AVG(S.OpeningPrice) AS AvgPrice, SUM(T.TransactionQuantity) AS TotalQuantity
FROM Stock S
INNER JOIN Transaction T ON S.StockID = T.StockID;
这些SQL语句可以作为股票交易系统的基础操作,您可以根据实际需求进行扩展和修改。希望对您有帮助!