有这样一个需求:
有m个用户公用n个文件,一个用户可能会用到多个文件,一个文件可能被多个用户使用;
如果某个用户离开,那这个用户就不再使用任何文件;如果某个文件没有任何用户使用,就要删除该文件;
已知某个用户正在使用某些文件,要求管理这个用户离开的时候,到底要不要删除他原来使用的文件。
 
这个问题对搞服务器开发的人来说可能就是几十分钟或者几分钟的事儿,但这对我一个iOS开发者来说,可就没那么容易了。
想了半天搞不定,最后还是向搞服务器的朋友们请教才弄出了个解决方案。。。
我只能说,数据库这么强大,不补一下不行啊~~
 
简单记录下解决方案:
用数据库建3张表搞定。
一张用户表:记录userId userName
一张文件表:记录fileId filePath
一张用户-文件关系表:记录用户跟文件的对应关系 userId-fileId
其中关系表是个m对n的关系表
 
用户表和文件表都是直接增删查改就行;
关系表要注意下:当某个用户使用某个文件的时候,在关系表中插入一条 userId-fileId的数据,当这个用户不再使用这个文件的时候,删除这条数据
所以关系表的内容大概是
userId     fileId
1               1
1               2
1               3
1               4
2               1
2               4
。。。
。。。
 
如果要查userId为i某个用户用到了多少文件,只需要查关系表中所有userId=i就可以了;
如果要查fileId为j的某个文件被多少用户使用,只需要查关系表中所有fileId=j的就可以了;
那么当userId为i某个用户要离开的时候,他用到的那些文件应不应该删除呢?
那就需要以下几个步骤:
1,查询出这个用户用到了哪些文件,将文件fileId缓存起来
2,删除关系表中所有userId=i的数据
3,遍历缓存起来的fileId,再次查询关系表,查询该文件还被多少人使用;
如果这时候使用的人数为0,那说明该文件已经没用户使用了,可以删除,
如果使用人数不为0,则说明该文件还有其他用户使用,不能删除。
搞定~~~
 
逻辑搞定了,剩下的就是敲代码
iOS上用SQLite,FMDB貌似是最好用的了吧~FMDB的文档写的也很不错
我用FMDB把上面的逻辑写了个demo,放在这里https://github.com/Phelthas/Demo_FileManagerWithFMDB 
有什么问题,欢迎讨论~~
(如果觉得不错,别忘了点个star) 

简单的数据库设计及使用(FMDB)的更多相关文章

  1. SQL 修改字段类型和长度,常见类型介绍及数据库设计工具PowerDesigner和astah

    1.电话字段设置24个Byte竟然不够,好吧设置为50的长度. alter table <表名> alter column <字段名> 新类型名(长度) 举例: ) 2.删除一 ...

  2. 仿联想商城laravel实战---1、仿联想商城需求和数据库设计(lavarel如何搭建项目)

    仿联想商城laravel实战---1.仿联想商城需求和数据库设计(lavarel如何搭建项目) 一.总结 一句话总结: composer引入lavarel.配置域名.配置apache 1.项目名 le ...

  3. NetCore微服务简单流程审批数据库设计及后台服务开发

    1.数据库设计 -- ---------------------------- -- Table structure for TBase_Flow -- ----------------------- ...

  4. 数据库设计中的Soft Delete模式

    最近几天有点忙,所以我们今天来一篇短的,简单地介绍一下数据库设计中的一种模式——Soft Delete. 可以说,该模式毁誉参半,甚至有非常多的人认为该模式是一个Anti-Pattern.因此在本篇文 ...

  5. 使用django开发博客过程记录1——数据库设计

    1.数据库设计 2.插入测试数据 3.配置相关问题 1.数据库设计 数据库有简单的三张表:Article.Category.Tag以下是代码 # -*- coding:utf-8 -*- from _ ...

  6. 优化MySchool数据库设计之【巅峰对决】

    优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ...

  7. 从零开始编写自己的C#框架(9)——数据库设计与创建

    对于千万级与百万级数据库设计是有所区别的,由于本项目是基于中小型软件开发框架来设计,记录量相对会比较少,所以数据库设计时考虑的角度是:与开发相结合:空间换性能:空间换开发效率:减少null异常.... ...

  8. 数据库设计(1/9):数据元(Data Elements)

    对于设计和创建数据库完全是个新手?没关系,Joe Celko,世界上读者数量最多的SQL作者之一,会告诉你这些基础.和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜.Joe是DMBS杂志是多年 ...

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

    一讲到数据库设计,大家很容易想到的就是三范式,但是第四.第五范式又是什么,不是很清楚,三范式到底怎么区分,也不清楚,作为数据库设计的基础概念,我再讲解下数据库范式.   Normal form Bri ...

随机推荐

  1. MyBatis5:MyBatis集成Spring事物管理(上篇)

    前言 有些日子没写博客了,主要原因一个是工作,另一个就是健身,因为我们不仅需要努力工作,也需要有健康的身体嘛. 那有看LZ博客的网友朋友们放心,LZ博客还是会继续保持更新,只是最近两三个月LZ写博客相 ...

  2. 2016年我们重新思考移动互联网创业的风险, 微信还是APP?

    感觉这两年前端开发又火起来了,很多做内容创业和做微电商创业的人,往往都选择了运营微信号.对于做纯技术开发的人来说,一般是看不上微信号的,感觉没什么技术含量,或者说没什么技术壁垒.也有另一批人观点相反的 ...

  3. 探索 Linux 系统的启动过程

    引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...

  4. 用java开发微信公众号:公众号接入和access_token管理(二)

    本文为原创,原始地址为http://www.cnblogs.com/fengzheng/p/5027630.html 上一篇说了微信开发的准备工作,准备工作完成之后,就要开始步入正题了.其实微信公众号 ...

  5. 创建DbContext

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 上一篇介绍了<创建实体>,这一篇我们顺其自然地介绍<创建DbContext>. 温故: 提到DbConte ...

  6. ABP源码分析三十五:ABP中动态WebAPI原理解析

    动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...

  7. wget 显示"英国中部时间",去掉烦人的刷屏显示

    wget下载文件显示多行,进度条后面显示英国中部时间,非常让人郁闷. 本来英文是eta(Estimated Time of Arrival 预计到达时间),翻译错了,干脆去掉好了. 先要有两个个工具 ...

  8. java终端获取输入

    上一篇博客已经介绍了System.in这个输入流这次谈谈java如何获取终端(控制台)的输入 (1)BufferedReader JDK 1.4 及以下的版本中要想从控制台中输入数据只有一种办法,即使 ...

  9. C可变参数的函数

    我们实现一个简单的printf函数(可变参数) #include <stdio.h> #include <stdarg.h> void myprintf(const char ...

  10. ES6之module

    该博客原文地址:http://www.cnblogs.com/giggle/p/5572118.html 一.module概述 JavaScript一直没有模块体系,但是伴随着ES6的到来,modul ...