当前位置: 首页 > 编程日记 > 正文

Database design best practice(1):关于primary key及其它

1. The job of the primary key is to uniquely identify records, not to store business data ; any use of business data in a primary key is a dangerous practice, since any changes to such data will have large ripple effects (from javapractices)
这是不是意味着每一张表都要增加一个没有业务意义的column来做为primary key,这个column的类型是int的,然后可以设置为自增(在sql server里只要把这个字段的identity属性设为Yes就可以了).
讨论一下以上的做法:

(1) 表中如果有column符合传统的做为primary key的条件(值唯一,不可能为空值,极少会变动),比如学号,这种情况下是不是还要增加一个column来表征primary key呢?
似乎没什么必要了.但这个时候的primary key却是表达了一些业务信息.倘若有一天学号的格式发生了变化(如由5位升级为6位) ,的确会比较麻烦,好在这种事情不多.
(2) 一个表里任何一个column都不满足primary key的硬条件,只有数个columns联合起来才能共同确定一条记录.这种情况下倒是建议增加一个column来做primary key.否则,你要查询一条信息还要写好几个条件: where and group = ? and team = ?, 会比较郁闷的.
(3) 如果一个column专门用来做primary key(不包含商业信息),建议使用int类型,这样可以auto increment功能.如果不使用auto increment,插入记录时选定primary的值是比较麻烦的.(使用int类型可能会有数据溢出的风险,但现在int类型都是32位的,最大值有42亿多,一般不会有问题)


2. "数字标志符(numerical identifier)"的类型应该是整数类型还是字符类型?
比如学号,工号,信用卡号.
(1) 如果要保留leading zero,就要用字符类型.
(2) 如果位数很大,也要用字符类型.
(3) 字符串也支持between操作,但是要注意'9'>'10', '09'<'10'(sql server2005中)


3. Do not use SELECT * in your queries. Always write the required column names after the SELECT statement
    For reduced disk I/O and better performance

4.  数据库能完成的操作,不要在代码里完成.
比如
    排序(order by)
    过滤数据(where)
    聚合信息(Group by,count,avg,stddev标准方差)

5. Views are generally used to show specific data to specific users based on their interest.
    Views are also used to restrict access to the base tables by granting permission only on views.
    Yet another significant use of views is that they simplify your queries.
     Incorporate your frequently required, complicated joins and calculations into a view so that you don't have to repeat those joins/calculations in all your queries. Instead, just select from the view.

转载于:https://www.cnblogs.com/yuquanlaobo/archive/2007/01/19/624446.html

相关文章:

ReentrantLock+线程池+同步+线程锁

1、并发编程三要素&#xff1f;1&#xff09;原子性原子性指的是一个或者多个操作&#xff0c;要么全部执行并且在执行的过程中不被其他操作打断&#xff0c;要么就全部都不执行。2&#xff09;可见性可见性指多个线程操作一个共享变量时&#xff0c;其中一个线程对变量进行修改…

String.hashCode 哈希值出现重复?

String.hashCode重复 在我学习hash的时候&#xff0c;没有按照教程里面的字符串的值去获取了一个hashcode,然后让这个小白的我惊讶了&#xff0c;这个竟然和教程里面的那个不一样&#xff0c; 对此&#xff0c;我对于这个问题进行了“研究” &#xff0c;在这里先写点我已经知道…

Selenium2(WebDriver)总结(二)---Firefox的firebug插件参数设置(补充)

Selenium2(WebDriver)总结(二)---Firefox的firebug插件参数设置(补充) 本文是对上一节的补充&#xff1a;http://www.cnblogs.com/puresoul/p/4251536.html 使用Selenium2(webdriver)启动firefox且自动加载firebug插件时&#xff0c;切换到firebug插件的网络和cookies部分时&am…

个人信息管理器

转&#xff1a;http://www.cnblogs.com/maxianghui/archive/2006/10/10/524873.html 经过一个多月的努力&#xff0c;终于搞定了这个小软件&#xff0c;请大家给点意见我。采用VC# Access2003 XML开发&#xff0c;扩展了TreeView控件&#xff0c;扩展了RichTextBox控件&#…

分享一些我在开发过程中用过的资源

以下所提到的控件/组件均为开源或免费的。1,ComboBox控件: Upgrade Your Select Element to a Combo Box2,DateTimePicker控件: GrayMetterSoft3,TabStrip控件: A simple ASP.NET Web TabStrip User Control4,Grid控件: XGrid5,数据结构Tree: A Generic Tree Collection6,csv文…

