关于数据库的设计方法

/** 数据库实例 */

static FMDatabase *_db;

//初始化时候就行先进行数据库的创建 这是自己自动调用

+ (void)initialize

{

// 1.获得数据库文件的路径

NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSString *filename = [doc stringByAppendingPathComponent:@"status.sqlite"];

// 2.得到数据库

_db = [FMDatabase databaseWithPath:filename];

// 3.打开数据库

if ([_db open])
{

// 4.创表

BOOL result = [_db executeUpdate:@"CREATE
TABLE IF NOT EXISTS t_home_status (id integer PRIMARY KEY AUTOINCREMENT, access_token text NOT NULL, status_idstr text NOT NULL, status_dict blob NOT NULL);"];

if (result) {

NSLog(@"成功创表");

} else {

NSLog(@"创表失败");

}

}

}

+ (void)homeStatusesWithParam:(HMHomeStatusesParam *)param
success:(void (^)(HMHomeStatusesResult *))success failure:(void (^)(NSError *))failure

{

//    param.count = @5;

// 从数据库中读取(加载)缓存数据(微博模型数组)

NSArray *cachedHomeStatuses = [self cachedHomeStatusesWithParam:param];

if (cachedHomeStatuses.count != 0)
{ // 有缓存数据

if (success) {

HMHomeStatusesResult *result = [[HMHomeStatusesResult alloc] init];

result.statuses = cachedHomeStatuses;

success(result);

}

} else { // 没有缓存数据

NSDictionary *params = [param keyValues];

[HMHttpTool get:@"https://api.weibo.com/2/statuses/home_timeline.json" params:params success:^(id responseObj)
{

// 新浪返回的字典数组

NSArray *statusDictArray = responseObj[@"statuses"];

// 缓存微博字典数组

[self saveHomeStatusDictArray:statusDictArray accessToken:param.access_token];

if (success) {

HMHomeStatusesResult *result = [HMHomeStatusesResult objectWithKeyValues:responseObj];

success(result);

}

} failure:^(NSError *error)
{

if (failure) {

failure(error);

}

}];

}

}

/**

*  通过请求参数去数据库中加载对应的微博数据

*

*  @param param 请求参数

*/

+ (NSArray *)cachedHomeStatusesWithParam:(HMHomeStatusesParam *)param

{

// 创建数组缓存微博数据

NSMutableArray *statuses = [NSMutableArray array];

// 根据请求参数查询数据

FMResultSet *resultSet = nil;

if (param.since_id)
{

resultSet = [_db executeQuery:@"SELECT
* FROM t_home_status WHERE access_token = ? AND status_idstr > ? ORDER BY status_idstr DESC limit ?;", param.access_token,
param.since_id, param.count];

} else if (param.max_id)
{

resultSet = [_db executeQuery:@"SELECT
* FROM t_home_status WHERE access_token = ? AND status_idstr <= ? ORDER BY status_idstr DESC limit ?;", param.access_token,
param.max_id, param.count];

} else {

resultSet = [_db executeQuery:@"SELECT
* FROM t_home_status WHERE access_token = ? ORDER BY status_idstr DESC limit ?;", param.access_token, param.count];

}

// 遍历查询结果

while (resultSet.next)
{

NSData *statusDictData = [resultSet objectForColumnName:@"status_dict"];

NSDictionary *statusDict = [NSKeyedUnarchiver unarchiveObjectWithData:statusDictData];

// 字典转模型

HMStatus *status = [HMStatus objectWithKeyValues:statusDict];

// 添加模型到数组中

[statuses addObject:status];

}

return statuses;

}

/**

*  缓存微博字典数组到数据库中

*/

+ (void)saveHomeStatusDictArray:(NSArray *)statusDictArray
accessToken:(NSString *)accessToken

{

for (NSDictionary *statusDict in statusDictArray)
{

// 把statusDict字典对象序列化成NSData二进制数据

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:statusDict];

[_db executeUpdate:@"INSERT
INTO t_home_status (access_token, status_idstr, status_dict) VALUES (?, ?, ?);",

accessToken, statusDict[@"idstr"], data];

}

}

时间: 2024-08-25 05:46:41

关于数据库的设计方法的相关文章

数据库索引设计与优化

这篇是计算机中数据库设计类的优质预售推荐<数据库索引设计与优化>. 盖国强.姜承尧.金官丁.叶金荣.童家旺一众国内数据库界巨腕争相作序|支付宝.网易.云和恩墨联DB掌门连袂推荐的造是什么书吗? 编辑推荐 中国数据库界几大势力云集于这本旷世奇作,没读过咋好意思和DBA同行打招呼 蚂蚁(原支付宝)数据库团队资深专家携成长回忆与技术历程倾情献上最优质翻译 本书旨在--通过设计适用于现代硬件的索引,来提升关系型数据库的性能 软硬件发展让数据库性能被忽视,但数据处理量增长更快,全新索引优化设计才能根治随

数据仓库数据库设计方法---关系模型和多维模型比较分析

数据仓库中广泛采用的数据库设计模型有两种:关系型和多维型.普遍认为在数据仓库的设计方法中关系模型是“Inmon”方法而多维模型是“Kimball”方法. 先来看下关系模型,关系型数据以一种称为“标准化”的形式存在.数据标准化是指数据库设计会使数据分解成非常低的粒度级,标准化数据以一种孤立模式 存在,这种情况下对数据表里的数据关系要求很严格.一般遵循3NF范式.采用关系型设计的数据库一般具有较强的灵活性和多功能性(可以支持数据的多种视 图). 再来看下多维模型,多维模型一般有星型模式.雪花模式.混

数据库设计方法

一.数据库设计方法 1.根据需求抽出项目中的实体 2.总结每个实体的属性 3.确定实体之间的关系 二.数据库设计的三个范式 1.原子性及数据库的每一列是最小单位,根据需求不可拆分 2.每个表只描述一个实体,确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言) 3.每个表不应该包含冗余信息,如果a表里包含b表的主键,则a表就不需要包含b表的其他信息 例如下表错误示范: 工程号  工程名称  职工号  姓名  职务 小时工资率 工时  工作地点 河南开封杞县 其中

