在项目当中如何设计表结构(建模),需要考虑哪些因素

本文探讨了数据库设计的关键要素,如使用可扩展的int或枚举代替bool、独立表存储复杂奖品信息、合理选用数据类型以节省空间、处理null值与主键问题、应用约束和规则、外键关系的选择,以及索引策略的运用。强调了在设计过程中考虑数据库的效能和未来需求的重要性。
摘要由CSDN通过智能技术生成

(1)设计表的时候首先要关注表字段的可扩展性,例如性别这个字段,正常可以用bool类型,true为男,false为女,但是如果是未知呢,所以尽量避免用bool类型,可以用int类型或者枚举类型代替

(2)其次需要考虑表的可维护性及可读性,例如主表里有奖品信息的字段,如果奖品有多种类型呢,甚至对应多个奖品的情况,我这边选择独立一张表出来通过字段关联存放奖品信息而不选择放在主表字段里

       第一:首先要考虑的是咱们这个数据库的主要作用是什么?至少包含哪些数据?这些数据又分别属于那些实体对象?对象之间又存在什么样的关系?比如说新闻文章管理系统的数据库,它要存放的数据至少包括:文章分类,文章标题,发文时间,作者;而既然是管理系统,那么肯定会有人要添加删除修改文章,那么就延伸出需要管理员,有管理员了就存在账号,密码;如果还要有对文章的评论功能,那就还有评论的标题,评论的类容,评论人姓名,评论时间等。这么多需要存放的数据,如何归类,归类后又如何整理相互之间的关系呢?这就需要用到工具。

       第二: E-R 模型,建立E-R模型的工具很多,甚至纸笔也算是一种工具。而E-R图的画法其实也很多。它的主要作用是将所有要存入数据库的数据归类、整理成一个个的分类,这个分类被称之为实体,而被归如这个分类的数据则被称之为实体的属性。不同的实体之间存在关联,比如文章和管理员之间就存在谁发布了文章,文章和评论之间存在某条评论是属于那篇文章,这样的关系,在E-R模型上就必须把这些体现出来。具体E-R的工具和画法稍后有一小节来讲,这里先不赘述。

      

        第三:每一个实体就是一个表,而实体的属性就是这个表的列,那么现在问题就出来了,到底什么样的列该用什么样的数据类型,比如文章的标题该用什么数据类型呢

 

       接着来看你用的NCHAR(50)有不有问题,首先我们说什么情况下用NCHAR类型呢?一是在Unicode字符的时候用N开头的类型,其次只有在数据长度基本差不多的情况采用。但是文章的标题会每一个都固定长度吗?而且char类型最致命的一个缺陷是,只要用它的数据,只要长度不够,就自动填充空格,问题出来,如果连续10万行数据的这一列都只有40个字符,那么每行都增加10个空格,这样下来10万*10字符的空间实际上就白白的被占用了。虽然有人说现在磁盘成本已经越来越廉价,但是我觉得吧,这不是钱的问题,因为数据库体积越大,处理数据的效率必然受影响。再比如说,用户注册中年龄的问题,肯定首选tinyint,因为目前人类的年龄不可能超过255岁,而这个类型只占1字节的空间,如果习惯性的用int类型,咋一看也没有问题,可惜就白白浪费了3字节的空间,因为int是4字节的长度。

第四:允许为空和默认值。这是什么意思呢,首先要明确什么是空值,什么是默认值,这里的空值既不是0也不是空字符,而表示未知,用null表示。这就有问题了,首先如果处在变长类型列中的null值本身虽然不占空间,但是它所在列确实实实在在的要占用空间的。再则null比较特殊,数据库要对null字段进行额外的操作,所以如果表中有较多的null字段时会影响数据库的性能,还有一点是我们现在想不到,但将来一定遇到的,null字段会给我们编程带来一些不大不小的麻烦,比如制造一些bug。

       所以,一句话,尽量少用允许列为空,如果一定要允许也尽量将之靠后。

       第五:主键的问题,来看个实际的例子。公安部要通缉孙悟空,这问题就出来了,全国叫孙悟空的人可能不只一猴,所以单纯靠名字是不能通缉的。长相?不行,全国的猴子多了去了,长得像的也挺多。我们这里不是YY小说,不玩灵魂气息。哪咋办呢,就是给全国的猴子办身份证,每个身份证上的编号绝对不能相同。于是以后再要通缉孙悟空的话,就好办了。我们的数据表中数据也一样,每一行都需要一个绝不重复的标志作为主键。

     

       第六:约束和规则,用于确保数据完整有效性,一旦定义了约束和规则,那么只有满足这些条件的数据才可一倍插入数据库。比如要求注册会员的性别要么是男,要么是女,绝对不允许第三种情况,再比如年龄只能是18-80岁,其他注册不了。

       第七:外键关系,比如会员管理系统,如果所有会员都是同样当然无所谓,但如果分为普通会员,金、银、铜牌会员几种类型,这时候就需要好好的思量下了。到底是在会员信息表中增加一个列来存储会员类型的名称呢还是单独用另外一张表来存储会员名称,再把两张表关联起来。如下处理方式

       第八:考虑是否使用索引,索引也是一种数据库对象,是加快对数据表中数据检索的一种手段,是提高数据库使用效率的一种重要方法。于是要在那些列上使用索引,对那些列不使用索引,是使用聚簇索引还是使用费聚簇索引,是否使用全文索引,等等,很多问题需要认真的去思考。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值