我们都知道数据库的设计在系统中占的比重。
我有个问题,是这样的。
表里的有些外键字段,主表是数字型的做,那么我们一般都是与之相同类型保存这个字段。
但我最近这个项目,数据库的设计却是用varchar保存,且假如是值是1,却是用01/001保存。
还有用于标识列,也是用00或01表示。我们都知道数字型在比较,查询都是最高效率的,依我主观的认识,这种设计不旦CRUD都会变慢,还会增加CU的难度。请问像这个设计的意图是什么?只为限定所拥有的数据类型?=========================== 我的设计想法 =============================布尔标识型:则以1为true,0为false
外键字段:则以1或以上为真实数据,0则表示为空或通用
冗余列与主列类型保持相同。
日期型:空日期不留空,而是用0存入。(0000-00-00 00:00:00)
Ip地址型用32位整型存储。

解决方案 »

  1.   


    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' ,
     ...
    }
      

  2.   


    我是这样认为的,因为原本是1、2、3等这样的数据,但在CRUD时要弄成01、02、03等, 这个得做转换。
    其二,我这系统是一个平台,使用的人很多,能提高就算是0.001ms都是有好处的。其实我是不清楚为什么要这样设计,这样设计的意图是什么。
      

  3.   

    问问最早的客户吧,不排除这是客户需求,只是为了好看
    我以前接触过人事的东西,所有数据都是你这样的,员工姓名也是,两个字的一定要加空格,保证和3个字的长度一样,问他们为什么,他们说这样对齐了,比较美观
    另外,ip用32位整型效率还可以继续挖掘,如果只用MySQL不考虑其他数据库,可以使用INET_ATON和INET_NTOA两个函数,种类少的字符可以考虑用enum
    以上《高性能MySQL》上都有详细介绍我是这样认为的,因为原本是1、2、3等这样的数据,但在CRUD时要弄成01、02、03等, 这个得做转换。
    其二,我这系统是一个平台,使用的人很多,能提高就算是0.001ms都是有好处的。其实我是不清楚为什么要这样设计,这样设计的意图是什么。
      

  4.   


    我是这样认为的,因为原本是1、2、3等这样的数据,但在CRUD时要弄成01、02、03等, 这个得做转换。
    其二,我这系统是一个平台,使用的人很多,能提高就算是0.001ms都是有好处的。其实我是不清楚为什么要这样设计,这样设计的意图是什么。恩, 现在我用于标识列的都是用enum(1,0)表示。
    你说的那种情况还好理解,但我这个是并不是用于显示,这些都作为外键仅是参与查询,我才理解不了!