已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。
我有一些想法,随着时间的推移我已经积累了一些想法,但是我真的很想知道是什么使您在对数据库建模时使事情顺利进行:
将每个人的意见汇总到一个列表中。
命名标准
模式按功能区域(产品,订单,运输)命名
没有匈牙利语符号:对象名称中没有类型名称(没有strFirstName)
不要使用注册关键字作为对象名称
对象名称中没有空格或任何特殊字符(仅允许使用字母数字和下划线)
以自然方式命名对象(用FirstName代替NameFirst)
表名称应与主键名称和描述字段匹配(SalesType ― SalesTypeId,SalesTypeDescription)
不要以tbl_或sp_作为前缀
按对象名称的名称代码(CustomerSearch,CustomerGetBalance)
CamelCase数据库对象名称
列名应为单数
表名可以是复数
为所有限制提供公司名称(MustEnterFirstName)
资料类型
在表之间使用相同的变量类型(在一个表中使用邮政编码-数字,在另一个表中使用varchar并不是一个好主意)
使用nNVarChar获取客户信息(名称,地址)等,您永远不知道何时会跨国公司
在代码中
关键字始终大写
从不使用隐式联接(逗号语法)-始终使用显式的INNER JOIN / OUTER JOIN
每行一个JOIN
每行一个WHERE子句
没有循环-替换为基于集合的逻辑
对别名使用简短的表名形式,而不是A,B,C
除非没有追索权,否则避免触发
避免像瘟疫这样的游标(请阅读http://www.sqlservercentral.com/articles/T-SQL/66097/)
文献资料
创建数据库图
创建数据字典
规范化和参照完整性
尽可能使用单列主键。在需要时使用唯一约束。
参照完整性将始终得到执行
避免ON DELETE CASCADE
OLTP必须至少为4NF
将每个一对多关系评估为潜在的多对多关系
非用户生成的主键
构建基于插入的模型,而不是基于更新的模型
PK到FK的名称必须相同(Employee.EmployeeId与EmployeeSalary.EmployeeId相同的字段)
除非有双重联接(Person.PersonId联接到PersonRelation.PersonId_Parent和PersonRelation.PersonId_Child)
维护:运行定期脚本以查找
不含表的架构
孤记录
没有主键的表
没有索引的表
非确定性UDF
备份,备份,备份
做个好人
始终如一
修正错误, 现在
阅读Joe Celko的SQL编程样式(ISBN 978-0120887972)