**徐文艺    写于2022.2.15(农历正月十五)**<br/>转载请注明出处(由于文章在本人智能手机书写,同时仅分析,无法附具体图片,仅文字)联系QQ:286902544
最近偶尔听到有人在说**重名**,就翻了下记忆中基于标准SQL的一些处理,下面简单从系统数据结构设计和标准SQL模糊查询实现两个角度分析。

一、系统数据结构设计

其实系统数据结构设计和SQL查询并无直接关系,但却决定模糊查询时的操作处理。
先提出问题,举个例子:
***现在大家都用微信,也有人用QQ,那么微信和QQ是如何建立强关联关系的呢?这个问题其实就是系统数据结构设计时冗余字段或关联(子)表设计的问题。如果没有手机号码或电子邮箱的实时应急措施,那么上面的问题核心就归类到我们这次要讨论的主题,系统数据结构设计和标准SQL模糊查询。***
下面我们尝试用稍专业角度结合技术分析,尽量少用技术术语。
个人微信社交好友列表中每个好友都有名称、账户号、备注,而我们也可以针对每个好友设置不同的昵称(姓名)、备注等(好友的账户号我们无法修改),这是我们私人手机微信账户针对好友的行为(和对方没任何关系),和我们的微信好友的实际名称、备注没关系,可以一样也可以不同。当然好友也可以在他的手机上同样操作。

从技术实现上说,具体数据结构设计下面2个表格(由于是社交软件,最简化分析仅2个表格,其余根据不同业务不同设计方案单独列出,与真正的办公ERP/OA系统的用户账户的岗位等不同,这里也不涉及)。
先说明下唯一标识的实现方式,目前主流主要有2种,一种采用数字自动增长的方式实现即序列sequence(关于位数对齐等这里也不讨论),另一种是使用至少16位的包含拼音和数字的唯一UUID实现。至于其它的实现方式暂不讨论。
第一个表就是用户表,主要是每个人的唯一标识ID、账户号、手机号码、账户名称、昵称、备注、备用列等。第二个表就是社交好友列表即通讯录,用于存每个人的通讯录的好友数据,具体内容根据下面2个方案略有不同。

方案1 冗余表数据结构设计
第二个表,主要是数据唯一标识ID、个人唯一标识ID(可设为外键,也可不设)、好友唯一标识ID(可设为外键,也可不设)、好友账户号、好友账户名称、好友昵称、好友备注、备用列(可能有多个)等。
方案2 关联表数据结构设计
第二张表:主要是数据唯一标识ID、个人唯一标识ID(可设为外键,也可不设)、好友唯一标识ID(可设为外键,也可不设,同样是第一个表中数据)。
***数据结构设计结束语
第一种情况,当然后面的几列从好友账户号列到备用列可能会有出入,但列数的多少并不影响整体意思的表达,只要包含一个和第一个表的列相同,我们就可以称这是冗余表数据结构设计。
第二种情况,关联关系表的设计思路比较简单,这也是大部分主流账户系统通用的解决办法。当然这种设计会引发另外一个问题(单向即对方是你的好友而你不是对方的好友/双向即双方互为好友),这里不展开说。
可能写到这里很多人已经明白我提出的问题的意思了。
如果是第二种方案设计,那么目前微信的好友的昵称和备注等就无法处理。QQ毕竟历史悠久,基本不存在这个问题,但目前看问题并不这么简单,个人感觉可能是早期微信用户扩张期的用户来源直接从QQ转(应急的手机号/电子邮箱登录)导致,不过不能一概而论。


二、标准SQL数据模糊查询

我们不基于具体关系型数据库讨论(Oracle、SQL Server、Mysql、DB2等),只要是符合标准92SQL的关系型数据库均可。
针对上面分析的简单数据结构设计,核心表中有3~5列,分别为账户号、账户名、昵称、备注等。
第一种 基于同一个数据库同一个表同一列进行模糊查询,分别为左侧模糊、右侧模糊、全文模糊。

