有这样一个需求:
有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. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  2. About me

    stay hungry, stay foolish VaJoy / 蓝邦珏 Addr:Tencent Shenzhen E-Mail:vajoy@qq.com 站内:http://space.cnbl ...

  3. Linux 中的数值计算和符号计算

    不知道经常需要做科学计算的朋友们有没有这样的好奇:在 Linux 系统下使用什么工具呢?说到科学计算,首先想到的肯定是 Matlab,如果再说到符号计算,那就非 Mathematica 不可了.可惜, ...

  4. Python3 登陆网页并保持cookie

    网页登陆 网页登陆的原理都是,保持一个sessionid在cookie然后,根据sessionid在服务端找到cookie进行用户识别 python实现 由于python的简单以及丰富的类库是开发网络 ...

  5. jQuery? 回归JavaScript原生API

    如今技术日新月异,各类框架库也是层次不穷.即便当年漫山红遍的JQuery(让开发者write less, do more,So Perfect!!)如今也有被替代的大势.但JS原生API写法依旧:并且 ...

  6. Cleaver快速制作网页PPT

    原文首发链接:http://www.jeffjade.com/2015/10/15/2015-10-16-cleaver-make-ppt/ 写在开始之前 互联网时代,以浏览器作为入口,已经有越来越多 ...

  7. thinkphp - 复合查询(or、and 联合使用的方法)

    条件:查询今天内邮箱和QQ其中一项都不为空的有效数据的查询 释义:(or 条件)email  不为空 或者 qq_no 不为空    (and 条件) is_deleted 为0 并且 create_ ...

  8. 使用topshelf包装redis为windows服务

           Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Windows Service,利用win ...

  9. ★Kali信息收集~★6.Dmitry:汇总收集

    概述: DMitry(Deepmagic Information Gathering Tool)是一个一体化的信息收集工具.它可以用来收集以下信息: 1. 端口扫描 2. whois主机IP和域名信息 ...

  10. GitHub实战系列~3.提交github的时候过滤某些文件 2015-12-10

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...