数据库系统设计之命名与主键选择

简介:

 1.C.J.Date关于分布式数据库的12条告诫


  • 本地站点的独立性。每个本地站点都有一个独立自主的集中式DBMS,每个站点都必须保证安全性,并发控制,备份和恢复

  • 中心站点。在网络中的站点都与中心站点或其它站点无关,所有站点具有同样的功能

  • 故障独立性。节点发生故障不会影响到系统,即一个节点发生故障,系统也能继续运行

  • 位置透明。用户检索数据时,不需要知道数据的位置

  • 分割透明。数据分割对用户透明,用户仅能看到一个逻辑数据库,用户检索数据分割时,不需要知道数据库分割的名字

  • 复制透明。用户仅看到一个逻辑的数据库,DBMS透明的选择数据库分割,对于用户来说,DBMS透明的管理所以分割

  • 分布式查询。查询可能在不同的的DB站中运行,DBMS透明的实行查询优化

  • 分布式事务管理。一个事务可能在不同的站点更新数据,DBMS透明的实行事务管理

  • 硬件独立性。系统必须可以在任何硬件平台运行

  • 操作系统独立性。系统必须可以在任何操作系统平台上运行

  • 网络独立性。系统必须可以在任何网络平台上运行

  • 数据库独立性。系统必须支持任何厂商的产品数据库


   wKiom1UZPfqCLbe4AAHr1YAgtnA062.jpg


   2.数据库设计策略

     数据库设计的两个经典方法是:自顶向下设计,自底向上设计。

     自顶向下设计:先识别数据集,然后对集合定义数据元素,这个过程将经历实体识别到实体的属性定义。

     自下向上设计:先定义数据元素项,然后将其组合成数据集,这个过程经历属性定义到组合成实体。

    这两种方式是相互补充的,根据业务场景和开发经验来做出选择,通常少量实体,属性,关联关系的数据库时可以将关注点放在自底向上的方法。如果数据库更为复杂,则考虑使用自定向上的方法。

    依个人经历,倒是很少使用自底向上的方法,不过当数据集较为庞大的时候或多或少用到该方法的思想,比如先抽取一些属性,初步组合成一些实体供后续分析使用。


    3.关于数据库中的命名


    可能较为严格的命名约定会让人头疼,甚至为了一个表或者属性的名称简明思议绞尽脑汁,但是正真做到这样的约束带来的好处会让人成为命名约定的忠实粉丝。

  • 使用描述性的词语来命名表,属性名,管理关系等

  • 复合实体命名通常可以描述所表示的关系

  • 避免数据库系统的关键词作为命名名称

  • 所有的命名规则做到统一


   4.主码(数据库表主键)的选择原则

   

主码特征 描述
唯一性 唯一的识别一个实体实例(数据库表的一条记录),值不能为空
非智能(不含具体语义) 无实际语义(如学生学号),含有语义的属性更适合描述实体特征
不随时间变化 比如姓名,婚姻状况,地址,手机号码等都可能变化,应该选择永久不变的
最好单属性 非必须,但最好,单属性可以简化外键的实现和应用程序编码
最好是数值类型 数值类型便于管理,方便数据库实现计数,自增等功能
安全编码 不能存在安全风险,如身份证号码作为住码则有可能被碰撞检测到数据

   



本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1663448,如需转载请自行联系原作者

相关文章
|
9月前
|
SQL 存储 Oracle
Oracle数据库中日期的操作、主键自增与分页查询
Oracle数据库中日期的操作、主键自增与分页查询
79 0
|
5月前
|
Oracle 关系型数据库 数据库
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
46 1
|
7月前
|
关系型数据库 数据库 数据库管理
关系型数据库中的主键和外键
关系型数据库中的主键和外键
|
8月前
|
算法 NoSQL 关系型数据库
数据库主键一定要自增吗?有哪些场景不建议自增?
数据库主键一定要自增吗?有哪些场景不建议自增?
278 0
|
8月前
|
数据库 OceanBase
在OceanBase数据库中,当使用主键自增功能插入一条带有主键的数据
在OceanBase数据库中,当使用主键自增功能插入一条带有主键的数据
1120 1
|
9月前
|
存储 数据采集 自然语言处理
手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实体识别、Cypher Cheetsheet详细教学等
手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实体识别、Cypher Cheetsheet详细教学等
手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实体识别、Cypher Cheetsheet详细教学等
|
10月前
|
SQL Java 关系型数据库
数据库表主键类型设计踩坑记录
数据库表主键类型设计踩坑记录
60 0
|
10月前
|
算法 安全 Java
数据库如何合理生成主键:UUID、雪花算法
1.使用自增主键的弊端 首先在实际工程中我们很少用1,2,3......这样的自增主键,原因如下: 主键冲突 性能问题 安全问题 主键冲突: 比如我要跨数据库进行数据同步、或者在分布式系统中跨“分区”进行数据同步,不难想象,1,2,3......这种递增的单数字是极容易产生冲突的。
241 0
|
10月前
|
Java 数据库 Spring
数据库|Spring·JPA设置复合主键
数据库|Spring·JPA设置复合主键
359 0
|
10月前
|
算法 关系型数据库 MySQL
数据库主键
数据库主键
101 0