***左侧模糊***主要是尾部的字固定,头部内容模糊查询,具体类似如下:
微信服务端库.第一个表.昵称 like ‘%X’
微信服务端库.第一个表.备注 like ‘%X’
本地库.第一个表.昵称 like ‘%X’
本地库.第一个表.备注 like ‘%X’。
结果比如2个人的微信自己设置的昵称分别为张三/张某三,那么这种方式下仅查询三可能就串了,就是我们目前说的重名了一样。如果智能拼音查询的话串的概率就更高了。
***右侧模糊***主要是头部的字固定,尾部内容模糊查询,具体类似如下:
微信服务端库.第一个表.昵称 like ‘X%’
微信服务端库.第一个表.备注 like ‘X%’
本地库.第一个表.昵称 like ‘X%’
本地库.第一个表.备注 like ‘X%’。
结果比如2个人的微信自己设置的昵称分别为张三/张三丰,那么这种方式下仅查询张三两个人可能就串了,如果账户名、昵称、备注类似例子中就是我们目前说的重名了一样。如果智能拼音查询的话串的概率就更高了。
***全文模糊***主要是列内容模糊查询,具体类似如下:
微信服务端库.第一个表.昵称 like ‘%X%’
微信服务端库.第一个表.备注 like ‘%X%’。
本地库.第一个表.昵称 like ‘%X%’
本地库.第一个表.备注 like ‘%X%’
第二种 基于不同列的模糊关联,主要分为基于冗余字段的多表单(多)库模糊处理和基于关联方式的单表单(多)库模糊处理

首先明确,当前用户的唯一标识ID其实就是微信的账户号,目前就是一年只允许修改一次的那个。正常来说用户唯一标识ID一般系统自动生成,就是文章开头介绍的至少16位的一堆拼音数字组合。而账号就是各家网络互联网公司的入口注册的在其系统中的唯一标识账户号,不能重复,和账户名称、昵称等不是一个概念。

基于冗余方式的多表单库模糊处理,比如2个人的微信自己设置的昵称分别为张三/张三丰,备注分别是张三/张三丰,那么这种方式下仅查询张三两个人可能就串了,如果账户名是昵称,昵称、备注相同就是我们目前说的重名了一样。如果智能拼音查询的话串的概率就更高了。
模糊查询如下:
微信服务端库.第一个表.ID=当前登录用户唯一标识ID
当前登录用户正在修改的好友唯一标识ID=微信服务端库.第二个表.好友唯一标识ID
微信服务端库.第一个表.昵称(备注)=微信服务端库.第二个表.备注(昵称)
微信服务端库.第一个表.昵称(备注) like ‘%X%’ 。
或者
本地库.第一个表.ID=当前登录用户唯一标识ID
当前登录用户正在修改的好友唯一标识ID=本地库.第二个表.好友唯一标识ID
本地库.第一个表.昵称(备注)=本地库.第二个表.备注(昵称)
本地库.第一个表.昵称(备注) like ‘%X%’

基于关联方式的单表单库模糊处理,比如2个人的微信自己设置的昵称分别为张三/张三丰,备注分别是张三丰/张三,那么这种方式下仅查询张三两个人可能就串了,如果账户名是昵称,昵称、备注相同就是我们目前说的重名了一样。如果智能拼音查询的话串的概率就更高了。
模糊查询如下:
微信服务端库.第一个表.用户标识ID(账户号)=当前用户的唯一标识ID(当前用户账户号)
微信服务端库.第一个表.用户唯一标识ID=微信服务端库.第二个表.个人(好友)唯一标识ID
微信服务端库.第一个表.昵称=微信服务端库.第一个表.备注
微信服务端库.第一个表.昵称(备注) like ‘%X%’
或者
本地库.第一个表.用户唯一标识ID(账户号)=当前用户的唯一标识ID(当前用户账户号)
微信服务端库.第一个表.用户唯一标识ID=本地库.第二个表.个人(好友)唯一标识ID
本地库.第一个表.昵称=本地库.第一个表.备注
本地库.第一个表.昵称(备注) like ‘%X%’
**
————————全文结束———————————

上面文章仅限于分析目前我个人(可能好多人和我一样也碰到过)使用微信或QQ中碰到的问题,比如你的微信/QQ中想修改好的名称(备注),发现无论如何都没法修改等。
和腾讯公司的实际技术没任何关系,仅个人的技术分析猜测结论。文章写的比较仓促,里面有部分内容未必准确,里面的名字是随口起,和现实任何人没关系。

