首页 > 编程知识 正文

mysql数据库表添加字段,sql同一字段下不同值的个数

时间:2023-05-03 13:05:19 阅读:48327 作者:2883

可以采用以下四种技术:

动态添加数据库表字段

确保在运行时有足够的空场以动态投射阴影

以xml格式保存到单字段

更改为行,并在另一个表中存储自定义字段

现在分析一下四种技术的优劣。 但是,首先可以排除的是第一点的动态添加字段的方法。 因为在实际操作中几乎是不可能的(sqlserver太慢,oracle干脆不支持),所以几乎不用讨论就可以排除它。 剩下三点。

首先,我将介绍如何保留空白字段。 基本原理是在设计数据库表时添加额外的字段以查看以下代码:

创建表样例(

NameVarchar(12 )、

字段0 varchar (1)、

字段1 varchar (1)、

FieldNvarchar(1)。

}

然后,要查看实际运行时的需求并将字段动态分配给系统使用,可能需要一个说明分配情况的结构。

公共类可用

{

publicintcurrentunusedfieldnumber;

publicHashtableFieldToRealName;

}

数据在某个时间点的状况为CurrentUnusedFieldNumber=3,哈希表FieldToRealName的内容为' field0'='SomeId '、' field1'='AnyName ',

现在的问题是如果要协助Hibernate的话,会怎么处理呢? 以上述段的数据使用情况为例。 如果类定义是这样的:

公共类实体01

{

公共字符串名称;

公共字符串形式id;

公共字符串any name;

公共布尔Isok;

}

修改xxx.hbm.xml,使SomeId和field0对应起来可能就ok了。 但是,你怎么知道运行时有这样的类定义? 除非我们进行动态代码生成,否则可能会进行自动编译,但问题可能会去其他方面; 如果不动态定义,类只能是这样。

公共类实体01

{

公共字符串名称;

publichashtableextrafieldandvalues;

}

使用时,引用为entity 01.extrafieldandvalues.setvalue (' any name )、' boss ) )。 这可能是修改最少的,但问题是Hibernate不支持这样的方法。

介绍单场存储的方法。 使用这样的数据库表定义

创建表样例

NameVarchar(12 )、

XMLclob(102400 )//仅说明

然后对应于这样的类定义

公共类实体01

{

公共字符串名称;

公共字符串XML;

publichashtableextranameandvaluefromxml;

}

我们的代码可以这样使用。 stringid=entity 01.extranameandvaluefromxml.getvalue '。 这样解决看起来很好。 不仅不需要Available表,而且Hibernate支持看起来也很完美,但致命的问题是,如何保持高效的查询? 除非数据库系统本身支持它,否则只能用低效的substring或like创建查询,这对于大量数据是不可能的。

难道不是权衡一下,把两种方法的优点结合起来吗? 有问题。 你怎么保持两者之间的数据同步? 是否要使用存储过程分析xml内容?

所以,困境需要我们认真解决。 我们也许可以通过认真的需求分析,减少可变场的数量,但只要有可变场或可变的可能性,我们就必须始终解决这一困境。

我期待着继续讨论。

(新部分)

另一种方法是将其更改为行,并在另一个表中存储扩展字段。 定义如下。

CREATETABLESampleFields

idSampleInteger,

FieldnameVarchar(30 )、

现场价值评估器(100 )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。