"建立更新功能就像插入功能"是一个好的或坏的解决方案?

时间:2013-05-13 12:09:19

标签: java php mysql database

好的,我想构建一个非常复杂的系统,允许用户在将数据插入Mysql DB之前复杂地操作数据。

因此,该系统必须具有:

  1. 插入功能(功能1),允许用户将数据插入系统。
  2. 用于从DB读取数据的读取功能(功能2),之后用户可以复杂地操作数据。
  3. 更新功能(功能3)。用户在功能2中进行了大量修改后,用户将更新数据。新数据与旧数据不完全相同(即可能有比以前更多的数据,并且数据的处理方式与以前完全不同)
  4. 好了,现在,执行功能1非常困难,功能2不是太难,但如果我们实际修改DB中的旧数据,功能3将非常难。

    所以,这是我的解决方案,而不是花费大量时间来构建功能3(&我们不确定它是否没有错误,因为它太复杂了),我决定不构建功能3,但只需将新数据插入Db&删除旧数据。这意味着函数3正好是函数1,唯一不同的是我们必须删除函数1中插入的​​旧数据。

    所以,我决定使用Auto-Increment&在Mysql中的Int。

    但是,由于我们可能会多次更新数据(可能是300到500行)(可能是4年内的20次),这意味着我们必须删除旧数据20次&自动增量字段不断增加数字。

    我的问题是,

    • “不构建更新功能,并且像插入功能一样构建更新功能”是一个好的或坏的解决方案?

    • 第二,“如果我们像插入函数一样构建更新函数,那么它是一个稳定的系统吗?”

    • 第三,“如果我们像插入函数一样构建更新函数,那么1天后我们会用完数字(max int是2147483647)?”

    在我看来,我更喜欢解决方案“像插入功能一样构建更新功能”,因为我们可以将旧数据保留为以前的版本,我们甚至不需要删除它和它。它节省了我很多次。另外,2147483647太大了。生命是短暂的,你这么认为吗?

    注意:

    1. 数据存储在主表上,表示此表没有外键,其他表必须使用此表中的数据作为外键吗?
    2. 我们可以将旧数据保留为以前的版本。插入新数据后,&如果用户搜索信息,系统将查看新数据,而不是旧数据。当然,他可以通过点击查看以前的版本来查看旧数据。

1 个答案:

答案 0 :(得分:1)

首先,我不得不说这是一个非常糟糕的设计,不要这样做! 您可能会遇到严重的同步错误,例如,如果您正在更新(删除旧的并插入新的)并且有人想要读取数据,该怎么办?他可以得到一个错误,换句话说,这是非常不稳定的。

使用简单的更新函数,增量值为id, 准备像update mytable set v1=?, v2=?, ...., vn=? where id=?这样的更新语句,然后重新填充所有数据。

第二,是的,int只是2 ^ 31,但你可以指定一个更大的整数,但同样,这是一个糟糕的解决方案