如何设计Azure上的MSSQL数据库以处理C#程序中的数组数据?
Azure 工件数据存储表结构设计
适配需求的设计思路
针对你的场景,用主表+子表的关系型结构最适合——既解决数组存储的核心问题,又匹配你现有的Azure基础增删改查能力,同时预留足够的扩展空间。
具体表结构
1. 工件主表(Articles)
存储工件的核心基础信息,作为唯一标识的主表:
| 字段名 | 数据类型 | 关键说明 |
|---|---|---|
ArticleId | INT | 主键(自增),工件唯一ID |
ArticleName | NVARCHAR(100) | 工件名称,加唯一约束防重复 |
Type | INT | 工件类型 |
Length | INT | 工件长度 |
CreatedTime | DATETIME2 | 创建时间(可选,用于溯源) |
提示:
ArticleId是关联子表的核心,必须设为主键;ArticleName加唯一约束,避免同名称工件重复创建
2. 工件参数子表(ArticleParameters)
因为Tool和Position是一一对应的成对数据,把它们放在同一张子表,同时保留数组的原始顺序:
| 字段名 | 数据类型 | 关键说明 |
|---|---|---|
ParameterId | INT | 主键(自增) |
ArticleId | INT | 外键,关联主表的ArticleId |
Tool | INT | 原Tool数组的单个元素 |
Position | FLOAT | 原Position数组的对应元素 |
Sequence | INT | 元素在原数组中的顺序索引(从1开始) |
提示:
Sequence字段用来还原数组的原始顺序,加载数据时按它排序就能得到和原List完全一致的顺序
C#代码适配步骤
- 数据结构调整:把原数组改成
List<int> Tool和List<double> Position,方便遍历操作 - 写入数据:
- 先插入主表
Articles,获取自动生成的ArticleId - 遍历两个List,按顺序将每一组
Tool、Position、Sequence(从1开始计数)和ArticleId插入子表
- 先插入主表
- 查询数据:
- HMI加载列表时,只查询主表的
ArticleName和Length,快速返回结果 - 用户选择工件后,根据
ArticleId查询子表,按Sequence排序,把Tool和Position分别收集成List
- HMI加载列表时,只查询主表的
扩展兼容性说明
- 后续要新增工件属性?直接在主表添加字段即可
- 要新增和Tool/Position关联的参数?直接在子表添加字段即可
- 支持各类查询需求:按工件类型筛选、按长度范围查找、甚至按某个Tool值或Position区间检索,完全不限制后续扩展
内容的提问来源于stack exchange,提问作者Hans-Erik Strömberg
相关产品推荐
相关产品推荐

