数据库设计中,动态添加字段

去面试,拿出了笔试题,让一个个讲思路。

因为之前笔试时就不会,能让去面试,已很诧异。看面试官的状态,以为只是HR面。结果,悲剧了,技术面。

笔试之后,尽管知道笔的稀烂无比,但是没能回来进行总结和思考。这次面试挂,也是死有余辜。

下面开始说,提到的一题。就是动态添加字段。

比如,有用户信息,用户名,年龄。后来,需要添加用户单位。怎么来实现?

方法一:直接alter,这是最容易想到的。但是,在数据库设计中 ,这个应该是一大忌。而且面试官要求不改变表结构。那好,想出来方法二。

方法二:可以建一个表,表设计为 用户ID 和工作单位。这个方法,面试官说,可以。但是,还有其他方法。绞尽脑汁也没想出来,问猪头,猪头说了种方法。即方法三。

方法三:可以设计个 用户信息表

   表设计为

   用户ID 属性名 值

   内容为 
   1 姓名 男
   1 年龄 19
   1 工作单位 XXX

   然后建个表,存属性

比如 1 姓名 
      2 年龄
      3 工作单位

那刚才那个 表的设计 就可以变成
     1 1 男
     1 2 19
     1 3 XXXX
 
 唯一约束,放在第一列和第二列,索引建好,就好了。
 
这个题目,和行转列就有些相似了,行转列的问题,曾经思考过,猪头也做了解释,可惜貌似有点不懂。
 行转列
为什么要在第一列
就是用户ID建聚集索引
就是 聚集索引 和数据 物理存储关系 我就不说了
你网上可以自己查
 第二列的ID 是可以一直往里加的
 磁盘指针取数据
先找索引表
找到后 数据都在 物理地址后面
直接取就可以了
这样 性能几乎等同
数据在一列的 性能
 
 
 第二个问题 时间 参数1 参数2 参数3 …… 参数n

根据年 月 周 查询 某个参数的值 ps:需要高效查询 

主要优化 这个 年月周额
题目 意思
参数1  -N 什么的忽略不急
忽略不计
主要 要进行时间拆分

年 月 拆分为8位整形 
因为日不要 查询
周要算 放如一列
建好索引
可以了

不分库?

大学题目 考虑 啥分库啊
我还 分布式呢
我还 集群数据库呢

关于第二个题,看了猪头的回答,也不想泼他冷水,就先这样吧
posted on 2012-12-04 22:20  Ming明、  阅读(9052)  评论(1编辑  收藏  举报