Ubuntu16.04如何彻底删除Apache2

虽然作为运维人员通常情况不建议随意删除Linux系统上面的任何软件&#xff0c;主要指生产环境下&#xff0c;测试环境也不能太随意。 但是有的时候&#xff0c;比如系统环境要变一变&#xff0c;我们就需要替换一些淘汰的软件&#xff0c;对此我们一般都会删除。 按照下面的步骤…

Java案例——统计字符串中每个字符串出现的次数

统计字符串中每个字符串出现的次数 需求&#xff1a; 1.键盘录入一个字符串&#xff0c;要求统计字符串中每个字符串出现的次数 举例&#xff1a;键盘录入“aababcabcdabcde” 在控制台输出&#xff1a;“a(5)f(4&#xff09;c(3)g(2)e(1)” 思路&#xff1a; 1.键盘录入一个字…

在C#中怎样推断线程当前所处的状态

在C#中怎样推断线程当前所处的状态老帅 在C#中。线程对象Thread使用ThreadState属性指示线程状态。它是带Flags特性的枚举类型对象。ThreadState 为线程定义了一组全部可能的执行状态。一旦线程被创建。它就至少处于当中一个状态中。直到终止。在公共语言执行时中创建的线程最…

写《回国驯火记》的那个安普若

2007/3/27写《回国驯火记》的那个安普若 http://an.haiguinet.com/以前光觉得安普若的 《 回国驯火记》[ 《回国驯火记》又名《回国训火记》&#xff0c; 人送外号《熏火鸡》。这是一部表现 海归沉浮&#xff0c;新潮时尚&#xff0c;商战阴谋&#xff0c;名人八卦的小说。以故…

毒霸主程序集成反流氓

原来使用毒霸杀流氓软件&#xff0c;还得单独启动反间谍模块扫描。考虑到很多用户还清楚如何调用反间谍&#xff0c;主程序干脆直接调用反间谍库&#xff0c;会把最恶劣的流氓程序直接清除掉&#xff0c;一般的流氓程序会被忽略&#xff0c;首选解决最影响用户感观的问题。

