SQL 设计心得、逗号分隔列表
第一:
在开始编码前、主要关注数据库里要保存什么样的数据,以级最佳的数据组织方式和内在关联方式。
第二:
使用你所知的数据库特性尽可能高效的实现数据管理。如正确的索引、数据库类型、高效的select!
---------------------------------------------------------------------------------------------------------------------------------
下面将会讲解、《逗号分隔列表》引起的一些数据库问题、Coders表用户记录程序员和他用的程序设计语言这个表只是为了引出这本主题相关的问题
create table Coders(--程序员表
Name varchar(16) primary key --姓名
Languge varchar(8)--程序语言
);
一般来说在工司只一门语言就可以了。比如我用的就是SQL 。也就是说
insert into Coders(Name,Languge) values('蒋乐哥哥','SQL');这样一行就可以表达了。好了问题来了、小公司一般来说它要的是一个“全才”也就是说我可能还要写C#
所以刚才的insert 不可这样写、要像下面的这个一样才可以表达好。
insert into Coders(Name,Languge) values('蒋乐哥哥','SQL、C#');
问题:
1、可拓展性不好、也就说是如果公司不只是要求你会SQL、C#、HTML、XAML、JS、、、、、等等这样这个列是保存不了这么多的。
2、对于聚合不方便、比如说统计一下蒋乐哥哥会几种语言?想想要什么写。
3、数据库完整性不能得到保护、insert into Coders(Name,Languge) values('蒋乐哥哥','湖南话');看到了吧“湖南话”就目前来说是不算编程语言的。当是这句insert 是不会
报错的。
4、性能问题、如找会C#程序员 select Name from Coders where Languge like '%C#%;可以看到这个select 是就算是有索引也是用不到的。
解决方案:
create table Languges(LangugeID int primary key,LangugeName varchar(8));--建立一个编程语言表别的表都要参照这张表。
create table Contact(
LangugeID int ,
Name varchar(8),
constraint FK_languge foreign key(LangugeID) references Languges(LangugeID),
constraint FK_Name foreign key(Name) references Corders(Name));
SQL 设计心得、逗号分隔列表的更多相关文章
- sql中根据逗号分隔,查出多行数据
--sql中根据逗号分隔,查出多行数据 select a.DiscussID,b.LocationID from (select DiscussID,LocationID=c ...
- “秒杀”问题的数据库和SQL设计【转载】
“秒杀”问题的数据库和SQL设计 APRIL 21ST, 2015 问题的来源 完全不考虑一致性的方案 表结构 方案 存在的问题 保证单用户不会重复购买 解决超卖问题 方案 优化 提高性能了 鱼与熊掌 ...
- sql判断以逗号分隔的字符串中是否包含某个字符串--------MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法
sql判断以逗号分隔的字符串中是否包含某个字符串---------------https://blog.csdn.net/wttykj/article/details/78520933 MYSQL中利 ...
- 物联网平台设计心得:DateTimePicker实现选择联动
所谓的选择联动,就是指,当我DateTimePicker1选择2月4号的时候,我DateTimePicker2只能选择2月4号和2月5号两天,当然你可以自行规定要选择的日期.这在一些图表查询条件里面是 ...
- 在sql设计中没法修改表结构
在做练习的时候经常表没设计好,后来有要去数据库修改表结构但是没词用界面修改的时候都会提示要保存 转自http://www.57xue.com/ItemView/Sql/2016061600160.ht ...
- sql 设计反模式
---恢复内容开始--- 1.乱穿马路 ---- > 目标 : 存储多值属性. 1) 错误方法: 使用格式化的逗号分割列表. 1-> 不适合查询,定位数据,无法运用聚合函数进行分组,不利于 ...
- 我的2016年终总结(PF项目框架设计心得分享 2.0rc)
在无数的日夜里,熬出了多少的黑眼圈,致勤勤恳恳工作的各位朋友与自己.每到了年末的时候总想写的什么,主要是为了回顾以往一年里到底做了什么,这便是年终总结的主要意义.在此我将要总结的是和我在技术层面上成长 ...
- Sql语句报ORA-01795: 列表中的最大表达式数为 1000
错误信息:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000,错误信息如下: serviceid是:work -------------other W ...
- 影响Scala语言设计的因素列表
Scala语言设计概述 Scala的设计受许多编程语言和研究思想的影响.事实上,仅很少的Scala的特点是全新的:大多数都已经被以另外的形式用在其他语言中了.Scala的革新主要来源于它是如何构造并放 ...
随机推荐
- light oj 1027 A Dangerous Maze
一道数学期望题,唉唉,概率论学的不好啊~~ 求走出迷宫的期望时间. 由于有的门会回到起点,所以有可能会走很多遍,设能走出去的门的个数为n1,总的个数为n,那么一次走出去的概率为n1/n,走一次的用的平 ...
- U3D学习使用笔记(一)
1.在使用NGUI控件时出现两种回调函数,一种是直接给回调函数赋值,一种是使用EventDelegate. UISlider.onDragFinished = functionName; EventD ...
- Programming C#.Classes and Objects.成员方法
this关键字指向类的当前实例,this指针是类中所有非静态方法的隐藏指针,每个方法都能通过this指针指向对象的其他方法和成员变量. 因为对一个类来说,它的成员函数(方法)只有一份,所有的实例对象共 ...
- nginx log format
参数 说明 示例 $remote_addr 客户端地址 211.28.65.253 $remote_user 客户端用户名称 -- $time_local 访问时间和时区 18/Jul/2012:17 ...
- Android android:clickable 问题
android:clickable继承自View的xml属性,其值必须是boolean值,即true.false.该标签目的是设置button是否可以被点击. <View android:cli ...
- linux实用指令---持续更新
awk '!a[$0]++' a > b 删除重复行 ldd 判断某条命令需要哪些共享库文件的支持 --------------- ]$ ldd a.out ...
- Java定时器:Timer
项目中往往会遇到需要定时的任务,例如订单,当用户在某个规定时间内没有操作订单时,订单状态将会发生改变. 那么在这种情况下,我们会用到定时器. 举例: import java.util.Timer; / ...
- android select选择器 checkbox改外观,button按下状态
android 可以用选择器.来加载视图.选择器里的选项也很多针对实际使用中用的几个进行描述. 1.button 的按下弹起改外观.选择器属性用 android:state_pressed 2.C ...
- CC++初学者编程教程(2) Microsoft Visual C++ 6.0开发环境搭建
上一篇演示的是如何安装VS2010,本文演示的是如何安装Microsoft Visual C++ 6.0 简称VC6. 有同学经常VC6都是很古董的版本了,为啥他还存在,不得不说VC6是微软一个很经典 ...
- 一个基于Qt的截屏程序
最近有一个arm板上的程序需要重写用户手册,在网上找了许久,没找到合适的截屏工具.于是只好自己动手做一个了. 因为arm板上有已经有了Qt环境,于是想到用 Qt的QPixmap::grabWindow ...