第一次参加了面试,面试官很好,我写的笔试和回答的都很差劲,虽然技术方面的回答我想抽自己,但是人家还是要了,给了我一个机会,很感谢.
第一道题:设计一个进销存系统的表结构设计 1:老板每天要知道卖出的货物.2:要定期查看货物的成本、销售额和利润。
错误:只考虑了基本构造,写出了每一个表的列名,并没有考虑真正的表结构设计,因为表结构设计失误可能会产生订单重复,数据混乱等情况,是很要命的。谢谢这次面试经历让我真正的思考表结构设计本身,一个错误的设计会导致难抓的BUG,更别提修复了。再次感谢面试官给我机会,我十分开心,这也会激励着我继续学习。
在此,以昨天习得的经验,并翻阅了书籍,查阅了资料,感谢rose^Chen的《项目总结---表结构设计》的总结经验,现对面试题进行补充;
表名:[省略comment,即注释,引擎采用InnoDB]
ID:商品ID,使用8字节无符号的Bigint(20),主键要保证唯一性、非空性、有序性、可读性、可扩展性。即:
id bigint(20) unsigned[使用bigint时它能储存0~65535的数据范围,最大值在18446744073709551615] not null[非空性] primary key[主键 唯一性] auto_increment(自增 有序性)
Goods:商品名, varchar(100) not null;[ 如需要副标题,则varchar(200),图片地址500,相对地址. 图片地址用 text json格式]
Cost:成本 int unsigned(产品成本不可能为负数保证了最大值在4294967295不过精确角度讲建议采用decimal(20,2)保留两位小数,因为适用于货币计算) not null;
sell + gain和Cost相同.gain可以用自定义函数实现 利润=销售额-每件商品成本;
1:老板每天要知道卖出的货物.2:要定期查看货物的成本、销售额和利润。
新建计划执行计划的定义.