摘要:
多媒体文件已经广泛应用在很多程序当中。比如用户的头像,汽车的产品图片等等。 从我个人以往的经验来看,将文件的路径存储入数据库,然后文件本身存储于硬盘当中已是万年不变的解决方案。 其实,存储图片路径与存储图片文件本身,两种方案都有很好的立足点,但是大部分程序员都是将文件存储于数据库之外。虽然,... 阅读全文
摘要:
多媒体文件已经广泛应用在很多程序当中。比如用户的头像,汽车的产品图片等等。 从我个人以往的经验来看,将文件的路径存储入数据库,然后文件本身存储于硬盘当中已是万年不变的解决方案。 其实,存储图片路径与存储图片文件本身,两种方案都有很好的立足点,但是大部分程序员都是将文件存储于数据库之外。虽然,... 阅读全文
摘要:
一、说明问题 其实这篇非常简单,因为大家都是用这个方法解决的,我决定用自己的语言来描述清楚这一个问题。 假设,我们有一个列,这个列只能够取某些有效值。比如一个用户表,我们有一个姓氏列,我们需要限定里面的值为中国的姓氏,比如:赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨。二、反模式 对于这个问题,其实只有初... 阅读全文
摘要:
多态关联 先说明什么是多态关联。 假设我们有一张地址表,其中的地址可能是对于User中的,也可能是对于Orders中的。 以上,只是举个例子,实际的例子还有很多,比如我们要设计一个内容管理系统(CMS),我们的CMS有一个文章表,一个软件表。还要求支持评论,那么我们的评论表的Id是引用文章... 阅读全文
摘要:
可变属性的需求:我们需要在数据库里面存储很多电器,比如电视,冰箱等等。通常,在程序中,我们的类图为:EVA设计 对于这种继承下来的可变属性时,有一种办法是创建另外一张表,将属性当成行来存储。 其中存储的数据类似下面这样: 这样的设计称为:实体-属-值,简称:EVA,或者又叫开放架构... 阅读全文
摘要:
我之前曾参与维护过一个舆情监控系统,该系统每天源源不断地监控着互联网上的新闻,不断从网上下载新闻保存进入数据库。提出问题 为了表述简单,我特意模拟了一张类似的表: CREATE TABLE NEWS( Id int PK, Title nvarchar(500... 阅读全文
摘要:
假设有一个要开发一个试题系统,全是不定项选择题。一道题可能有2,3,4...个答案,数据应如何设计呢?本处旨在说明问题所在,例如同类问题还有存储电话,一个人可能有多个号码等等。一、存储多值属性 反模式:创建多个列。 我们知道每列最好只存储一个值,因此先看如下设计: CREATE TABLE... 阅读全文
摘要:
相信有过开发经验的朋友都曾碰到过这样一个需求。假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复。 这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系。这是一种典型的递归关系数据。 对于这个问题,以下给出几个解决方案,各位客观可斟酌后选择。一、邻接表:依... 阅读全文
摘要:
有一些开发人员不推荐使用完整性约束,你可能听过以下这么几点不使用外键的原因。 1、数据更新有可能和约束冲突。 2、当前的数据库设计如此灵活,以致于不支持引用完整性约束。 3、数据库为外键建立的索引会影响性能。 4、当前使用的数据库不支持外键。 5、定义外键的语法并不简单,还需要查阅。一... 阅读全文
摘要:
本文的目标就是要确认那些使用了主键,却混淆了主键的本质而造成的一种反模式。一、确立主键规范 每个了解数据库设计的人都知道,主键对于一张表来说是一个很重要,甚至必需的部分。这确实是事实,主键是好的数据库设计的一部分。主键是数据库确保数据行在整张表唯一性的保障。它是定位到一条记录并且确保不会重复存... 阅读全文
摘要:
一、乱穿马路模式介绍 程序员通常使用逗号分隔的列表来避免在多对多关系中创建交叉表,这种设计方式定义为一种反模式,称为乱穿马路。 例如:在一个产品管理系统中,一个人可以有多个产品,一个产品必须对应一个人,因此有如下数据库: 但是,随着时间的推移,出现了一个产品可能会有多个联系人。于是为了最小... 阅读全文
摘要:
一、浮点类型简介 整型是一个很有用的数据类型,但只能存储整数,比如1、199、-19。但不能表述像2.5这样的浮点数。如果数据对精度要求很高,你需要使用另一种数据类型来取代整型。比如算钱的时候通常需要精确到小数点后两位,像$19.95。 在这里首先来介绍下SQLServer中的浮点数:浮点类型是... 阅读全文
|