数据库70多张表设计的一些思考…

昨天在一次研讨会上,一同志说他为甘肃某高校做了一个建筑部门的管理网站用了足足70多张表,我一听一惊,随口来句,这哥们扯吧!

我认为学校的单个部门业务不论多么复杂,这么多表也并不利于实际系统开发,况且单个部门也不可能有那么复杂的业务。那么站在这哥们的角度理解,理由只有一个,他把表拆分的非常的细致,单个表字段很少,功能非常单一。

好像也可以理解,但是70多个表,俺从业多年几乎也没有见过几个如此庞大的工程。总是感觉怪怪的,于是总想从理论上分析下他的这样设计是否合理。数据库设计相信大部分开发人员都知道要遵守设计范式咯,这部分内容可以参考我的上篇范式文章,那么我能否从范式着手,做个分析呢?问题来了,我也有些困惑了,下面讲讲得出的结论:

范式作为数据库设计的理论基础,其实并不完善,有些情况不适合实际开发。范式的指导原则是尽量做到清晰、简单、明了,把复杂的关系给拆简单了。但是问题出来了,实际开发要考虑高效,简捷,尽量避免多表查询。而这一原则恰恰和范式理论冲突,那么如何去做呢?我想每个人都会有不同的做法,当然最重要的是自己工作经验的积累,和对实际业务的了解,去设计真正适合自己的数据库结构。

这是一位高人的说法:

所谓范式指的是设计高效的方便扩展数据库的准则,但是实际之中也只是作为一个参考,因为按照标准设计范式,查询很复杂,效率不高,不一定适合实际开发。那么实际的工作之中,对于实际数据库设计只有一个原则:“根据业务尽可能的减少多表查询”。

最后,对于70多张表的哥们来说,只能说符合范式的简单化,但是实际中70多个表的多表联合查询对于开发人员来说并不是一个good idea。

欢迎大家一起讨论…

时间: 2024-08-29 07:21:22

数据库70多张表设计的一些思考…的相关文章

SQL编程实例:Access数据库,两张表的统计,count、sum聚合函数的使用,iif的使用,group by的使用

小媛在努力 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 在多媒体数据处理中,数据压缩算法尤为重要.小媛上完课后就想自己发明一个数据压缩算法.她想呀想,终于想到一个方法.在多媒体数据中有很多数据都是重复的,所以她想把连续相同的数据用数据出现的次数和数据本身表示.例如:1 1 1 2 3 3 3 3 3  压缩后及为3 1 1 2 5 3(表示3个1,1个2和5个3).有想法后小媛就希望把它用代码实现了.但是大家都知道小媛现在整天都忙着苦B的复习考研,连电脑都摸不到

查询MySQL中某个数据库中有多少张表

SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES   WHERE table_schema = '数据库' GROUP BY table_schema; 这还是头一次接触information_schema这个数据库, information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式.什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等.有些时候用于表

(二)mysql:在w3schools文档上学习sql语法(使用数据库创建一张表)

1.选中要使用的数据库(选中上篇创建的test数据库) 现有的数据库 mysql>use test; 则选中test数据库: 2.创建一张表 2.1column代表每一列的名称,datatype代表每一列的数据类型(可用数据类型:https://www.w3schools.com/sql/sql_datatypes.asp) 2.2创建表 mysql> create table Persons( -> PersonID int, -> LastName varchar(255),

数据库中两张表之间的数据同步实现思路(增加、删除、更新)Mysql、sqlserver

分别创建增加.删除.更新的触发器(Trigger)来达到两张表之间数据同步的目的. 1:数据同步增加:如有两张表--A表和B表,创建触发器使当A表插入数据后B表也同步插入数据.其中B表插入数据的字段需要同A表中的字段相对应. CREATE TRIGGER 触发器名称 ON A表 AFTER INSERT AS BEGIN INSERT INTO B表(B表字段1,B表字段2,B表字段3) SELECT A表字段1,A表字段2,A表字段3 FROM INSERTED END 2.数据同步删除:如有

update忘了加where条件,不小心把oracle数据库里某张表的全表数据都更新了怎么办?

问题描述:数据库突然出问题了,一张物资价格表全部更新成了同一个价格,13万条数据 跟大家分享一下我自己跳的坑,希望对遇到类似问题的小伙伴有一点点帮助.ps:属于技术比较low的,所以自己进的坑比较深,解决方法可以直接看6和8 1.首先客户有数据库备份,每天凌晨都有数据库备份,我们没有dba权限,客户通过数据库监控日志查出18号有一个13万数据的update没有加where条件,给了我备份的数据库文件. 2.创建了新的表空间,表用户,导入18号的数据库(我的电脑上装了oracle服务) eg:创建

oracle查询一个数据库有几张表

登录sys用户后通过user_tables表查看当前用户下表的张数.sql:conn / as sysdba;sql:select count(*) from user_tables ;解释:必须是登录到系统的超级用户后后,通过上面sql读取出"用户表"中记录的行数(每个表会有一条记录),即为当前数据库下的表张数.

PHP学习日记-检查数据库中某张表是否存在

直接上码 <?php ////////// // $find_table 要查找的表名 // $database 已经连接的数据库句柄 function check_table_is_exist($find_table,$database) { $sqlExce = "show tables "; // to show databases $row = mysql_query($sqlExce,$database); while ($result = mysql_fetch_ar

关系型数据库中常用的表设计

1.字典表(sys_dict) 作用:用于存放多组值不变的基础数据,只对系统提供查询功能. *记录的新增.更新.删除都是通过手动进行操作. *其中dict_code为dict_title的编码,相同dict_title的记录为同一组基础数据,每组基础数据下又有多对dict_value与dict_name. *每组基础数据可以根据实际的业务需求在程序中创建对应的枚举类(value和name属性). 2.系统配置表(sys_config) 作用:用于存放系统的配置项,某些业务逻辑需要根据配置项的值来

db2数据库创建一张表,并为该表加上主键递增的性能和中间表的创建的sql语句

创建角色表 CREATE TABLE NBCTXP.TBL_NBC_NONBANKROLE (    ID BIGINT NOT NULL,    ROLENAME VARCHAR(50),    CREATETIME TIMESTAMP,    UPDATETIME TIMESTAMP,    CONSTRAINT P_ID PRIMARY KEY (ID)); CREATE INDEX SQL150130091455900 ON NBCTXP.TBL_NBC_NONBANKROLE (ID)