数据库中数据表建立的过程中还是遇到了2个问题。
1、数据冗余
例如:Card、Recharge、CancleCard表中,IsCheck是否退卡这个字段是每个表中都有,还是只在Card表中有呢?
我是这么想的,如果每个表中都有的话,以后写代码的时候用到一个表中Ischeck字段的时候就不用查找其他的表,但是这样的话,与数据冗余又有些矛盾,等退卡了之后要更新3个表。
如果只在Card表中有,数据冗余的问题没有了,但是要用到IsCheck这个字段就得查找Card这个表,这样就会同时打开很多的表
当时和身边的小伙伴交流了一下,这就可以参考一下存储过程和触发器。
2、数据类型
在设计数据库的时候,当设置字段类型的时候就有点懵了,是设置成int、char、vchar、nchar、还是nvchar类型呢?
于是上网查找了一下:SQL数据类型
下面就说一下这几者的区别吧:
char:长度是固定的,如果存入‘abc’,char的长度依然为10,除了‘abc’外还有7个空格,所以取数据的时候char的类型要用trim()去掉空格,存取速度快,但空间占有率高。
varchar:的长度是可变的,如果存入‘abc’,就立马把长度变为了3,存取速度稍慢,空间占有率低
nchar、nvarchar:从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。(字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。)nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
最后附上一张ER图