20170105数据库表设计知识点

20170105数据库表设计知识点 ------指导老师    星哥 1.PHP(MYSQL)擅长单表操作,不要做过多无谓的连接查询 2.表字段名不要使用大驼峰命名方式,最好采用下划线,命名要和团队习惯一致,通俗易懂. 3.表级.字段都要有注释 4.MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好.甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成.另外,MyISAM 对于 SELECT COUNT(*) 这类的计算

数据库表结构设计方法

author:skate time:2011-02-12 数据库表结构设计方法 当我们设计一个数据库存储模式时,要仔细分析数据模式,不要一股脑的把所有的数据都放在一起.那样的话对系统的可用性,高效能,扩展性都会有严重的影响.当然你设计的系统非常小,完全可以用最简单的方法. 要通过对业务的熟练,从不同的角度对数据进行多维度分析,一般可以从如下几个方向分析: 1.       数据流向 2.       数据访问特点 3.       数据量的大小 4.       数据的增长量 5.      

转:黑盒测试用例设计方法

1. 概述 黑盒测试用例设计方法包括等价类划分法.边界值分析法.错误推测法.因果图法.判定表驱动法.正交试验设计法.功能图法等. 2. 等价类划分法 2.1.              概念 等价类划分法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例.每一类的代表性数据在测试中的作用等价于这一类中的其他值. 2.2.              等价类划分法的应用 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理

Django开发笔记之数据库的设计

后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原型的时候就开始开发的困难之处,每次需求更改就会带来后台的数据和对应接口的一次变更.费时费精力 2.有了需求,那么开始数据库的设计,在Django中,并不需要直接去操作数据库,而且使用继承modesl.Model的类,在类中定义自己的模型,然后使用Python manage.py syncdb就可看到

数据库迁移的方法、步骤和心得

关于数据库迁移的方法.步骤和心得在项目中经常会遇到系统完全更换后的历史数据迁移问题,以示对客户历史工作的尊重,何况很多数据仍有保留的必要.那怎么做历史数据迁移呢?系统分析:1.分析原有的业务系统精确到大致的系统功能模块.大致的处理流程即可2.分析现有的业务系统精确到大致的系统功能模块.大致的处理流程即可3.分析两者自己的区别和差异大致分析一下两个业务系统之间的区别,有助于确定工作量和工作进度4.分析用户对旧有数据的需求分析对旧有数据的需求,才不至于盲目的全部性的进行迁移5.分析用户对旧有数据的处

数据库schema设计与优化

原文地址 1. 前言 对于数据库而言,在日常开发中我们主要的关注点有两块,一个是schema的结构设计,另一个就是索引的优化,这两块是影响我们最终系统结构和性能的关键部分,自然也是我们花费精力最多的部分: 本文主要介绍数据库设计中的一般原则和优化手段,包括数据库的一半范式.反范式设计.数据切分.数据路由与合并等等 2. Schema设计的一般性原则 2.1 概述 范式理论是关系型数据库设计的黄金法则,它提供了数据结构化的理论基础,有效地保证了数据的一致性,应该说,关系型数据库就是在范式的基础上才