每种类型的CSV文件的运行时数据库表创建

时间:2010-09-30 13:48:30

标签: database-design

以下是详细信息。

Web应用程序从CSV文件创建报告 有不同格式的CSV文件 用户将能够添加新格式或能够添加新字段。

我的客户希望我为每种类型的CSV文件创建表格...因此,对于每种新格式,都会有一个新表格...... 我相信这是一个糟糕的设计决定。但不知道如何向我的客户解释这个。

以下是我现在能想到的原因:

  1. 这是一个糟糕的设计决定
  2. 一年后会有> 10000个表,系统会变得不稳定
  3. 实施将非常耗时
  4. 维护很困难
  5. 最终数据无法管理
  6. 无法轻松迁移到其他服务器
  7. 我的理由有效吗?你怎么看?你能告诉我一些吗?

    非常感谢您的帮助

6 个答案:

答案 0 :(得分:1)

明白你的观点:

  1. 虽然如此,但你需要回答原因。
  2. 不稳定?取决于您使用的DBMS。
  3. 不一定。创建和删除表是一项相对简单的任务。
  4. 同样,不一定。这些表应该完全由应用程序管理..这意味着几乎没有直接维护
  5. 不确定你是怎么想的。
  6. 迁移到服务器应该像备份和还原数据库到另一台计算机一样简单。假设你不能这样做,那么有很多工具可以帮你做到这一点。

  7. 那就是说,我不这样做的原因是:

    1. 安全。为了允许应用程序管理表,您必须授予用户创建/删除表的权限。这为黑客完全破坏数据库提供了可能性。 (POET有人吗?)
    2. 安全。您几乎可以保证使用动态SQL来使用常规DBMS来实现这一点,这意味着您必须了解SQL注入的可能性。
    3. 安全。我是否提到应用程序用户基本上需要对数据库拥有完全权限?

    4. 至少有两种选择。一种是使用像MongoDB这样的NoSql数据库。它可以在您很少的指导下动态创建和更改表格。这种类型的相对非结构化数据正是这些数据库系统的用途。您可能会考虑将上传内容发送到MongoDB或类似内容,而其他应用使用传统的RDBM。

      第二种是使用支持虚拟表的表设计。这意味着您有一个包含表名的主表,另一个包含字段的表,以及一个将数据保存在名称/值对关联中的最终表。这条路径不适合胆小的人,因为报告可以是b * tch,但会跳过所有安全问题。

答案 1 :(得分:1)

不要混淆客户希望程序执行的操作,以及实际操作方式。

他们希望您的程序读取CSV文件并报告它们,就是这样。这取决于您和您的技术技能,这个客户应该对ZERO如何实现这一点。内部表和应用程序设计不是由最终用户决定的。

这家伙会告诉医生如何切入他的主动脉吗?

答案 2 :(得分:1)

这里提供的实际要求是什么?来自哪里的数据填充CSV文件?为什么还需要该数据的另一个副本?

似乎数据可能无法以您描述的形式使用。但既然你还没有说出你真正希望实现的目标,那就更难具体了。

答案 3 :(得分:0)

如果您只是从CSV文件创建报告,为什么要为它创建表格。您只需存储CSV并即时创建报告......

BTW这是一个糟糕的设计决策,因为......“这是一个糟糕的设计决策”,是商业用户不信任程序员的一个很好的例子。

答案 4 :(得分:0)

你提供否定。我认为,如果你另外提供积极的好解决方案,你有更多的机会。

新格式会多久出现一次?可能是一个表的动态变化(如你所说,它可能只是列添加)是决定吗?

答案 5 :(得分:0)

您在问题演示中缺少关键信息:您收集的CSV文件代表什么信息?

作为一般原则,如果CSV文件只是呈现相同类型信息的不同方式(也就是说,有些人会向您发送关于相同“事物”的更多或更少的详细信息字段),那么,如果您正在收集关系数据库中的这些信息,我想说你肯定希望有一个公共表(或一小组公共表来正确表示数据)。对于您可能需要转换为“事物”的每种格式的CSV文件,您都有一个单独的导入程序,但无论“事物”是什么类型的CSV文件,存储都是相同的。

另一方面,如果每个CSV文件代表不同的“东西”并且你真的在构建某种通用的CSV报告工具,那么我质疑关系数据库是否是项目的正确存储机制虽然在进行任何类别的陈述之前我想知道更多关于你实际做了什么的细节。