目标:引用多个父表 反模式:使用多用途外键.这种设计也叫做多态关联,或者杂乱关联. 多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的. 在多态关联中,父表的名字是存储在Issue_Type单独一列中,有时候这样的设计被称作:混合数据与原数据. 查询示例: select * from A as a left join B as b on a.xId=b.Id and a.xType='b' lefe join C as c…
目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处于一些必要的因素, 浮点数通常是舍入到了一个非常接近的值. 举例:select rate from A where id=123 --Result:59.95 select * from A where ra…
目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: Null值与False也不同.And.Or和Not三个bool操作如果设计Null,结果很迷惑. 2.搜索运行为空的列:任何与Null的比较逗返回“未知”,既不是True,也不是False. 在Where表达式中只能使用 Is Null 或者 Is Not Null,其他操作都查询不到结果. 3.不…
目标:查询得到每组的max(或者min等其他聚合函数)值,并且得到这个行的其他字段 反模式:引用非分组列 单值规则:跟在Select之后的选择列表中的每一列,对于每个分组来说都必须返回且仅返回一直值. select ProductId,Max(DateReported) as Latest from Bugs as b Join BugProducts as bp on b.BugId = bp.BugId Group by ProductId; 在Group By字句中出现的列能够保证他们…
目标:随机排序,使用高效的SQL语句查询获取随机数据样本. 反模式:使用RAND()随机函数 SELECT * FROM Employees AS e ORDER BY RAND() Limit 1 缺点:无法利用索引,每次选择的时候都不同且不可预测.进行全表遍历,性能极差. 如何识别反模式:当出现以下情况时,可能是反模式 1.在SQL中,返回一个随机行速度非常慢: 2.要获取所有的记录然后随机一个.要如何增加程序可使用的内存大小? 3.有些列出现的频率比别的列要高一些,这个随机算法不是很随机.…
golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题 今天测试了重新建一个项目生成新的表,然后复制到旧的项目上,启动的时候报上面的错误,这个提示很必须唯一很难定位问题,后面发现是项目名称不一致导致的 把新的项目名称全部替换成之前的项目名称就可以了(注意:所有拷贝过来的文件和内容有这个的都要替换掉),例如:"newprojecname/models" 替换成"oldprojecname…