数据库设计,如何实现属性的可配置?

问题描述

比如有个Book表,有id, name, isbn等列表示基本信息,但是不同的商家对Book表有不同的其他需求,有的还需要A属性,有的则还需要B属性,或者说某一天随着需求变化,我们要扩展Book的信息,但又不希望以加列的方式更改Book表,应如何设计呢?考虑了一下,可以另外创建两个表,一个叫做ColumnExtend, 一个叫做BookDetail表,ColumnExtend里面列有id, columnName,datatype列,BookDetail则有id, columnExtendId, BookId,varcharValue, numberValue, .....等列ColumnExtend只是被扩展的一个属性的描述,说明Book表扩展的属性的名称,类型,而BookDetail表里则含有id(主键), columnExtend的id(说明是哪一个扩展属性),BookId(哪本书),value(值是什么)由于事先不知道被扩展的属性的类型,所以值的列就很多了,有varcharValue, numberValue.....一大堆。这样当新扩展一个属性的时候,往ColumnExtend表里加一条记录,同时对于每一本书来说还需要在BookDetail里面要插入一条数据(默认值)。这样数据多了的时候,会很麻烦,效率极其低下。而且觉得维护BookDetail中的vacharValue, numberValue, clob, blob,等等一大堆列也是个问题。。。希望各位指点迷津,有更好的解决方法不吝赐教

解决方案

其实如果想把业务系统产品化就需要对业务高度抽象化 你不应该去适应个别业务 应该让业务适应你或者你就不要做业务系统 做业务框架引擎 所有的表单和数据库都动态生成 然后进行2次开发 类似于freemarker 呵呵
解决方案二:
你的方案是,为了避免对横表形式的主表增加过多的字段(而有些字段不是所有的记录都需要的,有可能一半以上的记录该字段是空的,这个是我的一点经验),增加了纵表形式的扩展表,这样做事无可厚非的,记得看JBPM3源码的时候,那里也有类似的东西。另外,以前做过的一个项目,主表记录4KW+,扩展表就有几个亿的记录了,另外杂七杂八的相关表有6、7张。至于性能问题,是可以做优化的,索引,符合索引,分区,分表,分库,sql优化,等等。和横表维护相比,纵表的维护是麻烦点,但是,做好了也是比较有成就感的。见的多了,就不怕麻烦了。

时间: 2024-09-17 04:35:55

数据库设计,如何实现属性的可配置?的相关文章

ASP.net文章管理系统:数据库设计与配置

asp.net|设计|数据|数据库|数据库设计 本系统采用Access 2003数据库系.在该应用程序的根目录使用Access 2003新建数据库Articlesys_db.mdb,根据系统需要,数据库中的数据表包括下面三个:     相关文章:ASP.NET文章管理系统:系统分析与设计     akinds数据表:用于存放文章类别信息,包括文章类别ID和文章类别信息,表结构和字段信息如图14.4所示. 图14.4 akinds数据表     articles数据表:用户存放文章的信息,包括文章

数据表设计-数据库设计:数据表的对象的属性

问题描述 数据库设计:数据表的对象的属性 问题比较简单, 在某个地区有A1.B.C.D.E等区域District,每个区域中又分几个小区域Region(如东西南北),在程序设计中,每个Region中都有两个属性(一个是工作完成的日期,一个是此Region所属的District),然后此Region中就是它每一天所对应的工作数据, 另一方面,每个District对象中也有一些属性值,这此"属性"下都只有一个值. 我想问一下,这样的结构应该怎样来设计数据库? District和Region

中小型商城系统中的分类/产品属性/扩展属性的数据库设计

声明:之所以定位在"中小型"商城系统,而非"大型"(指淘宝.拍拍这类巨无霸),理由很简单----我一直都呆在(创业型的)小公司,没见过这些大家伙是怎么设计的:)   正文: 之前发表过一篇"商城系统中[商品扩展属性]的表单生成及客户端验证",部分童鞋对于后台数据库的设计比较感兴趣,于是今天把这部分也补上.   一.产品分类设计越来越多的商城系统都热衷于选择"无限级分类"的设计,我也不例外,因为它方便扩展.这部分就不详细展开了,

