数据库问题:【站内发送消息】如何设计表结构
1) 不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之 间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表 结构的重构提供可能性。
2)采用领域模型驱动的方式和自顶向下的思路进行数据库设计,首先分析系统业务,根据职责定义对象。对象要符合封 装的特性,确保与职责相关的数据项被定义在一个对象之内,这些数据项能够完整描述该职责,不会出现职责描述缺失。并且一个对象有且只有一项职责,如果一个 对象要负责两个或两个以上的职责,应进行分拆。
3)根据建立的领域模型进行数据库表的映射,此时应参考数据库设计第二范式:一个表中的所 有非关键字属性都依赖于整个关键字。关键字可以是一个属性,也可以是多个属性的集合,不论那种方式,都应确保关键字能够保证唯一性。在确定关键字时,应保 证关键字不会参与业务且不会出现更新异常,这时,最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字。
4)由于第一点所述的领域模型驱动的方式设计数据库表结构,领域模型中的每一个对象只有一项职责,所以对象中的数据项不存在传递依赖,所以,这种思路的数据库表结构设计从一开始即满足第三范式:一个表应满足第二范式,且属性间不存在传递依赖。
5)同样,由于对象职责的单一性以及对象之间的关系反映的是业务逻辑之间的关系,所以在领域模型中的对象存在主对象和从对象之分,从对象是从1-N 或N-N的角度进一步主对象的业务逻辑,所以从对象及对象关系映射为的表及表关联关系不存在删除和插入异常。
6) 在映射后得出的数据库表结构中,应再根据第四范式进行进一步修改,确保不存在多值依赖。这时,应根据反向工程的思路反馈给领域模型。如果表结构中存在多值 依赖,则证明领域模型中的对象具有至少两个以上的职责,应根据第一条进行设计修正。第四范式:一个表如果满足BCNF,不应存在多值依赖。
7) 在经过分析后确认所有的表都满足二、三、四范式的情况下,表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构。并且,我认为数据库中的表 是用来持久化一个对象实例在特定时间及特定条件下的状态的,只是一个存储介质,所以,表和表之间也不应用强关联来表述业务(数据间的一致性),这一职责应 由系统的逻辑层来保证,这种方式也确保了系统对于不正确数据(脏数据)的兼容性。当然,从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数 据,单从另一个角度来说,脏数据的产生在一定程度上也是不可避免的,我们也要保证系统对这种情况的容错性。这是一个折中的方案。
8)应针 对所有表的主键和外键建立索引,有针对性的(针对一些大数据量和常用检索方式)建立组合属性的索引,提高检索效率。虽然建立索引会消耗部分系统资源,但比 较起在检索时搜索整张表中的数据尤其时表中的数据量较大时所带来的性能影响,以及无索引时的排序操作所带来的性能影响,这种方式仍然是值得提倡的。
9) 尽量少采用存储过程,目前已经有很多技术可以替代存储过程的功能如“对象/关系映射”等,将数据一致性的保证放在数据库中,无论对于版本控制、开发和部 署、以及数据库的迁移都会带来很大的影响。但不可否认,存储过程具有性能上的优势,所以,当系统可使用的硬件不会得到提升而性能又是非常重要的质量属性 时,可经过平衡考虑选用存储过程。
10)当处理表间的关联约束所付出的代价(常常是使用性上的代价)超过了保证不会出现修改、删除、更改 异常所付出的代价,并且数据冗余也不是主要的问题时,表设计可以不符合四个范式。四个范式确保了不会出现异常,但也可能由此导致过于纯洁的设计,使得表结 构难于使用,所以在设计时需要进行综合判断,但首先确保符合四个范式,然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法。
11)设计出的表要具有较好的使用性,主要体现在查询时是否需要关联多张表且还需使用复杂的SQL技巧。
12)设计出的表要尽可能减少数据冗余,确保数据的准确性,有效的控制冗余有助于提高数据库的性能。
要修改数据库表结构,通常需要使用数据库管理系统(DBMS)提供的特定工具或应用程序进行操作。这些工具和应用程序通常被称为数据库管理工具或数据库管理客户端。
具体来说,要修改某数据库的表结构,需要使用该数据库的管理工具或客户端连接到该数据库,然后使用该工具或客户端提供的界面和功能进行表结构修改操作。在进行修改操作之前,需要进行一定的权限验证,以确保当前用户有足够的权限对表结构进行修改。
通常情况下,数据库管理工具和客户端都支持多种方式进行连接和打开数据库,包括但不限于以下几种方式:
直接连接到本地或远程数据库服务器并打开数据库;
通过ODBC或JDBC等标准接口连接到数据库服务器;
通过Web界面或云服务提供商提供的管理界面进行操作。
需要注意的是,在进行表结构修改操作之前,应该先备份数据库,以防出现不可预料的错误或数据丢失等情况。
1 discuz数据库表结构 2 解决CKEditor内容中文 sort tinyint(1) 否 0 菜单类型\n(0:历史操作 cdb_adminnotes后台管理公告表 表说明:记录后台管理
怎样检视一个数据库里面的所有表?怎样查看表的结构和变数属性?
在查询分析器中,开启物件浏览器(通过F8开启或关闭),展开使用者表,就可以检视所有的表和列。
另外,也可以这样通过查询语句查询所有使用者表及其构:
SELECT TABLENAME=ANAME,FIELDNAME=BNAME,CNAME,BLENGTH FROM SYSOBJECTS A,SYSCOLUMNS B,SYSTYPES C WHERE AID=BID AND BXTYPE=CXTYPE AND ATYPE='U' ORDER BY ANAME
MS SQL 如何检视一个数据库中所有表的行数[摘要]本文介绍通过查询系统表sysobjects和sysindexes实现MS SQL 检视一个数据库中所有表的行数,并提供简单的示例程式码供参考。
--读取库中的所有表名
select name from sysobjects where xtype='u'
--读取指定表的所有列名
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')
获取资料库表名和栏位
sqlserver中各个系统表的作用
sysaltfiles 主资料库 储存资料库的档案
syscharsets 主资料库 字符集与排序顺序
sysconfigures 主资料库 配置选项
syscurconfigs 主资料库 当前配置选项
sysdatabases 主资料库 伺服器中的资料库
syslanguages 主资料库 语言
syslogins 主资料库 登陆帐号资讯
sysoledbusers 主资料库 连结伺服器登陆资讯
sysprocesses 主资料库 程序
sysremotelogins主资料库 远端登入帐号
syscolumns 每个资料库 列
sysconstrains 每个资料库 限制
sysfilegroups 每个资料库 档案组
sysfiles 每个资料库 档案
sysforeignkeys 每个资料库 外部关键字
sysindexs 每个资料库 索引
sy enbers 每个资料库 角色成员
sysobjects 每个资料库 所有资料库物件
syspermissions 每个资料库 许可权
systypes 每个资料库 使用者定义资料型别
select 列名=name from syscolumns where id=object_id(N'要查的表名')
sqlserver 中怎样检视一个数据库中表的关系
select bcolumn_name
from information_schematable_constraints a
inner join information_schemaconstraint_column_usage b
on aconstraint_name = bconstraint_name
where aconstraint_type = 'PRIMARY KEY' and atable_name = 'products'
go
参见::quanzhongiteye/blog/1675702
怎样检视一个php页面所提交后的到哪个资料库里面?如果要看他是到哪个资料库中就找这一句:mysql_select_db(资料库名),如果想看到哪个表中就找INSERT INTO 表名 。
如何检视一个数据库,所有表的最后更新时间1 增加列,标记资料更新时间。 2 增加触发器,当资料更新(插入时),更新资料更新标记
怎样检视oracle资料库中所有表oracle有自带的资料字典的
dba_tables(检视所有使用者下的表资讯)
all_tables(如果不是dba使用者登入的,看当前使用者以及所有可以看到使用者下的表资讯)
user_tables(检视当前使用者下所有表资讯);
你可以先desc 一下,看下你具体关心哪一个栏位
mysql 怎样检视资料库里的表可以使用命令列方式检视,也可以通过用资料库管理工具检视
show tables或show tables from database_name; — 显示当前资料库中所有表的名称。
怎样检视oracle资料库一个表的内容登陆到资料库后:
desc 表明; --查看表的结构
select from 表明; --查看表中的全部资料
怎样检视一个oracle资料库名称开启\oracle\product\1020\db_1\NETWORK\ADMIN\tnsnamesora 这个档案tnsnamesora里面能看到资料库名称
0条评论