当前位置:首页 » 数据仓库 » 数据库枚举值
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库枚举值

发布时间: 2022-06-28 09:44:27

① 枚举值是什么意思

在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。
这两种类型经常重叠,是一个被命名的整型常数的集合,枚举在日常生活中很常见。

随着计算机的不断普及,程序不仅只用于数值计算,还更广泛地用于处理非数值的数据。
例如:性别、月份、星期几、颜色、单位名、学历、职业等,都不是数值数据。
在其它程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。
如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。
也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型。

枚举是我们自己定义的一个集合,比如说我们数学里面所学的集合 A={1、2、3},当我们要使用 A 这个集合的时候,
我们只能够使用集合 A 里面的 1、2、3 这三个元素,不是 A 里面的元素我们就不可以使用。

同样,枚举和这个集合是类似的,当我们定义了一个枚举类型的时候,我们声明它里面有几个元素,
在我们使用这个枚举的时候,我们只能够使用它有的元素,没有的元素我们是无法使用,系统就会报错。

枚举还有一个特点,就是可以代表数值,比如说第一个定义的元素对应的值为 0,每个枚举元素从 0 开始,逐一增加。
此时,这个数值也代表他们本身,相当于每一个元素有两个名字。

常使用的地方:我们要从另一个函数得到一个值,但是这个值只能够在一个范围内的,此时我们就可以,使用枚举来定义这个范围。
限制另外一个函数能够传递进来的值,只能够是枚举类型里面的元素。

② c# 中,数据库取到的值,在枚举里为空怎么处理

两种处理方式。
1、在写sql的时候
select isnull([字段名],'') from ...
这样就会把null的变成“”
2、在给枚举赋值的时候,判断一下是不是为空,若为空填充默认值

③ mysql里 enum(F,M,S)什么意思I

