Files
DMS/软件设计文档/原始文档/02-数据库设计.md

216 lines
5.2 KiB
Markdown
Raw Normal View History

2025-07-20 23:09:47 +08:00
# 软件开发文档 - 02. 数据库设计
本文档详细描述了DMS系统的数据库结构包括表、字段和关系。数据库实体类将放在 `DMS.Infrastructure/Entities/` 目录下。
## 1. 数据库关系图 (ERD)
```mermaid
erDiagram
DEVICE {
int Id PK
varchar Name
int Protocol
varchar IpAddress
int Port
bool IsActive
}
VARIABLE_TABLE {
int Id PK
varchar Name
varchar Description
bool IsActive
int DeviceId FK
}
VARIABLE {
int Id PK
varchar Name
varchar Address
int DataType
bool IsActive
int VariableTableId FK
}
MQTT_SERVER {
int Id PK
varchar ServerName
varchar BrokerAddress
int Port
varchar Username
varchar Password
bool IsActive
}
VARIABLE_HISTORY {
bigint Id PK
int VariableId FK
varchar Value
datetime Timestamp
}
VARIABLE_MQTT_SERVER_MAP {
int VariableId PK, FK
int MqttServerId PK, FK
}
DEVICE ||--o{ VARIABLE_TABLE : "包含"
VARIABLE_TABLE ||--o{ VARIABLE : "包含"
VARIABLE ||--o{ VARIABLE_HISTORY : "记录"
VARIABLE }o--o{ MQTT_SERVER : "关联 (多对多)"
VARIABLE_MQTT_SERVER_MAP }|..|{ VARIABLE : ""
VARIABLE_MQTT_SERVER_MAP }|..|{ MQTT_SERVER : ""
```
## 2. 数据库实体类 (`Entities/`)
这些是与数据库表一一对应的C#类,使用了 `SqlSugar` 的特性Attribute来定义主键、外键等。
### 2.1. `DbDevice`
```csharp
// 文件: DMS.Infrastructure/Entities/DbDevice.cs
using SqlSugar;
namespace DMS.Infrastructure.Entities;
[SugarTable("Devices")]
public class DbDevice
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public int Protocol { get; set; } // 对应 ProtocolType 枚举
public string IpAddress { get; set; }
public int Port { get; set; }
public bool IsActive { get; set; }
}
```
### 2.2. `DbVariableTable`
```csharp
// 文件: DMS.Infrastructure/Entities/DbVariableTable.cs
using SqlSugar;
namespace DMS.Infrastructure.Entities;
[SugarTable("VariableTables")]
public class DbVariableTable
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool IsActive { get; set; }
public int DeviceId { get; set; }
}
```
### 2.3. `DbVariable`
```csharp
// 文件: DMS.Infrastructure/Entities/DbVariable.cs
using SqlSugar;
namespace DMS.Infrastructure.Entities;
[SugarTable("Variables")]
public class DbVariable
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public int DataType { get; set; } // 对应 SignalType 枚举
public bool IsActive { get; set; }
public int VariableTableId { get; set; }
}
```
### 2.4. `DbMqttServer`
```csharp
// 文件: DMS.Infrastructure/Entities/DbMqttServer.cs
using SqlSugar;
namespace DMS.Infrastructure.Entities;
[SugarTable("MqttServers")]
public class DbMqttServer
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string ServerName { get; set; }
public string BrokerAddress { get; set; }
public int Port { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public bool IsActive { get; set; }
}
```
### 2.5. `DbVariableHistory`
```csharp
// 文件: DMS.Infrastructure/Entities/DbVariableHistory.cs
using SqlSugar;
namespace DMS.Infrastructure.Entities;
[SugarTable("VariableHistories")]
public class DbVariableHistory
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public long Id { get; set; }
public int VariableId { get; set; }
public string Value { get; set; }
public DateTime Timestamp { get; set; }
}
```
### 2.6. `DbVariableMqttMap` - 多对多关系映射表
用于连接 `Variable``MqttServer`
```csharp
// 文件: DMS.Infrastructure/Entities/DbVariableMqttMap.cs
using SqlSugar;
namespace DMS.Infrastructure.Entities;
[SugarTable("VariableMqttMap")]
public class DbVariableMqttMap
{
[SugarColumn(IsPrimaryKey = true)]
public int VariableId { get; set; }
[SugarColumn(IsPrimaryKey = true)]
public int MqttServerId { get; set; }
}
```
## 3. 数据映射 (Mapping)
为了在领域模型 (`DMS.Core.Models`) 和数据库实体 (`DMS.Infrastructure.Entities`) 之间进行转换,我们将使用 `AutoMapper`。映射配置将放在 `DMS.Infrastructure/Profiles/MappingProfile.cs` 中。
```csharp
// 文件: DMS.Infrastructure/Profiles/MappingProfile.cs
using AutoMapper;
using DMS.Core.Models;
using DMS.Infrastructure.Entities;
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Device, DbDevice>().ReverseMap();
CreateMap<VariableTable, DbVariableTable>().ReverseMap();
CreateMap<Variable, DbVariable>().ReverseMap();
CreateMap<MqttServer, DbMqttServer>().ReverseMap();
// 注意:对于复杂的嵌套映射,可能需要更详细的配置。
}
}
```