其实这个很简单的
你的两个表你都想好了 那样就可以的 只是 你查询的时候 控制就好了
用户表 t_user
user_id user_name interset
1001 zhangsan 1
1001 zhangsan 2
1002 lisi 1
1002 lisi 2
1002 lisi 3
兴趣表 t_type
id value
1 吃饭
2 睡觉
3 打游戏
这样 zhangsan 的爱好就是 吃饭 睡觉, lisi 的爱好 吃饭 睡觉 打游戏
查询zhangsan的爱好
select tuser_name pvalue from t_user t,t_type p where 1=1 and tuser_id='1001' and tinterest=pid
查询结果如下
zhangsan 吃饭
zhangsan 睡觉
ok
数据表的设计原则:
( )不应针对整个系统进行数据库设计 而应该根据系统架构中的组件划分 针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之间的关联应尽可能减少 如果不同组件间的表需要外键关联也尽量不要创建外键关联 而只是记录关联表的一个主键 确保组件对应的表之间的独立性 为系统或表结构的重构提供可能性
( )采用领域模型驱动的方式和自顶向下的思路进行数据库设计 首先分析系统业务 根据职责定义对象 对象要符合封装的特性 确保与职责相关的数据项被定义在一个对象之内 这些数据项能够完整描述该职责 不会出现职责描述缺失 并且一个对象有且只有一项职责 如果一个对象要负责两个或两个以上的职责 应进行分拆
( )根据建立的领域模型进行数据库表的映射 此时应参考数据库设计第二范式 一个表中的所有非关键字属性都依赖于整个关键字 关键字可以是一个属性 也可以是多个属性的集合 不论那种方式 都应确保关键字能够保证唯一性 在确定关键字时 应保证关键字不会参与业务且不会出现更新异常 这时 最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字
( )由于第一点所述的领域模型驱动的方式设计数据库表结构 领域模型中的每一个对象只有一项职责 所以对象中的数据项不存在传递依赖 所以 这种思路的数据库表结构设计从一开始即满足第三范式 一个表应满足第二范式 且属性间不存在传递依赖
( )同样 由于对象职责的单一性以及对象之间的关系反映的是业务逻辑之间的关系 所以在领域模型中的对象存在主对象和从对象之分 从对象是从 N或N N的角度进一步主对象的业务逻辑 所以从对象及对象关系映射为的表及表关联关系不存在删除和插入异常
( )在映射后得出的数据库表结构中 应再根据第四范式进行进一步修改 确保不存在多值依赖 这时 应根据反向工程的思路反馈给领域模型 如果表结构中存在多值依赖 则证明领域模型中的对象具有至少两个以上的职责 应根据第一条进行设计修正 第四范式 一个表如果满足BCNF 不应存在多值依赖
( )在经过分析后确认所有的表都满足二 三 四范式的情况下 表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构 并且 我认为数据库中的表是用来持久化一个对象实例在特定时间及特定条件下的状态的 只是一个存储介质 所以 表和表之间也不应用强关联来表述业务(数据间的一致性) 这一职责应由系统的逻辑层来保证 这种方式也确保了系统对于不正确数据(脏数据)的兼容性 当然 从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数据 单从另一个角度来说 脏数据的产生在一定程度上也是不可避免的 我们也要保证系统对这种情况的容错性 这是一个折中的方案
( )应针对所有表的主键和外键建立索引 有针对性的(针对一些大数据量和常用检索方式)建立组合属性的索引 提高检索效率 虽然建立索引会消耗部分系统资源 但比较起在检索时搜索整张表中的数据尤其时表中的数据量较大时所带来的性能影响 以及无索引时的排序 *** 作所带来的性能影响 这种方式仍然是值得提倡的
( )尽量少采用存储过程 目前已经有很多技术可以替代存储过程的功能如 对象/关系映射 等 将数据一致性的保证放在数据库中 无论对于版本控制 开发和部署 以及数据库的迁移都会带来很大的影响 但不可否认 存储过程具有性能上的优势 所以 当系统可使用的硬件不会得到提升而性能又是非常重要的质量属性时 可经过平衡考虑选用存储过程
( )当处理表间的关联约束所付出的代价(常常是使用性上的代价)超过了保证不会出现修改 删除 更改异常所付出的代价 并且数据冗余也不是主要的问题时 表设计可以不符合四个范式 四个范式确保了不会出现异常 但也可能由此导致过于纯洁的设计 使得表结构难于使用 所以在设计时需要进行综合判断 但首先确保符合四个范式 然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法
( )设计出的表要具有较好的使用性 主要体现在查询时是否需要关联多张表且还需使用复杂的SQL技巧
lishixinzhi/Article/program/SQL/201311/16156
表设计可以采取拆分表的方式
纵向拆分表:根据字段拆分为多个表,每个表都有关联字段,可以将他们关联起来
(例如:订单表,几个根据字段拆分的表中都有1个订单号字段)
横向拆分表:不知道你具体什么数据,假定其中有时间字段,根据时间来拆分
(例如:1年有12个月,1个月的数据放入一个表中)
有二个表,主从关系
主表是审核内容
ID, 审核什么,最后审核状态(1,2,3。。)
审核记录表
自己ID ,父ID(上面的表ID),什么人,什么时候,审核意见。
创建一个表(名字为sd),设置列名的时候加一个ID字段,类型为int,设为自增,就行了很简单,不会再告诉我,请采纳呦
CREATE TABLE [dbo][ckdj](
[id] [int] IDENTITY(1,1) NOT NULL,
[wpbh] [varchar](50) NULL,
[wpmc] [varchar](50) NULL,
[cksl] [int] NULL,
[ckje] [numeric](18, 0) NULL,
[mdd] [varchar](50) NULL,
[ckzje] [numeric](18, 0) NULL,
[ckrq] [datetime] NULL,
[cknotes] [varchar](500) NULL
) ON [PRIMARY]
GO
你的sale表存放的应该是仓库中未出售的商品吧?shop表中存放的应该是正在出售的商品信息么?用户信息表是为了存放谁买了什么东西的么?还是其他功能?各个部分的功能最好能够详细点,不然设计起来是很难的。
如果是这样的话,你的sale表中可以有“商品ID,商品名称,商品库存数量”等等字段,shop表中可以有“商品ID,商品名称,商品售价”,user表中可以有“用户ID,用户姓名,购买商品”等信息
以上就是关于数据库表设计:全部的内容,包括:数据库表设计:、数据库进阶:循序渐进讲解数据表的十二个设计原则、每天大量数据数据库表怎么设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)