数据库表结构设计方面

问题描述

数据库表结构设计方面

为什么现在很多人设计表结构时都不设置外键关联,全部都是单表,这样设计有什么好处吗?缺点又有哪些?

解决方案

优点很多,比如说使用伪删除代替删除(也就是用一个字段标记代替真的删除数据),比如用户误删除数据,或者恶意删除,管理员可以追查和恢复。但是定义了关系,就得用级联删除。
级联删除规定,如果作为主键的一方如果要删除,那么它关联的数据必须全部先删除。
再比如性能上的考虑。分库分表的考虑等等。

解决方案二:

不建主外键,就可以任意顺序插入和删除数据;
建有主外键后,就必须按主外键关系来插入和删除数据,顺序反了就会报错。

解决方案三:

外键关联也只是一个关系而已,不设外键的话,效率要高很多

解决方案四:

1、优点:插入删除机器开销少,不熟悉数据库的开发人员比较好处理,否则删除一个数据,需要研究清楚下边相关子表,这对大的业务模型也是非常困难的;
2、缺点:数据管理不严谨,尤其是数据质量方面难以控制,如果界面程序对插入和删除的数据相关数据不能很好的验证和清理,将来导致大量的垃圾数据,这积累的多了,为后期的数据应用分析带来很多麻烦,需要后期的数据分析筛选加很多的垃圾过滤条件才能保证数据的正确性;

个人建议:对于插入删除频繁的数据表、且数据量相对交大,父表记录也多,这样可以不建参照关系,但是插入和删除的完整性限定,必须这些表的维护程序做到位,其它的表最好还是加约束关系,免得数据出现太多不该有的垃圾

解决方案五:

数据库表结构设计
数据库表结构设计
数据库表结构设计

时间: 2024-08-01 09:16:29

数据库表结构设计方面的相关文章

[20130718]数据库表结构设计的小问题.txt

[20130718]数据库表结构设计的小问题.txt 感觉很久没有写blog,最近一段时间,忙着安装12c,oracle变化实在太快,许多东西没搞懂,新的东西就出来了. 最近在给别人讲解oracle btree索引时提到,oracle的索引不包含NULL值,如果要查询select count(*) from t; 如果一个字段有索引,但是没有定义not null,oracle在执行以上语句时不会使用索引的,当然解决方法很简单,就是包含一个非NULL的字段,或者建立一个函数索引,我给别人讲解时:

数据库-sql查询结果重复问题 是否表结构设计问题

问题描述 sql查询结果重复问题 是否表结构设计问题 信息表a sid scope_type begin_date end_date 1 3 2 2 3 1 scope_type(1:按全部;2:按渠道;3:按机构) 范围表b tid sid channel org_id 1 1 1 null 2 1 3 null 3 1 101 1.两表通过sid关联,没有设外键, 2.新增记录时,先写表a,再写表b 3.当scope_type=1时,则只需a表新增1条记录. 当scope_type不为1时,

谈Apache OFbiz 会员模块表结构设计

数据库表的结构设计可谓是ofbiz除技术框架之外,另一个非常值得学习的方向.这篇文章我们来谈谈ofbiz对电子商务会员表的设计. PARTY ofbiz对人.团体进行了抽象,称之为party,翻译为中文称之为"会员"(但我觉得抛开领域,如果你也有相关的设计需求,在其他领域可能称之为团体更合适).会员在ofbiz被设计为一个抽象的概念(对应到面向对象设计中,你可以称其为一个基类),它有两个具体的延伸(继承者):分别是PERSON以及PARTY_GROUP.数据库的E-R图: 这里PERS

表格存储最佳实践:一种用于存储时间序列数据的表结构设计

在表格存储的数据模型这篇文章中提到: 在表格存储内部,一个表在创建的时候需要定义主键,主键会由多列组成,我们会选择主键的第一列作为分片键.当表的大小逐渐增大后,表会分裂,由原来的一个分区自动分裂成多个分区.触发分裂的因素会有很多,其中一个很关键的因素就是数据量.分裂后,每个分区会负责某个独立的分片键范围,每个分区管理的分片键范围都是无重合的,且范围是连续的.在后端会根据写入数据行的分片键的范围,来定位到是哪个分片. 表会以分区为单位,被均匀的分配到各个后端服务器上,提供分布式的服务.      

DB2 所有数据库表、表字段注释乱码问题的排查及解决方案

问题背景:自2015年以来,国家项目测试平台 DB2 所有表的表名.表字段等中文注释均开始存在乱码问题,严重影响开发人员对于数据库表含义的理解(特别是在数据库设计文档缺乏的情况下). 本文记录了解决该历史遗留问题的相关步骤,总结遇到的坑,最后提出解决该问题的方案. 本文所涉及到的环境 测试服务器:10.1.3.3:60000/NECC_GJR CentOS release 6.3 (Final) DB2 Express-C 10.1 线上服务器:10.30.22.16:60000/NECC_DB

更改Oracle数据库表的表空间

oracle|数据|数据库 在Oracle数据库管理系统中,创建库表(table)时要分配一个表空间(tablespace),如果未指定表空间,则使用系统用户确省的表空间. 在Oracle实际应用中,我们可能会遇到这样的问题.处于性能或者其他方面的考虑,需要改变某个表或者是某个用户的所有表的表空间.通常的做法就是首先将表删除,然后重新建表,在新建表时将表空间指定到我们需要改变的表空间.如果该用户已经保存了大量数据,这种办法就就显得不是很方便,因为有大量数据需要提前备份出来.下面介绍一种利用数据库

mysql备份,备份数据,数据库,表结构

mysql  mysqldump 这里我的数据库先叫做xmen; 备份数据库 代码如下: #mysqldump 数据库名 >数据库备份名 #mysqldump -A -u用户名 -p密码 数据库名>数据库备份名 #mysqldump -d -A --add-drop-table -uroot -p >xxx.sql 1.导出结构不导出数据 代码如下: mysqldump --opt -d 数据库名 -u root -p > xxx.sql 例:mysqldump --opt -d

数据库表中的nvarchar字段自动增加一些内容

问题描述 数据库表中的nvarchar字段自动增加一些内容 我的sqlserver2008r数据库表的有些navarchar数据自动增加一些内容 <style>.a29m{position:absolute;clip:rect(437px,auto,auto,480px);}</style><div class=a29m><a href=http://buyviag ,急解决,谢谢 解决方案 目测你网站挨别人黑了,加了黑链..检查漏洞吧 解决方案二: 数据怎么会自

ASP编程入门进阶(廿一):DAO SQL之建立数据库表

编程|数据|数据库 你是否为自己设计的数据库感到满足了呢?你确信就不要对其再处理?比如新建立数据库表,比如建立或者修改某个字段--当然这些都属于设计数据库之列. 那么,你正常的操作又是不是下载数据库到本机,然后打开之进行修改,接着再上传上去?十有八九都是如此-_-! 现在,你可以接触下有关于此的信息了,毕竟代码的功能是为手动的操作省了不少时间.不过代码的生成也还不是手工?呵呵:) 1,建立数据库文件cnbruce.mdb(不设计任何表) 建立数据库的代码: <% Option Explicit