微信(QQ)重名困扰探究系列之一 数据库设计与SQL模糊查询相关推荐

  1. 重名困扰探究系列之二账户号与登录方式 中

    前面忘记说了,我这个CSDN账户其实注册在2008年前后,当年并没有实名认证一说,毕竟那么多互联网公司,个人在其上注册账户,现在每家都实名不太可能,但这些年由于智能手机(又叫掌上平板电脑)规模普及,导 ...

  2. 微信小程序校园活动管理系统-JAVA【数据库设计、源码、开题报告】

    1 前言 1.1开发背景及意义 校园活动管理是中职学生素质教育的重要途径及有效方式,特别是对于一个院校的校园文化建设.校风学风建设和学生综合素质方面的提高至关重要t叫".良好的学生活动组织可 ...

  3. sqlserver 指定的网络名不再可用_50个比较实用的SQL Server查询语句(1)

    在本文中,我将解释一些通用的SQL查询.我认为每个开发人员都应该了解这些查询.这些查询与SQL的任何特定主题都无关.但是了解这些查询可以解决一些复杂的任务,并且可以在许多场景中使用. 查询1:检索所有 ...

  4. 微信小程序挂号预约系统-JAVA【数据库设计、源码、开题报告】

    1. 概述 1.1 选题背景 随着"互联网+"的兴起和信息化的不断发展,多种传统行业被冲击,不得不展现出新的发展形态,互联网与各种行业甚至物品联合,使得生活更加方便有效,资源配置的 ...

  5. 起名字老重名?使用这款利器可以快速帮你查询有哪些站点用了你的名字!

    作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) 不知道有没有小伙伴跟我一样,常常在注册账号的时候输入了昵称往往会反回一个"用户名已存在",然后尝试了好几个昵称之后 ...

  6. 微信小程序宠物用品服务商城SSM-JAVA【数据库设计、论文、源码、开题报告】

    功能介绍 操作角色为管理员和用户.商家. 管理员的功能为用户管理.商家管理.宠物分类管理.宠物信息管理.商品分类管理.宠物用品管理.项目类型管理.服务项目管理.宠物日志管理.订单管理等: 用户的功能为 ...

  7. SQL查询系列之六:SQL模糊查询

    2019独角兽企业重金招聘Python工程师标准>>>   在SQL结构化查询语言中,LIKE语句有着至关重要的作用.LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. ...

  8. MySQL数据库系列之数据库设计原则

    MySQL中数据库设计原则: 1.一般情况下,应该尽量使用可以正确存储数据的最小数据类型.数据类型不一样,存储的执行效率也不一样.最好使用适度的整型数据类型,例如int之类的数据,这样在做查询或者字段 ...

  9. mysql实战36 | 为什么临时表可以重名?

    在上一篇文章中,我们在优化 join 查询的时候使用到了临时表.当时,我们是这么用的: create temporary table temp_t like t1; alter table temp_ ...

最新文章

  1. C/C++反序输出字符串总结
  2. hdu 2154 跳舞毯 (DP)
  3. 福建省计算机一级应用技术基础知识,求福建省计算机一级考试的基础题
  4. 数学大神攻克猜字游戏Wordle,求解算法成绩逼近理论极限,连信息论都用上了...
  5. python 中使用 global 引发了莫名其妙的问题
  6. 【组合数学】鸽巢原理 ( 鸽巢原理简单形式 | 鸽巢原理简单形式示例 1、2、3 )
  7. SQL2000: MMC 不能打开文件
  8. 64. Minimum Path Sum
  9. WNEWS 专题系统
  10. mysql有table函数吗_mysql_alter_table函数流程的部分修改和注解
  11. Java面试题以及答案精选(架构师面试题)-Spring专题
  12. winform模拟鼠标点击
  13. 神州八号利用计算机,说到科技,我想大部分的人想到的是神州八号
  14. 【linux系统学习笔记】Ubuntu文本界面和图像界面的切换
  15. Web 应用程序测试工具
  16. Git 版本控制系统的安装与使用
  17. 水声信号混响matlab,水声信号
  18. 剑指Offer(第二版)-思路简述-第一期(简单难度)
  19. 风能设备物流的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. Android使用XML做动画UI

热门文章

  1. 打开mysql3306库报错_[ERROR] Do you already have another mysqld server running on port: 3306
  2. JAVA String、StringBuff、StingBuilder
  3. dedecms建站问题集锦
  4. corona sdk android,Corona SDK
  5. ARMv8架构概述、相关技术文档以及ARMv8处理器简介
  6. 数字通信系统简易信道编码仿真与性能分析
  7. R语言plot函数可视化多条曲线(multiple line in the same plot)、使用postscript函数将可视化图像保存到指定目录的(ps、postscript file)文件中
  8. Oracle同义词 synonym
  9. 程序员用C++代码实现高清播放器,支持DVD视频,附源码
  10. Java踩坑笔记 —— base64转换为图片后图片显示不全