数据库表的设计思路

数据库表的设计思路

字数 1189 阅读 330

        作为一个程序员你避免不了要设计数据表,总是一味地根据他人给出的表来写sql这样你永远也得不到成长。所以我现在要来思考如何设计出数据库表。

        那问题来了,如何设计呢?这可是大问题啊...因为我之前就没怎么设计过表,我印象中我只设计过一次表,而且那次我记得设计的出了大问题,我要在毫无关联的两张表中查出2个有关联的字段,你看到这句话肯定很蒙,你一定会想问这字段到底有没有关联啊?有的,关联确实是有的,但是我设计的时候并没有把这两张表关联上,再加上当时数据库没学好,而且就剩三天就要验收程序了,慌啊,然后请教同学,他给一通操作整好了,我当时也没多想他到底是如何整好的。这也导致了我对表的设计还是一头雾水。

        直到最近,我才有了一点想法。这个想法是这么来的,尽管我不知道表的设计,但是学过MVC框架,我知道MVC框架中必然会有实体,而一张表里的字段对应着实体里的变量,那我们不妨反过来想想,一个实体就对应着一张表,我们设计表不就是设计实体吗?实体有什么属性,表里自然也就有了什么字段。这几个实体究竟有什么关联,以什么作为关联的纽带,这便是我们接下来要考虑的东西,一个实体和另一个实体有没有可以关联的字段?有,好的,那我们给他添加上关联字段。没有?那我们再想想,有没有哪一个或哪几个实体能为他们的联系牵线搭桥,让他们联系上,如果有的话那这个设计就没有问题,至少是行得通的设计。如果没有,则说明这是一个绝对孤立的实体,没有任何实体能与它产生关联,那我认为这种情况就不应该存在,你设计出一个完全孤立的实体出来有什么用?拿来当观众吗?这时你就要想了,这个完全孤立的实体究竟有没有存在的必要,如果有存在的必要,那就建立中间表,把他们连起来,没有存在的必要,就想方设法把这个表里的字段往其他表里添。

        话又说回来,实体怎么来?要看你的业务了,业务又从哪里来?就从项目最开始的阶段,需求分析来,所以说需求才是项目的重中之重,不信?你上网搜一搜就会发现,只有需求分析是要多次确认的,有一点不清楚的地方都不行,他有可能导致项目有较大的改动,很可能把之前的努力摧毁掉,所以这个需求分析你一定要做好。

        还有一点,属于我还有疑惑的部分,那就是两个表的关联,是关联两个表的字段好,还是建立中间关联表更好,这个我还不太清楚,或者说这个要看情况而定,也希望大家能够给予我一些思路。




二次更新术,更新一些表字段使用的类型


每张表都具备id这个属性,而随着系统越做越大,id则会越来越多,所以他的类型应设为bigint(也可以是Long),长度设为20

是否启用(bool类型的东西)、类型(type),状态(state)类型应设为tinyint,长度设为1,一般设个默认值0

创建时间(createtime)应设为datetime类型,数据库也是有date类型,而我们用datetime而不用date的原因是datetime有时分秒,而date精确到天

普通的varchar类型字段建议设置默认值为null(empty string) 

手机号可以使用char类型,因为手机号都是固定13位的,用char可以节省空间

对于内容字数比较多的时候你就不能使用varchar了,应该改用text类型

拥有1钻 (约0.22元)
关注
"小礼物走一走,来简书关注我"
赞赏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值