关于数据库设计

qp7711 2014-09-04 09:56:08
我们都知道数据库的设计在系统中占的比重。
我有个问题,是这样的。
表里的有些外键字段,主表是数字型的做,那么我们一般都是与之相同类型保存这个字段。
但我最近这个项目,数据库的设计却是用varchar保存,且假如是值是1,却是用01/001保存。
还有用于标识列,也是用00或01表示。

我们都知道数字型在比较,查询都是最高效率的,依我主观的认识,这种设计不旦CRUD都会变慢,还会增加CU的难度。

请问像这个设计的意图是什么?只为限定所拥有的数据类型?

=========================== 我的设计想法 =============================

布尔标识型:则以1为true,0为false
外键字段:则以1或以上为真实数据,0则表示为空或通用
冗余列与主列类型保持相同。
日期型:空日期不留空,而是用0存入。(0000-00-00 00:00:00)
Ip地址型用32位整型存储。


...全文
198 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhu19774279 2014-09-05
  • 打赏
  • 举报
回复
问问最早的客户吧,不排除这是客户需求,只是为了好看 我以前接触过人事的东西,所有数据都是你这样的,员工姓名也是,两个字的一定要加空格,保证和3个字的长度一样,问他们为什么,他们说这样对齐了,比较美观 另外,ip用32位整型效率还可以继续挖掘,如果只用MySQL不考虑其他数据库,可以使用INET_ATON和INET_NTOA两个函数,种类少的字符可以考虑用enum 以上《高性能MySQL》上都有详细介绍
引用 5 楼 qp7711 的回复:
[quote=引用 4 楼 ACMAIN_CHM 的回复:] 我们都知道数字型在比较,查询都是最高效率的, 楼主不妨举例说明一下这个,然后考虑一下对系统的影响会有多大? 比如 "01" == "02" 与 1==2 的效率上差异到底是多少。 很多时候我们都以为的东西,可能并不能说明什么。
我是这样认为的,因为原本是1、2、3等这样的数据,但在CRUD时要弄成01、02、03等, 这个得做转换。 其二,我这系统是一个平台,使用的人很多,能提高就算是0.001ms都是有好处的。 其实我是不清楚为什么要这样设计,这样设计的意图是什么。[/quote]
qp7711 2014-09-05
  • 打赏
  • 举报
回复
引用 6 楼 zhu19774279 的回复:
问问最早的客户吧,不排除这是客户需求,只是为了好看 我以前接触过人事的东西,所有数据都是你这样的,员工姓名也是,两个字的一定要加空格,保证和3个字的长度一样,问他们为什么,他们说这样对齐了,比较美观 另外,ip用32位整型效率还可以继续挖掘,如果只用MySQL不考虑其他数据库,可以使用INET_ATON和INET_NTOA两个函数,种类少的字符可以考虑用enum 以上《高性能MySQL》上都有详细介绍 [quote=引用 5 楼 qp7711 的回复:] [quote=引用 4 楼 ACMAIN_CHM 的回复:] 我们都知道数字型在比较,查询都是最高效率的, 楼主不妨举例说明一下这个,然后考虑一下对系统的影响会有多大? 比如 "01" == "02" 与 1==2 的效率上差异到底是多少。 很多时候我们都以为的东西,可能并不能说明什么。
我是这样认为的,因为原本是1、2、3等这样的数据,但在CRUD时要弄成01、02、03等, 这个得做转换。 其二,我这系统是一个平台,使用的人很多,能提高就算是0.001ms都是有好处的。 其实我是不清楚为什么要这样设计,这样设计的意图是什么。[/quote][/quote] 恩, 现在我用于标识列的都是用enum(1,0)表示。 你说的那种情况还好理解,但我这个是并不是用于显示,这些都作为外键仅是参与查询,我才理解不了!
qp7711 2014-09-04
  • 打赏
  • 举报
回复
引用 1 楼 qp7711 的回复:

create table a{
  aid int primary key,
  name varchar(50),
  flag varchar(2)  comment '## 00/01'
}

create table b{
 bid int primary key,
 aid varchar(3) comment '### 001/0002' ,
 ...
}
如上!
qp7711 2014-09-04
  • 打赏
  • 举报
回复

create table a{
  aid int primary key,
  name varchar(50),
  flag varchar(2)  
}

create table b{
 bid int primary key,
 aid varchar(3) comment '### 001/0002' ,
 ...
}
qp7711 2014-09-04
  • 打赏
  • 举报
回复
引用 4 楼 ACMAIN_CHM 的回复:
我们都知道数字型在比较,查询都是最高效率的, 楼主不妨举例说明一下这个,然后考虑一下对系统的影响会有多大? 比如 "01" == "02" 与 1==2 的效率上差异到底是多少。 很多时候我们都以为的东西,可能并不能说明什么。
我是这样认为的,因为原本是1、2、3等这样的数据,但在CRUD时要弄成01、02、03等, 这个得做转换。 其二,我这系统是一个平台,使用的人很多,能提高就算是0.001ms都是有好处的。 其实我是不清楚为什么要这样设计,这样设计的意图是什么。
ACMAIN_CHM 2014-09-04
  • 打赏
  • 举报
回复
我们都知道数字型在比较,查询都是最高效率的, 楼主不妨举例说明一下这个,然后考虑一下对系统的影响会有多大? 比如 "01" == "02" 与 1==2 的效率上差异到底是多少。 很多时候我们都以为的东西,可能并不能说明什么。
qp7711 2014-09-04
  • 打赏
  • 举报
回复
再顶顶自己!!!

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