`
fengpeng
  • 浏览: 100325 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用于保存对象boolean属性的两种数据设计方案

    博客分类:
  • Sql
阅读更多
关键字: Database   database sybase    
需求很简单:
  • 1:一个对象,它对应数据库中的一条记录。
  • 2:这个对象可能有很多boolean属性,例如isXX1, isXX2, isXX3,isXX4(但是有限,未来还可能增加)。
  • 3:这个对象的这些属性在应用中可能被频繁的更新。
设计方案
方案1:
  • 对象主表,用于保存对象常规属性,例如,id,name等等。
  • 对象boolean属性表,跟对象主表外键关联。
方案2:
  • 对象主表中多一个字段bool_status
  • 用二进制的byte来表示对象的boolean属性
  • 例如:isXX1 = 1, isXX2 = 2, isXX3=4, isXX4=8, isXX5=16
  • 然后bool_status存放所有boolean属性之和。
  • 例如对象A拥有issXX1=true, isXX2=true,那么这个对象在数据库中bool_status的值就是3
  • 例如对象b拥有issXX1=true, isXX5=true,那么这个对象在数据库中bool_status的值就是17

简单分析利弊:
对于一个对象查询:
  • 方案1:需要2条sql才能查出一个对象
  • 方案2:一条sql就可以查出一个对象
对于一个对象插入:
  • 方案1:一定是1+cont(boolan_attr=true)条insert sql
  • 方案2:一条update sql
对于一个对象boolean属性的更新:
  • 方案1:1条delete+cont(boolan_attr)条insert sql
  • 方案2:一条sql就可以更新
对于一个对象的删除,都暂不考虑记录历史
  • 方案1:1条delete主表+1条delete bool属性表
  • 方案2:1条delete主表
对于空间占用:
  • 明显方案2占的数据库空间比方案1少。

通过上面的分析好像天平已经很明显倒向了方案2.但是方案2也有一些弊端
  • 1:对于统计不是很友好,例如针对统计对象的没个属性进行统计,某些属性的组合进行统计,那么对于方案2就不得不对表中所有的bool_status进行&计算,这个不利于数据库运用索引。
  • 2:如果一个对象的boolean属性有很多是true那么bool_status这个值望望会令人不知所云,一定要应用程序decode才能看出来这个对象到底那些boolean属性是true。
我更倾向于方案1,因为它更清晰,插入和更新的效率虽然不如方案2,但是我更看重程序设计的清晰性,不知道大家有什么见解?
分享到:
评论

相关推荐

    boolean-object:将对象中的属性值转换为布尔值

    布尔对象 将对象中的属性值转换为布尔值。安装 npm install boolean-object用法 var booleanObject = require ( 'boolean-object' )var obj = { foo : 'true' , bar : 'false' , baz : 1 , qux : 0 , str : 'string'...

    Boolean RT资源包

    Boolean RT资源包,可用于Unity 几何体布尔运算

    JavaScript Boolean(布尔) 对象

    我们提供 JavaScript Boolean 对象参考手册,其中包括所有可用于布尔对象的属性和方法。 该手册包含了对每个属性和方法的详细描述以及相关实例。 创建 Boolean 对象 Boolean 对象代表两个值:”true” 或者 “false...

    Java面向对象程序设计方案练习题(1).doc

    有三个属性 面码:String theMa 粉的分量(两) int quantity 是否带汤 boolean likeSoup 2.写一个构造方法 以便于简化初始化过程 如 WuMingFen f1 = new WuMingFen("牛肉",3,true)。 3.重载构造方法 使得初始化过程...

    javascript之Boolean类型对象

    Boolean对象和Java中的Boolean封装类很像,它有两个值:true和false 1、创建Boolean对象 复制代码 代码如下:var boo = new Boolean();//此时未对boo进行赋值,但是它的默认值为false var boo = new Boolean(true);...

    Android Intent传递数据大小限制详解

    Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent发送不成功,logcat...

    Boolean RT.zip

    BooleanRT, 实现2个物体间的布尔运算 The extension provides the following functions: 1- Real-time or per-click Boolean execution. 2- Material, UV and texture preservation. 3- Saving to prefab. 4- ...

    Java面向对象程序设计方案练习题.doc

    有三个属性 面码:String theMa 粉的分量(两) int quantity 是否带汤 boolean likeSoup 2.写一个构造方法 以便于简化初始化过程 如 WuMingFen f1 = new WuMingFen("牛肉",3,true); 3.重载构造方法 使得初始化过程可以...

    JavaScript中Boolean对象的属性解析

    constructor 属性返回对创建此对象的 Boolean 函数的引用。 prototype 构造器 为 Boolean 对象创建一个新的方法: Boolean.prototype.myColor=function() { if (this.valueOf()==true) { this.color=

    shiyou00#knowledge#JavaScript数据类型Boolean布尔类型1

    前言布尔值Boolean类型可能是三种包装对象Number、String和Boolean中最简单的一种。Number和String对象拥有大量的实例属性和方法,

    Java实验-基本数据类型及操作

    Java是一种面向对象的编程语言,具有强大的数据类型系统。了解Java中的基本数据类型及其操作是java编程的基础。本实验报告将介绍Java中的基本数据类型、数据类型转换、控制台输入输出方法和对话框输入输出方法。 一...

    boolean_approach

    boolean_approach

    Java数据类型和MySql数据类型对应一览

    在本文中,我们将对 Java 数据类型和 MySql 数据类型进行对应一览,帮助开发者更好地理解和使用这两种类型。 字符串类型 在 Java 中,字符串类型对应的是 java.lang.String 类型。在 MySql 中,字符串类型对应的是...

    js的Boolean对象初始值示例

    Boolean(逻辑)对象用于将非逻辑值转换为逻辑值(true 或者 false)。 创建 Boolean 对象 使用关键词 new 来定义 Boolean 对象。下面的代码定义了一个名为 myBoolean 的逻辑对象: var myBoolean=new Boolean() ...

    jsp九大内置对象

    Out对象用于各种数据的输出。其常用方法如下。  ● out.print():输出各种类型数据。  ● out.newLine():输出一个换行符。  ● out.close():关闭流。  6、Cookie对象  (1)什么是Cookie  Cookie是...

    JavaScript中判断对象类型的几种方法总结

    我们知道,JavaScript中检测对象类型的运算符有:typeof、instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串。如:”number”,”string”,”...

    JS字符串false转boolean的方法(推荐)

    下面小编就为大家带来一篇JS字符串false转boolean的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    struts2 依赖注入boolean类型的属性时报错

    NULL 博文链接:https://hw1287789687.iteye.com/blog/1949399

    Unity 几何体布尔运算BooleanRT

    Unity 几何体布尔运算BooleanRT,Boolean RT.unitypackage,unity3d布尔运算插件。

Global site tag (gtag.js) - Google Analytics