当前位置: 首页 > news >正文

搭建个人的金融系统-----第一章,数据库设计

目录

一、概述

二、数据库选型

三、数据库建库

四、数据同步流程


一、概述

        搭建个人金融系统,主要作用是拥有自己的金融数据库,能从互联网同步公开的数据到个人数据库,用于个人的研究和学习。

        系统搭建步骤,首先搭建数据库,然后选择合适的数据同步平台将数据同步到自己的数据库,最后中现有数据库的基础上开发个人应用功能,如股市分析、基金分析等等。

        后续可以利用数据库的数据搭建一个AI知识应用。可能会用到ChatGLM或Qwen2等

二、数据库选型

        对于个人系统来说,从这几个方面考虑数据库选型:便捷、性能、可扩展性、安全性和总体成本。另外,金融系统后续涉及AI相关功能,在AI相关产品中对linux环境的兼容性比较好,所以我们还要考虑数据库在linux环境中能稳定运行。

        那么从比较通用的几个数据库Microsoft SQL Server、Oracle Database、MySQL、PostgreSQL 和 SQLite来对比并做出选择。

Microsoft SQL Server

优点:

  • 强大的企业级功能,包括高级安全特性、商业智能工具和集成的服务总线。
  • 主要针对 Windows 平台支撑较好。
  • 高度的可扩展性和稳定性,适合大型企业级应用程序。
  • 提供了丰富的工具集,如SQL Server Management Studio和Integration Services。
  • 具有较好的性能和事务处理能力。

缺点:

  • 许可成本较高,对于小型应用不适用。
  • 在 Linux 和 macOS 上的功能支持可能不如在 Windows 上全面。
  • 成本相对较高。

Oracle Database

优点:

  • 行业领先的性能和可扩展性,适合处理大量数据和高并发请求。
  • 强大的安全性和容错机制,如Real Application Clusters (RAC)。
  • 提供了一系列的工具和服务,如GoldenGate和Data Guard,以实现数据复制和高可用性。
  • 广泛的企业应用支持和社区资源。

缺点:

  • 成本高昂,尤其是在高可用性和性能优化方面。
  • 学习曲线较陡峭,尤其是对于复杂功能的掌握。
  • 软件安装和配置过程相对复杂。

MySQL

优点:

  • 开源且免费,降低了总体拥有成本。
  • 性能良好,特别是在读取密集型应用中。
  • 社区版提供了基本的功能,企业版则提供了更多的高级特性和支持。
  • 跨平台支持,可以在多种操作系统上运行。
  • 有绿色版,可以放到任何磁盘运行,方便迁移。
  • 有丰富的技术文档和丰富的工具支撑。

缺点:

  • 事务处理能力和并发控制相比其他企业级数据库稍弱。

PostgreSQL

优点:

  • 功能丰富,支持JSON、XML等现代数据类型,并具有高度的SQL标准兼容性。
  • 开源但具备企业级特性,如多版本并发控制(MVCC)、在线热备份和点恢复。
  • 社区活跃,更新频繁,持续改进和增强功能。
  • 支持多种索引类型,包括B-tree、hash、GiST、SP-GiST、GIN和BRIN。

缺点:

  • 相比于MySQL,学习曲线略陡峭。
  • 在某些特定的性能指标上,如写入速度,可能不如其他专为特定用途设计的数据库。

SQLite

优点:

  • 超轻量级,无需独立服务器进程,所有数据存储在一个文件中。
  • 完全自包含,零配置,非常适合嵌入式系统和移动应用。
  • 跨平台,可以在几乎所有操作系统上运行。
  • 提供了事务支持和SQL功能。

缺点:

  • 不适合高并发或多用户环境,因为它在多用户同时写入时效率较低。
  • 没有内置的网络服务器,通常需要通过应用程序或其他服务器软件来提供网络访问。
  • 在处理大量数据时,性能和可扩展性有限。

       综上所述,MySQL数据库满足我们的实际需求,并且符合后续的扩展。具体下载地址如:

MySQL :: Download MySQL Community Server