根据用户定义的枚举值与分片节点映射文件,直接定位目标分片。

  • 用户在rule.xml中配置枚举值文件路径和分片索引是字符串还是数字,DBLE在启动时会将枚举值文件加载到内存中,形成一个映射表

  • 在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值会被提取出来,直接查映射表得到分片编号

  • 与MyCat的类似分片算法对比

    中间件

    DBLE

    MyCat

    分片算法种类 enum 分区算法 分片枚举

    两种中间件的枚举分片算法使用上无差别。

    开发注意点

    【分片索引】1. 整型数字(可以为负数)或字符串((不含=和换行符)

    【分片索引】2. 枚举值之间不能重复

  • Male=0Male=1

  • 或者

  • 123=1123=2

  • 会导致分片策略加载出错

    【分片索引】3. 不同枚举值可以映射到同一个分片上

  • Mr=0Mrs=1Miss=1Ms=1123=0

  • 运维注意点

    【扩容】1. 增加枚举值无需数据再平衡

    【扩容】2. 增加一个枚举值的分片数量数时,需要对局部数据进行迁移

    【缩容】1. 减少枚举值需要数据再平衡

    【缩容】2. 减少一个枚举值的分片数量数时,需要对局部数据进行迁移

    配置注意点

    【配置项】1. 在 rule.xml 中,可配置项为<property name="defaultNode"> 、<property name="mapFile"> 和 <property name="type">

    【配置项】2. 在 rule.xml 中配置<property name="defaultNode">标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会报错;若需要配置,必须为非负整数,用户的分片索引值没落在 mapFile 定义的范围时,DBLE 会路由至这个值的 MySQL 分片

    【配置项】3. 在 rule.xml 中配置 <property name="mapFile">标签,范围映射文件的路径:若在映射文件在 DBLE_HOME/conf 或其中,则可以使用相对路径的形式配置,例如,映射文件是 DBLE_HOME/conf/map/table_map.txt 时,配置值就可以简写为 map/table_map.txt;映射文件在 DBLE_HOME/conf 目录以外时,需要使用绝对路径,但这种做法需要考虑用户权限等问题,因此不建议把映射文件放在 DBLE_HOME/conf 外。

    【配置项】4. 编辑 mapFile 所配置的文件

    记录格式为:<枚举值>=<分片编号>

    枚举值可以是整型数字,或任意字符(除了=和换行符),分片编号必须是非负整型数字,记录之间以换行分隔,一行仅能有一条记录,枚举值不能够是“DEFAULT_NODE”这个字符串,允许以“//”和“#”在行首来注释该行

    【配置项】5. 在 rule.xml 中配置 <property name="type">标签;type 必须为整型;取值为 0 时,mapFile 的<枚举值>必须为整型;取值为非 0 时,mapFile 的<枚举值>可以是任意字符(除了=和换行符)

④ 数据库的枚举型问题

1、这个类型可以多种:int, char(n) -- 只要约定好就行,存贮枚举值的代码
2、枚举类型的允许值,可以由DB保证(比如在tradeInfo.tradeType上加约束);也可以只是由程序来控制 -- DB中加上约束会强壮一些,但会牺牲性能;
3、为了软件界面的易读性,通常需要让枚举值可读。每个枚举值对应的文本最好存贮在DB中。这个称为MasterData。可以建一张表存贮
4、如果有对应的主数据表,前面2中的约束,就可以改为Foreign Key

至于JAVA编程,枚举类型的处理,可以使用常量,也可以更优雅地定义一个类。

⑤ 在数据库中存枚举值,用数字还是字符好

数据量不大用字符吧,可读性强

⑥ 在数据库中存枚举值,用数字还是字符好

这个要看你的 枚举, 是 仅仅一次只能选择一个的? 还是一次可以选择多个的.

例如你的
order_id order_status
1 SUCS(成功success)
2 PCES(处理process)

某行数据, 要么就是 SUCS(成功success) , 要么就是 PCES(处理process)
这种情况下, 用字符是比较合适的。

但是如果枚举是可以选择多个的, 例如:
id desc
1 无党派
2 知识分子
4 少数民族
8 女性
16 ......

这种情况下, 如果一个人, 多个枚举都满足的情况下, 那么这种情况下, 使用 数字 是比较适合的。
也就是
如果某个人,是 无党派汉族女性研究生, 那么枚举值 = 1+2+8

⑦ 数据库字段,枚举

这个要放点代码。但是这种方式没有必要,其次就放50分,实在少点,回头你看我的回复
是否值50分?
----------------------
第一:如果代码类似如下
columns[int(TC_User.id)]
columns[int(TC_User.Name)]
columns[int(TC_User.Sex)]
columns[int(TC_User.Address)]
如果从持久实体直接获取,虽然有点效率,但是你可以试验一下如下查询:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='T_CRD'
以上T_CRD 是表名,你看到有一列是ORDINAL_POSITION:
这个是按照数据库设计表的自然序排列,之后你就看到,只要在设计视图中换换位置就改变了这个值。
本身在DBA优化里有一项就是数据类型同项归类提速,结果代码过于拘泥,让DBA根本不能实施这项工作。这是一方面:
--------------------------------------------------
第二:其次就是使用反射来获悉枚举列名。你可以自己试验一下:还不如最原始的if else快,性能差个几百倍。
--------------------------------------------------
第三:即使元数据析构table,也是类似如下方式,如下是linq上下文生成列的方式,使用的是特性描述,别看原始,这确是大智慧。
[Column(Storage="_RpNo", DbType="NVarChar(50) NOT NULL", CanBeNull=false)]
public string RpNo
{
get
{
return this._RpNo;
}
set
{
if ((this._RpNo != value))
{
this.OnRpNoChanging(value);
this.SendPropertyChanging();
this._RpNo = value;
this.SendPropertyChanged("RpNo");
this.OnRpNoChanged();
}
}
}
---------------------
第四:如果你们领导都同意用枚举来映射表,你也没必要修改,顺水推舟吧!
出错你在摆平,也让你出名一把!你自己先提前想好方案!

⑧ 如何通过数据库字段动态生成枚举

利用反射(Reflection),通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。

⑨ 数据库设计-枚举字段的设计

create table tb_name(type_id int,type_name varchar(50))

insert into tb_name values(1,'红色')
insert into tb_name values(2,'绿色')
insert into tb_name values(3,'黄色')
insert into tb_name values(4,'白色')
insert into tb_name values(5,'黑色')