【发布时间】:2014-09-20 03:12:57
【问题描述】:
我的任务是开发用于评估日志文件的工具,我正在寻找合适的数据库设计。有几十个应用程序以 CSV 格式生成日志文件,但每个应用程序都有不同的列和数据类型。在启动时,每个应用程序都会将其当前日志文件发送到服务器,服务器会将新行插入 SQL Server 数据库。
到目前为止,我想出了以下设计。从我在其他帖子中读到的内容来看,强烈建议不要使用 EAV 设计,它也不能说服我必须将所有数据存储为字符串。所以我想出的唯一选择是每个应用程序有一个表。
还有其他我还没有考虑过的选择吗?如果您遇到过类似情况,您选择了哪种设计?
1.) 每个应用程序一个表
ApplicationA(A, B, C, D, E)
ApplicationB(B, E, H, J)
ApplicationC(C, P, N, X, Y)
优点:
- 简单的设计
缺点:
- 很多表
- 每当引入新项目时,都必须创建相应的表
- 如果文件格式发生变化,则必须更改表定义
2.) EAV 模型
Applications(AppId, Name)
DataTypes(DTypeId, Name)
Properties(PropId, Name, DTypeId)
ApplicationProperties(AppId, PropId)
Values(ValueId, AppId, PropId, Value)
优点:
- 无需添加新表或列
缺点:
- 所有值都存储为字符串
- SQL 查询由于大量连接和强制转换而更加复杂
【问题讨论】:
标签: sql database-design relational-database