数据库设计中的敏捷方法

引言 在过去几年中,我们将敏捷方法应用于数据库设计中.我们总结出一些技巧,使得当应用程序 发展时,数据库也能够进化,这是敏捷方法的一个重要属性.我们的方法是通过持续集成以及自动重构, 通过数据库管理人员(DBA)和应用开发人员的紧密合作.这些技巧在应用开发的各个时期都有效. 1 敏捷方法学 近年来,出现了一种新的软件开发方法学-敏捷方法学.这给数据库设计提出了一些新的.巨大的需 求.这些需求的一个中心就是进化设计.在一个敏捷项目中,需要假定我们并不能事先确定系统的需求. 因此在项目的初期有一个详

数据库设计指南之我见

网上流传着一份关于数据库设计的文档<数据库设计指南>收集了几十个数据库设计大牛在项目中总结出来的Best Practice最佳实践,我最近也花了点时间细读并结合自身实际进行了总结,感觉自己在项目中还是有不少不足的地方,下面逐条分析下.(黑字为原文,红字为我的见解) 数据库设计指南 如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分.有关数据 库设计的材料汗牛充栋,大学学位课程里也有专门的讲述.不过,就如我们反复强调的那样,再好的 老师也比不过经验的教诲.所以我们最近

DB2 V10.1多温度数据管理:针对多温度数据的数据库设计

当为多温度数据设计数据库时,本文推荐的主要原则是将热.暖.冷和休眠数据物理地分开,将不同的温度层隔离在不同的存储组中.将热数据和暖数据放在最快的存储上的表空间中,将冷数据和休眠数据放在更廉价.更慢的存储设备上的表空间中.这种类型的数据库设计使所有数据均可访问,还通过为很少访问或很少更新的数据使用更低成本的存储来优化了性价比平衡. 通过基于数据的温度来将其存储在表空间中,将热.暖.冷和休眠数据物理地分开.将热数据存储在最快的存储设备上,将暖数据存储在快速的存储设备上,将冷和休眠数据存储在较慢的存储

DB2数据仓库环境的物理数据库设计:简介

良好的http://www.aliyun.com/zixun/aggregation/8302.html">数据仓库设计是最大程度地提高和加速数据仓库实现的投资回报的关键所在.良好的数据仓库设计能带来在可伸缩性.平衡性.灵活性方面都足以满足当前和未来需求的数据仓库.按照本文中提供的最佳实践建议,您可以在设置数据仓库时保证高效的查询性能.简化的维护和健壮的恢复选项,从而获得长期成功. 数据仓库设计分为两个阶段:设计逻辑数据模型和设计物理数据模型. 数据仓库设计的第一个阶段是创建逻辑数据模型,

恭迎万亿级营销(圈人)潇洒的迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计

标签 PostgreSQL , 标签 , 推荐系统 , 实时圈人 , 数组 , gin , gist , 索引 , rum , tsvector , tsquery , 万亿 , user , tag , 淘宝 背景 我们仅用了PostgreSQL的两个小特性,却解决了业务困扰已久的大问题. 推荐系统是广告营销平台的奶牛,其核心是精准.实时.高效. 这么多广告平台,到底谁家强?谁的核心牛逼? 1. 精准,指对用户的描述精准,通常需要基于大量的用户行为数据,经历深度学习后形成的用户画像,或称之为标

数据库设计范式1——三范式

一讲到数据库设计,大家很容易想到的就是三范式,但是第四.第五范式又是什么,不是很清楚,三范式到底怎么区分,也不清楚,作为数据库设计的基础概念,我再讲解下数据库范式. Normal form Brief definition 1NF First normal form Table faithfully represents a relation, primarily meaning it has at least one candidate key 2NF Second normal form N

数据库设计中的14个技巧

1. 原始单据与实体之间的关系  可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单据对应多个实体,或多张原始单据对应一个实体.这里的实体可以理解为基本表.明确这种对应关系后,对我们设计录入界面大有好处.  [例1]:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表.社会关系表.工作简历表.这就是"一张原始单据对应多个实体"的典型例子.  2. 主键