三、数据库建库

        根据数据库设计的第三范式,即数据库表没列都是最小单元、每个表都有主键、没列都依赖主键不存在传递的依赖。

        本应用涉及的表不多,先满足最基本的需求。先满足股票数据。

        涉及到表有:股票列表基础信息、A股日线行情、A股周线行情、每日指标、交易日历、自定义指标。

  •         股票列表基础信息

        用于保存当前最新的股票基本信息,每日更新数据,保障最新的数据同步到数据库。

CREATE TABLE `runner_stock_basic` (`symbol` varchar(11) CHARACTER SET utf8 NOT NULL COMMENT '股票代码',`name` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '股票名称',`area` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '所在地域',`industry` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '所属行业',`fullname` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '股票全称',`enname` varchar(100) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '英文全称',`market` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '市场类型 (主板/中小板/创业板/科创板)',`exchange` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '交易所代码',`curr_type` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '交易货币',`list_status` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '上市状态: L上市 D退市 P暂停上市',`list_date` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '上市日期',`delist_date` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '退市日期',`is_hs` varchar(50) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT '是否沪深港通标的,N否 H沪股通 S深股通',`ts_code` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '股票代码(支持多个股票同时提取,逗号分隔)',`adj_factor` double(10,4) DEFAULT NULL COMMENT '最新复权因子',`create_datetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间',PRIMARY KEY (`symbol`) USING BTREE,UNIQUE KEY `U_SYMBOL` (`symbol`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_ci ROW_FORMAT=DYNAMIC COMMENT='股票列表';SET FOREIGN_KEY_CHECKS = 1;
  •         A股日线行情

        用于保存每日的行情数据,数据每日用程序自动更新。

CREATE TABLE `runner_stock_daily` (`did` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`ts_code` varchar(20) NOT NULL COMMENT '股票代码(采集)',`name` varchar(40) DEFAULT NULL,`trade_date` date NOT NULL COMMENT '交易日期',`open` float(20,4) DEFAULT '0.0000' COMMENT '开盘价',`p_open` float(20,4) DEFAULT '0.0000' COMMENT '开盘价(前复权)',`high` float(20,4) DEFAULT '0.0000' COMMENT '最高价',`p_high` float(20,4) DEFAULT '0.0000' COMMENT '最高价(前复权)',`low` float(20,4) DEFAULT '0.0000' COMMENT '最低价',`p_low` float(20,4) DEFAULT '0.0000' COMMENT '最低价(前复权)',`close` float(20,4) DEFAULT '0.0000' COMMENT '收盘价',`p_close` float(20,4) DEFAULT '0.0000' COMMENT '收盘价(前复权)',`pre_close` float(20,4) DEFAULT '0.0000' COMMENT '昨收价',`p_pre_close` float(20,4) DEFAULT '0.0000' COMMENT '昨收价(前复权)',`change` float(20,4) DEFAULT '0.0000' COMMENT '涨跌额',`pct_chg` float(20,4) DEFAULT '0.0000' COMMENT '涨跌幅 (未复权,如果是复权请用 通用行情接口 )',`vol` float(20,4) DEFAULT '0.0000' COMMENT '成交量 (手)',`amount` float(20,4) DEFAULT '0.0000' COMMENT '成交额 (千元)',`symbol` varchar(11) DEFAULT '0' COMMENT '股票代码',`create_datetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间',PRIMARY KEY (`did`,`trade_date`) USING BTREE,UNIQUE KEY `U_STOCK_DATE` (`ts_code`,`trade_date`) USING BTREE,KEY `I_TRADE_DATE` (`trade_date`) USING BTREE,KEY `I_TS_CODE` (`ts_code`) USING BTREE,KEY `i_symbol` (`symbol`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=62632800 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='日线行情';SET FOREIGN_KEY_CHECKS = 1;
  • A股周线行情

        用于保存周线的行情数据,数据每周用程序自动更新。

CREATE TABLE `runner_stock_weekly` (`did` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`ts_code` varchar(20) NOT NULL COMMENT '股票代码(采集)',`name` varchar(40) DEFAULT NULL,`trade_date` date NOT NULL COMMENT '交易日期',`open` float(20,4) DEFAULT '0.0000' COMMENT '开盘价',`p_open` float(20,4) DEFAULT '0.0000' COMMENT '开盘价(前复权)',`high` float(20,4) DEFAULT '0.0000' COMMENT '最高价',`p_high` float(20,4) DEFAULT '0.0000' COMMENT '最高价(前复权)',`low` float(20,4) DEFAULT '0.0000' COMMENT '最低价',`p_low` float(20,4) DEFAULT '0.0000' COMMENT '最低价(前复权)',`close` float(20,4) DEFAULT '0.0000' COMMENT '收盘价',`p_close` float(20,4) DEFAULT '0.0000' COMMENT '收盘价(前复权)',`pre_close` float(20,4) DEFAULT '0.0000' COMMENT '昨收价',`p_pre_close` float(20,4) DEFAULT '0.0000' COMMENT '昨收价(前复权)',`change` float(20,4) DEFAULT '0.0000' COMMENT '涨跌额',`pct_chg` float(20,4) DEFAULT '0.0000' COMMENT '涨跌幅 (未复权,如果是复权请用 通用行情接口 )',`vol` float(20,4) DEFAULT '0.0000' COMMENT '成交量 (手)',`amount` float(20,4) DEFAULT '0.0000' COMMENT '成交额 (千元)',`symbol` varchar(11) DEFAULT '0' COMMENT '股票代码',`create_datetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间',PRIMARY KEY (`did`,`trade_date`) USING BTREE,UNIQUE KEY `U_STOCK_DATE` (`ts_code`,`trade_date`) USING BTREE,KEY `I_TRADE_DATE` (`trade_date`) USING BTREE,KEY `I_TS_CODE` (`ts_code`) USING BTREE,KEY `i_symbol` (`symbol`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=30166565 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='日线行情';SET FOREIGN_KEY_CHECKS = 1;
  • 交易日历

        每年同步一次数据,数据记录了一年的交易日。用数据库记录没事是否同步了相关数据,同步的数据量是多少。用来判断是否完成数据采集完整性。

CREATE TABLE `runner_stock_trade_cal` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`exchange` varchar(5) DEFAULT NULL COMMENT '交易所 SSE上交所,SZSE深交所,CFFEX 中金所,SHFE 上期所,CZCE 郑商所,DCE 大商所,INE 上能源,IB 银行间,XHKG 港交所;;交易所 SSE上交所 SZSE深交所',`cal_date` date DEFAULT NULL COMMENT '日历日期',`is_open` varchar(12) DEFAULT NULL COMMENT '是否交易 0休市 1交易',`pretrade_date` date DEFAULT NULL COMMENT '上一个交易日',`stock_basic_spider` int(11) DEFAULT NULL COMMENT '0:进行中;-1:失败;1已完成(股票基本信息)',`daily_spider` int(11) DEFAULT NULL COMMENT '0:进行中;-1:失败;1已完成',`weekly_spider` int(11) DEFAULT NULL COMMENT '0:进行中;-1:失败;1已完成',`adj_factor_spider` int(11) DEFAULT NULL COMMENT '采集复权因子',`daily_qfq_compute` int(11) DEFAULT NULL COMMENT '0:进行中;-1:失败;1已完成',`weekly_qfq_compute` int(11) DEFAULT NULL COMMENT '0:进行中;-1:失败;1已完成',`daily_compute` int(11) DEFAULT NULL COMMENT '0:进行中;-1:失败;1已完成',`weekly_compute` int(11) DEFAULT NULL COMMENT '0:进行中;-1:失败;1已完成',`adj_factor_cnt` int(11) DEFAULT NULL COMMENT '当日采集的复权因子数量',`daily_cnt` int(11) DEFAULT NULL COMMENT '当日采集的日线数据数量',`weekly_cnt` int(11) DEFAULT NULL COMMENT '周采集的指标数量',`dailybasic_cnt` int(11) DEFAULT NULL COMMENT '当日采集的每日指标数量',`weeklybasic_cnt` int(11) DEFAULT NULL COMMENT '当日采集的每日指标数量',`is_copy` int(11) DEFAULT '0' COMMENT '是否拷贝数据',`create_datetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间',`daily_basic_cnt` int(11) DEFAULT NULL COMMENT '当日采集的每日指标数量',`daily_basic_spider` int(11) DEFAULT NULL COMMENT '0:进行中;-1:失败;1已完成',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `u_cal_date` (`cal_date`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=43000 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='交易日历\r\n描述:获取各大交易所交易日历数据,默认提取的是上交所';SET FOREIGN_KEY_CHECKS = 1;
  • 自定义指标

        用于记录通过通用指标计算的自定义指标,如macd、diff、dea、ma5、ma10、ma20等等。


CREATE TABLE `runner_stock_daily_index` (`did` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`ts_code` varchar(20) NOT NULL COMMENT '股票代码(采集)',`trade_date` date NOT NULL COMMENT '交易日期',`macd` float(20,6) DEFAULT '0.000000' COMMENT 'macd指标',`diff` float(20,6) DEFAULT '0.000000' COMMENT 'dif指标',`ema12` float(20,6) DEFAULT '0.000000' COMMENT 'ema12指标',`ema26` float(20,6) DEFAULT '0.000000' COMMENT 'ema26指标',`dea` float(20,6) DEFAULT '0.000000' COMMENT 'DEA指标',`bar` float(20,6) DEFAULT '0.000000' COMMENT 'BAR 指标',`createtime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据更新时间',`ma5` float(20,6) DEFAULT '0.000000' COMMENT 'ema5指标',`ma10` float(20,6) DEFAULT '0.000000' COMMENT 'ema10指标',`ma20` float(20,6) DEFAULT '0.000000' COMMENT 'ema20指标',`ma60` float(20,6) DEFAULT '0.000000' COMMENT 'ema60指标',`ema20` float(20,6) DEFAULT '0.000000' COMMENT 'ema26指标',`upper20` float(20,6) DEFAULT '0.000000' COMMENT 'ema26指标',`mid2` float(20,6) DEFAULT '0.000000' COMMENT 'ema26指标',`qhd9` float(20,6) DEFAULT '0.000000' COMMENT 'ema26指标',`qhj9` float(20,6) DEFAULT '0.000000' COMMENT 'ema26指标',`lower2` float(20,6) DEFAULT NULL,`qhk9` float(20,6) DEFAULT NULL,PRIMARY KEY (`did`,`trade_date`) USING BTREE,UNIQUE KEY `U_STOCK_DATE` (`ts_code`,`trade_date`) USING BTREE,KEY `I_TRADE_DATE` (`trade_date`) USING BTREE,KEY `I_TS_CODE` (`ts_code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=77671402 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='日线行情';SET FOREIGN_KEY_CHECKS = 1;
  • 每日指标        

        用于记录每日交易所的指标数据。

CREATE TABLE `runner_stock_daily_basic` (`ts_code` varchar(20) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT 'TS股票代码',`trade_date` date DEFAULT NULL COMMENT '交易日期(采集)',`close` float(20,4) DEFAULT NULL COMMENT '当日收盘价',`turnover_rate` float(20,4) DEFAULT NULL COMMENT '换手率(%)',`turnover_rate_f` float(20,4) DEFAULT NULL COMMENT '换手率(自由流通股)',`volume_ratio` float(20,4) DEFAULT NULL COMMENT '量比',`pe` float(20,4) DEFAULT NULL COMMENT '市盈率(总市值/净利润, 亏损的PE为空)',`pe_ttm` float(20,4) DEFAULT NULL COMMENT '市盈率(TTM,亏损的PE为空)',`pb` float(20,4) DEFAULT NULL COMMENT '市净率(总市值/净资产)',`ps` float(20,4) DEFAULT NULL COMMENT '市销率',`ps_ttm` float(20,4) DEFAULT NULL COMMENT '市销率(TTM)',`dv_ratio` float(20,4) DEFAULT NULL COMMENT '股息率 (%)',`dv_ttm` float(20,4) DEFAULT NULL COMMENT '股息率(TTM)(%)',`total_share` float(20,4) DEFAULT NULL COMMENT '总股本 (万股)',`float_share` float(20,4) DEFAULT NULL COMMENT '流通股本 (万股)',`free_share` float(20,4) DEFAULT NULL COMMENT '自由流通股本 (万)',`total_mv` float(20,4) DEFAULT NULL COMMENT '总市值 (万元)',`circ_mv` float(20,4) DEFAULT NULL COMMENT '流通市值(万元)',`did` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`create_datetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间',`symbol` varchar(10) CHARACTER SET utf8 DEFAULT NULL COMMENT '交易代码',PRIMARY KEY (`did`) USING BTREE,UNIQUE KEY `U_STOCK_DATE` (`ts_code`,`trade_date`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=13444322 DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_ci ROW_FORMAT=DYNAMIC COMMENT='每日指标\n';SET FOREIGN_KEY_CHECKS = 1;
  • 复权因子

        用于记录每日的复权因子,包括当天的复权因子和上一交易日的复权因子,如复权因子发生变化,需要再次同步当前股票的数据,保证前复权数据准确性。

CREATE TABLE `runner_stock_adjfactor` (`aid` int(11) NOT NULL AUTO_INCREMENT,`ts_code` varchar(10) DEFAULT NULL,`symbol` varchar(11) DEFAULT NULL COMMENT '股票代码',`trade_date` date DEFAULT NULL,`adj_factor` float(10,4) DEFAULT NULL,`last_adj_factor` float(10,4) DEFAULT NULL COMMENT '最新复权因子',`pre_adj_factor` float(10,4) DEFAULT NULL COMMENT '前复权因子',`create_datetime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间',PRIMARY KEY (`aid`) USING BTREE,UNIQUE KEY `i_code_date` (`ts_code`,`trade_date`) USING BTREE,KEY `i_ts_code` (`ts_code`) USING BTREE,KEY `i_trade__date` (`trade_date`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=43232627 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;SET FOREIGN_KEY_CHECKS = 1;

四、数据同步流程

五、结束语

        本数据库为将来金融方面的研究提供基础条件。另外,根据需要后续不断完善数据库。

        本数据为将来本地搭建个人或公司的知识图谱做前期数据准备。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Arch Linux - 2-安装中文输入法
  • 解析 C# Dictionary 代码
  • Comfyui实例容器运行横向扩展
  • 【ROS 最简单教程 003/300】ROS 快速体验:Hello World
  • C# Where关键字
  • 数学建模--蒙特卡罗随机模拟
  • 嵌入式Linux系统中pinictrl框架基本实现
  • 数学建模--禁忌搜索
  • Kafka操作
  • 现代前端架构介绍(第三部分):深入了解状态管理层及其对前端App的影响
  • tcp westwood 比 reno,cubic 好在哪
  • MinIO:高性能轻量云存储轻松搭建与springboot应用整合实践
  • JavaWeb学习——mybatis
  • 过滤器与拦截器的区别与应用
  • 2.外部中断(EXTI)
  • JavaScript 奇技淫巧
  • JS专题之继承
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • php面试题 汇集2
  • tab.js分享及浏览器兼容性问题汇总
  • vue数据传递--我有特殊的实现技巧
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 力扣(LeetCode)21
  • 悄悄地说一个bug
  • 事件委托的小应用
  • 应用生命周期终极 DevOps 工具包
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 大数据全解:定义、价值及挑战
  • 第二十章:异步和文件I/O.(二十三)
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​渐进式Web应用PWA的未来
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # Apache SeaTunnel 究竟是什么?
  • #70结构体案例1(导师,学生,成绩)
  • #HarmonyOS:Web组件的使用
  • #WEB前端(HTML属性)
  • (2022 CVPR) Unbiased Teacher v2
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (未解决)macOS matplotlib 中文是方框
  • (译) 函数式 JS #1:简介
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)可以带来幸福的一本书
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Framework .NET Core与 .NET 的区别
  • .net Stream篇(六)
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET6实现破解Modbus poll点表配置文件
  • .NET轻量级ORM组件Dapper葵花宝典
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面