需求
存放“游戏资料数据”、“渠道资料”。
方案
我的方案
1.需要3张表 TB_GAME,TB_AGENT,TB_RELATION
2.表TB_GAME结构
GAMEID int 主键,SEQ序列递增
GAMENAME varchar2 (60)
3.表TB_AGENT 结构
AGENTID INT 主键,SEQ序列递增
PARENTID INT 索引,上级ID
AGENTNAME VARCHAR2(60)
4.表TB_RELATION 结构
ID INT 主键,SEQ序列递增
GAMEID INT 索引
AGENTID INT 索引
游戏GAME,渠道AGENT全部独立,关联关系全部存入到RELATION表。
每个表都必须加上主键,RELATION表的GAMEID AGENTID全部设置上索引。
DBA方案
1.仅需要2张表 TB_GAME,TB_AGENT
2.表TB_GAME结构
GAMEID INT
GAMENAME VARCHAR2(256)
3.表TB_AGENT结构
AGENTID INT
AGENTNAME VARCHAR2(256)
PARENTID INT
GAMEID INT
AGENT与GAME是一对一,比如有一个游戏叫“三国”,他的渠道是“百度”,然后又有一个游戏叫“mm”,他的渠道也是百度,那么渠道表AGENT就会有两条记录,他们的AGENTNAME都是=百度。
而且如果一个主渠道(TB_AGENT.PARENTID=0)ID为 1001,那么他子渠道(TB_AGENT.PARENTID=1001)的所有子渠道的ID都是以1001 开头,这样不会导致重复吗?
Oracle存在自动递增序列,为什么不能用自动递增?
比如一个主渠道他的ID是 1005,他已经有一个子渠道 10052025,那么如果再给他新增一个子渠道。那么新增这个子渠道的ID是这样算的,先得到他父ID,和该父ID下的子渠道ID中ID最大的那个。10052025中去掉ID1005剩下2025,再2025+1,就得到了2026,拼接上父ID 1005,那么他的ID就是 10052026。为什么这样设计更优越。。。
疑问
我认为这样存在的不足
为什么说第二种DBA设计方案更优越?为什么很多程序员会用手动拼接主键ID?
为什么DBA设计的表没有一个字段上加了索引、主键、或者唯一,还是说oracle加了主键索引跟没加没有多大区别?
加索引的目的是加快查询速度,但是会增加容量。
DBA不加索引我的认为的可能是这个表本身数据就不多,无所谓加不加索引。
虽然第一种方案看上去结构更清晰,但是当联表查询的时候尽量会要求表越少表越好。