Sql 您最有用的数据库标准是什么?
我有一些想法,一些是随着时间的推移积累起来的,但我真的想知道在对数据库建模时是什么让事情顺利进行的:Sql 您最有用的数据库标准是什么?,sql,database,standards,entity-relationship,Sql,Database,Standards,Entity Relationship,我有一些想法,一些是随着时间的推移积累起来的,但我真的想知道在对数据库建模时是什么让事情顺利进行的: 表名与主键名和描述码匹配 模式是按功能区域划分的 尽可能避免使用复合主键(使用唯一约束) Camel Case表名和字段名 不要在表前面加tbl_,或在procs前面加SP_(无匈牙利符号) OLTP数据库应至少在BCNF/4NF中 良好的数据库设计和规范化每个人都以相同的基本格式编写SQL查询(视图、存储过程等)。它确实有助于今后的开发/维护工作。我总是尽量不使用字段名中的类型-“sFirst
良好的数据库设计和规范化每个人都以相同的基本格式编写SQL查询(视图、存储过程等)。它确实有助于今后的开发/维护工作。我总是尽量不使用字段名中的类型-“sFirstName”、“sLastName”或“iEmployeeID”。虽然它们一开始是匹配的,但如果某些内容发生了更改,它们将不同步,而且以后更改这些名称是一件非常头痛的事情,因为您还必须更改从属对象 Intellisense和GUI工具使了解列的类型变得很简单,因此我觉得这没有必要。
- 使用相同的前缀命名类似的目标存储过程,例如,如果您有3个Person存储过程。这样,person的所有内容都集中在一个地方,您可以轻松地找到它们,而无需查看所有程序来找到它们。
- 人格更新
- 个人删除
- 人格创造
- 当您有一组包含相关数据的表时,对表执行类似的操作。例如:
- 发票抬头
- 发票行
- 发票行详细信息
- 如果在数据库中有模式选项,请使用它们。看到这样更好:
- 发票.页眉
- 发票.行.项目
- 发票.行.项目.明细
- 个人。更新
- 人。删除
- 人。创造
- 除非没有其他合理的方法来实现这个目标,否则不要使用触发器
- 给字段名一个有意义的前缀,这样您就可以知道它们来自哪个表,而不需要别人解释。这样,当您看到引用的字段名时,就可以很容易地判断它来自哪个表
- 对包含类似数据的字段使用一致的数据类型,即在一个表中不要将电话号码存储为数字,在另一个表中不要将varchar存储为数字。事实上,不要将其存储为数字,如果我遇到一个负数电话号码,我会生气的
- 不要在表/字段名称中使用空格或其他模糊字符。它们应该完全是字母数字的——或者,如果我有我的druthers,除了下划线,它们应该完全是字母数字的。我目前正在开发一个继承的系统,其中表名和字段名包含空格、问号和感叹号。让我每天都想杀了设计师李>
- 不要使用语法关键字作为对象名,从中检索数据会让人头疼。我讨厌把对象名包装成[index],这是两个不必要的字符,我不需要输入该死的你李>
- 将表格命名为复数名词
- 将列命名为sigular
- 只要3NF或BCNF的规则仍然有效,复合密钥就没有问题。在许多情况下(如“多对多”情况),这是完全可取的李>
- 避免在列名中重复表名。无论如何,peoplePersonID最好写成table.column,可读性更高,因此可以自文档化。至少对我来说,PersonID更好
- 在删除时,应非常小心地使用级联
- 请记住,NULL表示两件事之一:要么未知,要么不适用
- 还请记住,空值对联接有有趣的影响,因此请练习左、右和全外部联接
示例:cjso_用户、cjso_角色,然后是路由_用户、路由_角色。这听起来像是数据复制,但实际上,两个不同的用户/角色表用于完全独立的系统功能(cjso将用于基于客户的电子商务应用程序,而路由将代表使用路由系统的员工和分销商)。我的Oracle标准是:
- 关键词总是大写李>
- 数据库对象名称始终为小写李>
- 下划线将取代空格(例如,SQL Server上不会有任何常见的驼峰大小写约定)李>
- 主键几乎总是被命名为“id”李>
- 引用完整性将得到加强李>
- 整数值(包括表ID)通常总是数字(19,0)。这样做的原因是,这将适合64位有符号整数,因此允许使用Java长类型,而不是更笨拙的BigInteger李>
- 尽管在某些列名后面加上“_number”的说法有误,但此类列的类型将是VARCHAR2而不是数字类型。数字类型是为主键和进行算术运算的列保留的李>
- 我总是使用技术主键;及
- 每个表都有自己的密钥生成序列。该序列的名称将为_seq
SELECT field1, field2, field2
FROM tablename t1
JOIN tablename2 t2 ON t1.id = t2.tablename_id
WHERE t1.field1 = 'blah'
AND t2.field2 = 'foo'
People Table
PEO_PersonID
PEO_FirstName
...
Select * -- naughty!
From People
Join Orders on PEO_PersonID = ORD_PersonID
--...
select a.field1, b.field2
from any_table a
inner join blah b on b.a_id = a.a_id
inner join yet_another y on y.longer_key = b.b_id
where a.field_3 > 7
and b.long_field_name < 2;
SELECT p.Name, o.Quantity FROM Products p, Orders o WHERE o.ProductID = p.ID
SELECT p.Name, o.Quantity FROM Products p, Orders o WHERE o.ProductID = p.ProductID