有这样一个需求:
有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. ABP(现代ASP.NET样板开发框架)系列之10、ABP领域层——实体

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之10.ABP领域层——实体 ABP是“ASP.NET Boilerplate Project (ASP.NET样板 ...

  2. 一步一步使用ABP框架搭建正式项目系列教程之本地化详解

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化.全球化的,不管怎么个叫法,反正道理都是一 ...

  3. 反编译.NET工程

    工具:       1.  .Net Reflector       2.   远程桌面 步骤: 1. 远程桌面连接到服务器 IP,port,user,pwd 2. 打开 IIS 这里面就是所部属的网 ...

  4. 通过Gradle为APK瘦身

    引言:在过去几年中,APK 文件的大小曾急剧增长态势.一般来说,其原因如下:Android开发者获取了更多的依赖库,添加了更多的密度,Apps 增加了更多的功能.但实际上我们应该让APKs 尽可能的小 ...

  5. APP测试点总结(功能,交互,死机崩溃状态分析,容易出错的检查点)

    APP测试点总结(功能,交互,死机崩溃状态分析,容易出错的检查点) 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近涉足APP端测试,常见检查点总结如下:   一.业务方面: 1.  注册( ...

  6. HTML5_05之SVG扩展、地理定位、拖放

    1.SVG绘图总结: ①方法一:已有svg文件,<img src="x.svg">  方法二:<body><svg></svg>&l ...

  7. JSP页面跳转的几种实现方法

    使用href超链接标记      客户端跳转 使用JavaScript               客户端跳转 提交表单                        客户端跳转 使用response ...

  8. Atitit 动态按钮图片背景颜色与文字组合解决方案

    Atitit 动态按钮图片背景颜色与文字组合解决方案 转换背景颜色,setFont("cywe_img", fontScale, 50, 5) 设置文字大小与坐标 文字分拆,使用字 ...

  9. JavaScript的同步与异步

    1.手绘一张图说明. 2.为什么JavaScript是单线程(这里引用阮一峰老师的话) JavaScript的单线程,与它的用途有关. 作为浏览器脚本语言,JavaScript的主要用途是与用户互动, ...

  10. AHCI: Failed to attach drive to Port1 (VERR_GENERAL_FAILURE).

    在mac操作系统下,安装VirtualBoxVm虚拟机,虚拟机里面安装wind7操作系统.在启动虚拟机的时候报错:AHCI: Failed to attach drive to Port1 (VERR ...