.NET(C#)连接各类数据库-集锦

1.C#连接连接Access程序代码: ------------------------------------------------------------------------------- usingSystem.Data;usingSystem.Data.OleDb;..stringstrConnection"ProviderMicrosoft.Jet.OleDb.4.0;";strConnection"Data SourceC:BegASPNETN…

CQOI2015 任务查询系统

传送门 又是一句经常见到的话……做完这题对主席树的理解会更好一些…… 这道题把普通的主席树单点修改区间查询改成了区间修改单点查询。这个的话我们可以改成差分解决……把一个操作改成两个&#xff0c;然后把所有操作按照时间进行排序。注意这里修改细节很多&#xff0c;因…

在?三缺一,来斗个地主——肝个斗地主案例(java)

在&#xff1f;三缺一&#xff0c;来斗个地主 *手动狗头 * 模拟斗地主升级版&#xff0c;通过程序实现斗地主过程中的洗牌、发牌和看牌&#xff0c;要求&#xff1a;对牌进行排序 思路&#xff1a; 1.创建HashMap&#xff0c;键是编号&#xff0c;值是牌 2.创建ArrayList&…

RK3399 BOX编译步骤

1、U-Boot编译&#xff1a; make rk3399_box_defconfig make ARCHVaarch64 生成trust.img、 RK3399MiniLoaderAll_V1.05.bin、 uboot.img&#xff1b; 2、Kernel编译&#xff1a; make ARCHarm64 rockchip_defconfig(make ARCHarm64 sunny_rk3399_defconfig) make ARCHarm64 rk…

小型星形网络结构设计示例

<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" />以下内容摘自笔者编著的《网络工程师必读——网络系统设计》一书&#xff1a; 上节介绍的是网络形成后&#xff0c;由LAN MapShot 2.0自动发现网络拓扑结构的方法。在网络没…

IOS_多线程_ASI_AFN_UIWebView

H:/0730/00_多线程4种售票_ViewController.h// // ViewController.h // 卖票 // // Created by apple on 13-7-29. // Copyright (c) 2013年 itcast. All rights reserved. //#import <UIKit/UIKit.h>interface ViewController : UIViewController// 多行文本提示框 …

Error:java: 错误: 不支持发行版本 14

Error:java: 错误: 不支持发行版本 14修改全局设置修改module设置在我换了电脑把IDEA的project转移过来之后&#xff0c;开始出现了问题 修改全局设置 修改 Files -> Settings -> Project Structure -> Project -> Project Language Level->选择版本比当前jdk版…

python简说(十五)MD5加密

def my_md5(s): news str(s).encode() m hashlib.md5(news) return m.hexdigest()转载于:https://www.cnblogs.com/wangtingting920416/p/10099896.html

[错误]xstring(525) : warning C4530:

"warning C4530:" 在编译选项中添加上 -GX 就好了&#xff0c;详情参MSDN. 作用&#xff1a;remove _ATL_MIN_CRT Link option

程序模拟电影院窗口卖票,多线程Demo

某电影院目前正在上映国产大片&#xff0c;共有100张票&#xff0c;而它有3个窗口卖票&#xff0c;请设计一个程序模拟该电影院卖票 卖电影票Demo实现步骤1.SellTicket类2.SellTicketDemo测试类3.测试结果4.问题反思4.1 相同的票出现了多次4.2 出现了负数的票实现步骤 1. 定义一…

(C#加密)幻术-大踲无形

首先:我看下面的代码只是知道大概的原理核心算法还是不太清楚~~有清楚的麻烦回复下谢谢咯咯--这也是看Msdn就是把在一个图片上隐藏数据 usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;usin…

01 python爬虫

--- 转载于:https://www.cnblogs.com/haima/p/10107708.html

【BZOJ3963】[WF2011]MachineWorks cdq分治+斜率优化

【BZOJ3963】[WF2011]MachineWorks Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理&#xff0c;公司使用更加先进的机械设备生产先进的机器。原来的那一台生产机器已经坏了&#xff0c;所以你要去为公司买一台新的生产机器。你的任务是在转型期…

金山发布《2006年度信息安全报告》

2006年度&#xff0c;国内的互联网环境因接踵而至的信息安全事件一再掀起了波澜。作为国内领先的信息安全厂商&#xff0c;金山毒霸同数千万国内用户一起见证了对病毒、对流氓软件发出的各种绝技杀手锏。 2007年2月8日&#xff0c;金山软件正式发布了《中国互联网2006年度信息安…

Nginx+Apache Yii2.0 配置方案

最近用Yii2.0框架做了个小项目&#xff0c;虽然项目本身业务逻辑不复杂&#xff0c;但是由于本身业务逻辑的特殊性&#xff0c;在上午9点到12点之间系统访问量会突然上升&#xff08;浏览量和用户上传文件量&#xff09;。导致系统单纯的部署在Apache下&#xff0c;支撑不了这么…

RobotFramework下的http接口自动化Set Request Body 关键字的使用

Set Request Body关键字用来设置http 请求时的body 信息&#xff0c;尤其是在post 请求时&#xff0c;经常需要用到这个关键字。 该关键字接收一个参数&#xff0c;[ body ] 示例1&#xff1a;登录博客园&#xff08;http://www.cnblogs.com/&#xff09;时&#xff0c;设置登录…

JDK11使用IDEA,配置JavaFX

JDK11使用IDEA&#xff0c;配置JavaFX1.下载javaFX相关的包2.在实际Demo中试验哪里少了添加哪里导入lib文件夹&#xff0c;之后点击OK配置VMoption配置成功3.运行&#xff0c;大功告成1.下载javaFX相关的包 需要下载对应的包&#xff0c;进入openjfx.cn网站下载 https://gluon…

写了一个PPT,用于公司内部培训

匆忙写成&#xff0c;以后会慢慢补充请用力一击中等规模的并发程序设计http://files.cnblogs.com/jobs/2007-5-9-concurrent-ppt.rar2007-5-10修改版&#xff08;带参考文档&#xff09;http://files.cnblogs.com/jobs/2007-5-10-concurrent-ppt.rar转载于:https://www.cnblogs…

终端bash美化(FC)

终端bash美化(FC) 用Linux也已经一年多了&#xff0c;感觉几乎还是什么都不会。大概是一直再做一些没多大意义的事的缘故吧&#xff0c;就像今天些的内容一样。以前搞了一段时间的GENTOO&#xff0c;发现里面的bash提示&#xff08;也就是&#xff3b;userhostname directory]$…

List and ArrayList

List<> and ArrayList Class DiagramsUsing the Bit Complement of the BinarySearch() Result代码1using System; 2using System.Collections.Generic; 3class Program 4{ 5 static void Main() 6 { 7 List<string> list new List<string>();…