|
已锁定 。这个问题及其答案被锁定,因为它是一个问题,但具有历史意义。它目前不接受新的答案或互动。
1 G. w! i6 S. q+ [4 ]" @我有一些想法。随着时间的推移,我积累了一些想法,但我真的很想知道是什么让你在建模数据库时顺利地做事:! ~" Z$ ^( ^6 [5 ^: m( g" J7 H
[ol]与主键名称和描述键匹配
2 W' e- W7 ^0 O/ D# o& C& G) R模式按功能区划分
$ @4 m, ^" E/ R1 o. q6 w尽量避免使用复合主键(使用唯一约束)
: j' ~: ?5 I8 C* n _- K5 N5 _' R, L骆驼案例名称和字段名称
, p9 n, _0 G$ B9 _& j6 c9 @: c不要在表前添加tbl_不要在前缀proc时加上SP_(无匈牙利符号)
# p$ V. @: S2 j* a; IOLTP至少数据库应该是BCNF / 4NF[/ol] / d* q; p, X# U* R [' P8 Y
解决方案: . z. L; L' [! X
将每个人的意见汇总到一个列表中。
- m5 N: m5 U. A5 K命名标准 # a8 w0 P( c0 m1 p& v! i
该模式命名为
- R) d0 W" ]/ }* H# M没有匈牙利符号:对象名称中没有类型名称(没有匈牙利符号)strFirstName)
. h% O- I$ [# U注册关键注册关键字作为对象名称) f! _, L6 D. p+ J
1 B, i3 n5 ` e5 _/ x& l, {自然命名对象(以自然方式命名)FirstName代替NameFirst)
' W! d& x* Z3 A表名应与主要名称和描述字段相匹配(SalesType ― SalesTypeId,SalesTypeDescription) / C A9 Q) `( a- J! _1 K5 \2 f
不要以tbl_或sp_ 作为前缀7 n3 i; S+ e3 B3 F
根据对象名称的名称代码(CustomerSearch,CustomerGetBalance)
$ U& |* ~1 C3 v8 B8 V. [6 rCamelCase 数据库对象名称
- T3 q& C* ?3 [6 w单数 列出4 V s: u l5 e4 O) y# x# M: I( q8 R
表名可以是复数
9 F* U5 X( }2 ^, a m- h提供所有限制的公司名称(MustEnterFirstName) 0 Y/ y7 M' S! `
资料类型
- Z) T, a5 `" @) W8 A. q- f* {( M9 ?在表之间使用相同的变量类型(在表中使用邮政编码)-在另一个表中使用数字varchar 不是好主意)
4 c1 b; P, a, f( n4 S使用nNVarChar获取客户信息(名称、地址)等。你永远不知道跨国公司什么时候会 4 `* R* V5 E V+ F/ f
在代码中 3 ]- b+ N% e/ I0 M8 F: D7 ^
关键词总是大写 : e. f+ c1 B, I+ w. }: P
从不使用隐式连接(逗号语法)-始终使用显式INNER JOIN / OUTER JOIN
6 F9 M- E- T: x$ J# A每行一个JOIN # l3 H* |( S0 K9 I4 y4 `; D+ y
每行一个WHERE子句 ( S% a! ?7 r+ @5 \* c T5 n( E
没有循环-替换基于集合的逻辑
" l4 w; Y/ A i( j5 [对别名采用简短的表名形式,而不是A,B,C
- R4 } q. z6 p* W7 D3 X避免触发 ,除非没有追索权
/ e: }; x3 N ^; ~避免瘟疫等游标(请阅读http://www.sqlservercentral.com/articles/T-SQL/66097/)
( u4 w M" F5 t7 \文献资料 - L# E! Z, m: P4 w
创建数据库图
6 D3 O1 t- M" {, {& }( R( W创建数据字典 5 Q$ J& Y- I8 |5 d6 t
标准化和参考完整性
. n, w) d$ H" r" s尽量使用单列主键。必要时使用唯一的约束。
4 [/ G. F. ]8 f参考完整性将始终得到执行 2 K$ f' [0 |% k, n4 I2 g
避免ON DELETE CASCADE
7 ]& g' N" L/ f8 [ DOLTP必须至少为4NF
4 `, S( }9 @& M! N+ v4 H2 ?将每一对多关系评估为潜在的多对多关系
2 D8 U, ~4 y) `7 g, x. O" x, d T# J非用户生成的主键 ; {+ a- j3 F" u( ?$ U
构建基于插入的模型,而不是基于更新的模型 1 @8 m3 D0 u( u! o
PK到FK名字必须相同(Employee.EmployeeId与EmployeeSalary.EmployeeId相同字段)
2 p& S- U2 |& o& N除非有双重联系(Person.PersonId联接到PersonRelation.PersonId_Parent和PersonRelation.PersonId_Child)
0 u* i |) s" @" d- B9 s; G8 s维护:运行定期脚本以查找 / a4 L' E8 a7 z
不含表的架构 # E$ h4 T" e5 }' N
孤记录 " _, Y- q3 |$ T, f! v* W
表 没有主键/ o& P, P6 c P
表 没有索引
3 o# s2 o# H: q; T非确定性UDF
9 G. t9 F; p4 o备份、备份、备份
& ?( f* c) I: H; D做个好人
1 K# p% N0 f: u. t5 G* @- n8 ]始终如一 3 _3 I6 Q( {: N
修正错误,现在 + i5 V' T. d6 x6 @0 P8 K2 z9 A, i; k
阅读Joe Celko的SQL编程样式(ISBN 978-0120887972) $ @# H3 F: e. U. i9 T& D0 b9 D
|
|