Raj*_*ore 44 sql database standards entity-relationship
我有一些想法,有些是我随着时间的推移积累的,但我真的想知道在建模数据库时是什么让事情顺利进行:
Ben*_*ter 19
HLG*_*GEM 13
有一点我还没有提到过:
切勿将数据库关键字用作对象名称.您不希望每次使用它们时都必须对它们进行限定
如果您在创建时拼错了某些内容,请在注意到后立即修复.不要花费数年时间来记住在这个表中UserName真的是Usernmae.当没有多少代码写入时,它更容易修复.
永远不要使用隐含连接(逗号语法),始终指定连接.
Raj*_*ore 11
将每个人的输入放在一个列表中.
命名标准
数据类型
在代码中
文档
规范化和参照完整性
维护:运行定期脚本来查找
好
cle*_*tus 10
我的Oracle标准是:
对于SQL Server,唯一的修改是对数据库对象名称使用驼峰大小写(即PartyName而不是party_name).
查询将倾向于多行写入,每行有一个子句或条件:
SELECT field1, field2, field2
FROM tablename t1
JOIN tablename2 t2 ON t1.id = t2.tablename_id
WHERE t1.field1 = 'blah'
AND t2.field2 = 'foo'
Run Code Online (Sandbox Code Playgroud)
如果SELECT子句足够长,我将每行分割出一个字段.
不要在字段名称中使用类型名称.年长的人会记住lpszFieldName的旧MS标准和随之而来的愚蠢.
使用符合常规语言约定的描述性字段名称.例如"FirstName"而不是"NameFirst"
字段名称中的每个单词都是大写的
没有下划线
不要使用普通的关键字,如"索引"
不要在ANYTHING前加上对象类型.例如,我们不使用tblCustomers或spCustomersGet.这些不允许良好的分类并提供零值.
使用模式定义数据库的单独区域.如sales.Customers和hr.Employees.这将摆脱人们使用的大多数前缀.
任何形式的循环都应该被怀疑.通常有一种更好的基于集合的方式.
对复杂的连接使用视图.
尽可能避免复杂的连接.拥有CustomerPhoneNumbers表可能更令人愉快; 但老实说,我们真的需要存储多少个电话号码?只需将字段添加到Customers表即可.您的数据库查询将更快,并且更容易理解.
如果一个表调用字段"EmployeeId",那么引用它的EVERY SINGLE TABLE应该使用该名称.它不需要被称为CustomerServiceRepId,因为它位于扩展表中.
几乎所有表都有"s"结尾.例如:客户,订单等.毕竟表中包含许多记录......
使用分析工具评估查询,索引和外键关系.甚至那些可能为你生成的.你可能会感到惊讶.
链接支持多对多关系的表在名称中都有链接表.例如,SchoolsGrades.通过表名告诉它它的作用非常容易.
始终如一.如果你开始遵循惯例的一条路径,除非你愿意重构以前的所有工作,否则不要中途换马.这应该扼杀任何"不会是伟大的,如果......"的想法,最终导致混乱和大量的返工.
在打字之前先想想.你真的需要那张桌子,场地,杂物或视图吗?你确定它不在其他地方吗?在添加之前获得一致意见.如果由于某种原因您必须将其取出,请先与您的团队联系.我一直在DBA每天都在不考虑开发人员的情况下做出改变的地方.这不好玩.
我总是尽量不使用字段名称中的类型 - "sFirstName","sLastName"或"iEmployeeID".虽然它们最初匹配,但如果发生变化,它们将不同步,以后更改这些名称会非常头疼,因为您还必须更改依赖对象.
Intellisense和GUI工具使得找出列的类型变得微不足道,因此我觉得这不是必需的.
确保每个varchar/nvarchar选项都是合适的.
确保每个NULLable列选择都是合适的 - 尽可能避免使用NULLable列 - 允许NULL应该是合理的位置.
无论您在此处的建议中使用何种其他规则,我都会在数据库中创建一个可以定期运行的存储过程,以确定您拥有的任何规则或标准的系统运行状况(其中一些是一点SQL) - 特定于服务器):
在任何由于某种原因无法使用DBMS系统的参照完整性的情况下查找孤立记录(在我的系统中,我有一个进程表和一个测试表 - 所以我的system_health SP在没有测试的情况下查找进程,因为我只有一个单向FK关系)
寻找空架构
查找没有主键的表
寻找没有任何索引的表
查找没有文档的数据库对象(我们使用SQL Server扩展属性将文档放在数据库中 - 此文档可以像列一样精细).
查找特定于系统的问题 - 需要归档的表,不是正常月度或日常处理的异常,具有或不具有默认值的某些常见列名(比如CreateDate).
寻找非确定性UDF
查找TODO注释以确保数据库中的代码不会以某种方式具有未经测试或预发布的代码.
所有这些都可以自动化,为您提供系统健康状况的整体情况.
归档时间: |
|
查看次数: |
11551 次 |
最近记录: |