作项目分析,数据库设计是一个很重要也很难的问题,
完全按照范式有可能不符合用户需求,不利于编程,
看来是具体问题具体分析,数据库设计是范式和需求的折中。
在上学时,没觉得数据类型有多重要,现在发觉了解数据类型
的具体内容也是很重要的,可以知道不同数据库之间的兼容问题
该怎么处理。
数据库设计技巧:
第2 部分― 设计表和字段
1. 检查各种变化
我在设计数据库的时候会考虑到哪些数据字段将来可能会发生变更。比方说,姓氏就是如此(注
意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,我倾向于
在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一
数据条目的变化。
― Shropshire Lad
2. 采用有意义的字段名
有一回我参加开发过一个项目,其中有从其他程序员那里继承的程序,那个程序员喜欢用屏幕上
显示数据指示用语命名字段,这也不赖,但不幸的是,她还喜欢用一些奇怪的命名法,其命名采
用了匈牙利命名和控制序号的组合形式,比如cbo1、txt2、txt2_b 等等。
除非你在使用只面向你的缩写字段名的系统,否则请尽可能地把字段描述的清楚些。当然,也别
做过头了,比如Customer_Shipping_Address_Street_Line_1 I 虽然很富有说明性,但没人愿意
键入这么长的名字,具体尺度就在你的把握中。
― Lamont Adams
3. 采用前缀命名
如果多个表里有好多同一类型的字段(比如FirstName),你不妨用特定表的前缀(比如
CusLastName)来帮助你标识字段。
― notoriousDOG
时效性数据应包括“最近更新日期/时间”字段。时间标记对查找数据问题的原因、按日期重新处
理/重载数据和清除旧数据特别有用。
― kol
5. 标准化和数据驱动
数据的标准化不仅方便了自己而且也方便了其他人。比方说,假如你的用户界面要访问外部数据
源(文件、XML 文档、其他数据库等),你不妨把相应的连接和路径信息存储在用户界面支持表
里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那
么产生工作流的数据也可以存放在数据库里。预先安排总需要付出努力,但如果这些过程采用数
据驱动而非硬编码的方式,那么策略变更和维护都会方便得多。事实上,如果过程是数据驱动
的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。
― tduvall
6. 标准化不能过头
对那些不熟悉标准化一词(normalization )的人而言,标准化可以保证表内的字段都是最基础的
要素,而这一措施有助于消除数据库中的数据冗余。标准化有好几种形式,但Third Normal
Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,3NF 规
定:
・ 表内的每一个值都只能被表达一次。
・ 表内的每一行都应该被唯一的标识(有唯一键)。
・ 表内不应该存储依赖于其他键的非键信息。
遵守3NF 标准的数据库具有以下特点:有一组表专门存放通过键连接起来的关联数据。比方说,
某个存放客户及其有关定单的3NF 数据库就可能有两个表:Customer 和Order。Order 表不包
含定单关联客户的任何信息,但表内会存放一个键值,该键指向Customer 表里包含该客户信息
的那一行。
更高层次的标准化也有,但更标准是否就一定更好呢?答案是不一定。事实上,对某些项目来
说,甚至就连3NF 都可能给数据库引入太高的复杂性。
― Lamont Adams
为了效率的缘故,对表不进行标准化有时也是必要的,这样的例子很多。曾经有个开发财务分析
软件的活就是用非标准化表把查询时间从平均40 秒降低到了两秒左右。虽然我不得不这么做,
但我绝不把数据表的非标准化当作当然的设计理念。而具体的操作不过是一种派生。所以如果表
出了问题重新产生非标准化的表是完全可能的。
― epepke
7. Microsoft Access 报表技巧
如果你正在使用Microsoft Access,你可以用对用户友好的字段名来代替编号的名称:比如用
Customer Name 代替txtCNaM。这样,当你用向导程序创建表单和报表时,其名字会让那些不
是程序员的人更容易阅读。
― jwoodruf
8. 不活跃或者不采用的指示符
增加一个字段表示所在记录是否在业务中不再活跃挺有用的。不管是客户、员工还是其他什么
人,这样做都能有助于再运行查询的时候过滤活跃或者不活跃状态。同时还消除了新用户在采用
数据时所面临的一些问题,比如,某些记录可能不再为他们所用,再删除的时候可以起到一定的
防范作用。
― theoden
9. 使用角色实体定义属于某类别的列
在需要对属于特定类别或者具有特定角色的事物做定义时,可以用角色实体来创建特定的时间关
联关系,从而可以实现自我文档化。
这里的含义不是让PERSON 实体带有Title 字段,而是说,为什么不用PERSON 实体和
PERSON_TYPE 实体来描述人员呢?然后,比方说,当John Smith, Engineer 提升为John
Smith, Director 乃至最后爬到John Smith, CIO 的高位,而所有你要做的不过是改变两个表
PERSON 和PERSON_TYPE 之间关系的键值,同时增加一个日期/时间字段来知道变化是何时
发生的。这样,你的PERSON_TYPE 表就包含了所有PERSON 的可能类型,比如Associate、
Engineer、Director、CIO 或者CEO 等。
还有个替代办法就是改变PERSON 记录来反映新头衔的变化,不过这样一来在时间上无法跟踪
个人所处位置的具体时间。
― teburlew
10. 采用常用实体命名机构数据
组织数据的最简单办法就是采用常用名字,比如:PERSON、ORGANIZATION、ADDRESS 和
PHONE 等等。当你把这些常用的一般名字组合起来或者创建特定的相应副实体时,你就得到了
自己用的特殊版本。开始的时候采用一般术语的主要原因在于所有的具体用户都能对抽象事物具
体化。
有了这些抽象表示,你就可以在第2 级标识中采用自己的特殊名称,比如,PERSON 可能是
Employee、Spouse、Patient、Client、Customer、Vendor 或者Teacher 等。同样的,
ORGANIZATION 也可能是MyCompany、MyDepartment、Competitor、Hospital、
Warehouse、Government 等。最后ADDRESS 可以具体为Site、Location、Home、Work、
Client、Vendor、Corporate 和FieldOffice 等。
采用一般抽象术语来标识“事物”的类别可以让你在关联数据以满足业务要求方面获得巨大的灵
活性,同时这样做还可以显著降低数据存储所需的冗余量。
― teburlew
11. 用户来自世界各地
在设计用到网络或者具有其他国际特性的数据库时,一定要记住大多数国家都有不同的字段格
式,比如邮政编码等,有些国家,比如新西兰就没有邮政编码一说。
― billh
12. 数据重复需要采用分立的数据表
如果你发现自己在重复输入数据,请创建新表和新的关系。
― Alan Rash
13. 每个表中都应该添加的3 个有用的字段
・ dRecordCreationDate,在VB 下默认是Now(),而在SQL Server 下默认为GETDATE()
・ sRecordCreator,在SQL Server 下默认为NOT NULL DEFAULT USER
・ nRecordVersion,记录的版本标记;有助于准确说明记录中出现null 数据或者丢失数据的原
因
― Peter Ritchie
14. 对地址和电话采用多个字段
描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和Address_Line3 可
以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型
和标记类别。
― dwnerd
过分标准化可要小心,这样做可能会导致性能上出现问题。虽然地址和电话表分离通常可以达到
最佳状态,但是如果需要经常访问这类信息,或许在其父表中存放“首选”信息(比如
Customer 等)更为妥当些。非标准化和加速访问之间的妥协是有一定意义的。
― dhattrem
15. 使用多个名称字段
我觉得很吃惊,许多人在数据库里就给name 留一个字段。我觉得只有刚入门的开发人员才会这
么做,但实际上网上这种做法非常普遍。我建议应该把姓氏和名字当作两个字段来处理,然后在
查询的时候再把他们组合起来。
― klempan
Klempan 不是唯一一个注意到使用单个name 字段的人,要把这种情况变得对用户更为友好有好
些方法。我最常用的是在同一表中创建一个计算列,通过它可以自动地连接标准化后的字段,这
样数据变动的时候它也跟着变。不过,这样做在采用建模软件时得很机灵才行。总之,采用连接
字段的方式可以有效的隔离用户应用和开发人员界面。
― damon
16. 提防大小写混用的对象名和特殊字符
过去最令我恼火的事情之一就是数据库里有大小写混用的对象名,比如CustomerData。这一问
题从Access 到Oracle 数据库都存在。我不喜欢采用这种大小写混用的对象命名方法,结果还不
得不手工修改名字。想想看,这种数据库/应用程序能混到采用更强大数据库的那一天吗?采用全
部大写而且包含下划符的名字具有更好的可读性(CUSTOMER_DATA),绝对不要在对象名的
字符之间留空格。
― bfren
17. 小心保留词
要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突,比如,最近我编写的一个
ODBC 连接程序里有个表,其中就用了DESC 作为说明字段名。后果可想而知!DESC 是
DESCENDING 缩写后的保留词。表里的一个SELECT *语句倒是能用,但我得到的却是一大堆
毫无用处的信息。
― Daniel Jordan
18. 保持字段名和类型的一致性
在命名字段并为其指定数据类型的时候一定要保证一致性。假如字段在某个表中叫做
“agreement_number”,你就别在另一个表里把名字改成“ref1”。假如数据类型在一个表里
是整数,那在另一个表里可就别变成字符型了。记住,你干完自己的活了,其他人还要用你的数
据库呢。
― setanta
19. 仔细选择数字类型
在SQL 中使用smallint 和tinyint 类型要特别小心,比如,假如你想看看月销售总额,你的总额字
段类型是smallint,那么,如果总额超过了$32,767 你就不能进行计算操作了。
― egermain
20. 删除标记
在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除
某一行;最好采用清除数据程序而且要仔细维护索引整体性。
― kol
21. 避免使用触发器
触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采
用触发器,你最好集中对它文档化。
― kol
22. 包含版本机制
建议你在数据库中引入版本控制机制来确定使用中的数据库的版本。无论如何你都要实现这一要
求。时间一长,用户的需求总是会改变的。最终可能会要求修改数据库结构。虽然你可以通过检
查新字段或者索引来确定数据库结构的版本,但我发现把版本信息直接存放到数据库中不更为方
便吗?。
― Richard Foster
23. 给文本字段留足余量
ID 类型的文本字段,比如客户ID 或定单号等等都应该设置得比一般想象更大,因为时间不长你
多半就会因为要添加额外的字符而难堪不已。比方说,假设你的客户ID 为10 位数长。那你应该
把数据库表字段的长度设为12 或者13 个字符长。这算浪费空间吗?是有一点,但也没你想象的
那么多:一个字段加长3 个字符在有1 百万条记录,再加上一点索引的情况下才不过让整个数据
库多占据3MB 的空间。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模
的增长了。
― tlundin
24. 列命名技巧
我们发现,假如你给每个表的列名都采用统一的前缀,那么在编写SQL 表达式的时候会得到大
大的简化。这样做也确实有缺点,比如破坏了自动表连接工具的作用,后者把公共列名同某些数
据库联系起来,不过就连这些工具有时不也连接错误嘛。举个简单的例子,假设有两个表:
Customer 和Order。Customer 表的前缀是cu_,所以该表内的子段名如下:cu_name_id、
cu_surname、cu_initials 和cu_address 等。Order 表的前缀是or_,所以子段名是:
or_order_id、or_cust_name_id、or_quantity 和or_description 等。
这样从数据库中选出全部数据的SQL 语句可以写成如下所示:
Select * from Customer, Order
Where cu_surname = "MYNAME"
and cu_name_id = or_cust_name_id
and or_quantity = 1;
在没有这些前缀的情况下则写成这个样子:
Select * from Customer, Order
Where Customer.surname = "MYNAME"
and Customer.name_id = Order.cust_name_id
and Order.quantity = 1
第1 个SQL 语句没少键入多少字符。但如果查询涉及到5 个表乃至更多的列你就知道这个技巧
多有用了。
― Bryce Stenberg
第3 部分― 选择键和索引
1. 数据采掘要预先计划
我所在的市场部门一度要处理8 万多份联系方式,同时填写每个客户的必要数据(这绝对不是小
活)。我从中还要确定出一组客户作为市场目标。当我从最开始设计表和字段的时候,我试图不
在主索引里增加太多的字段以便加快数据库的运行速度。然后我意识到特定的组查询和信息采掘
既不准确速度也不快。结果只好在主索引中重建而且合并了数据字段。我发现有一个指示计划相
当关键――当我想创建系统类型查找时为什么要采用号码作为主索引字段呢?我可以用传真号码
进行检索,但是它几乎就象系统类型一样对我来说并不重要。采用后者作为主字段,数据库更新
后重新索引和检索就快多了。
― hscovell
可操作数据仓库(ODS)和数据仓库(DW)这两种环境下的数据索引是有差别的。在DW 环境
下,你要考虑销售部门是如何组织销售活动的。他们并不是数据库管理员,但是他们确定表内的
键信息。这里设计人员或者数据库工作人员应该分析数据库结构从而确定出性能和正确输出之间
的最佳条件。
― teburlew
2. 使用系统生成的主键
这一天类同技巧1,但我觉得有必要在这里重复提醒大家。假如你总是在设计数据库的时候采用
系统生成的键作为主键,那么你实际控制了数据库的索引完整性。这样,数据库和非人工机制就
有效地控制了对存储数据中每一行的访问。
采用系统生成键作为主键还有一个优点:当你拥有一致的键结构时,找到逻辑缺陷很容易。
― teburlew
3. 分解字段用于索引
为了分离命名字段和包含字段以支持用户定义的报表,请考虑分解其他字段(甚至主键)为其组
成要素以便用户可以对其进行索引。索引将加快SQL 和报表生成器脚本的执行速度。比方说,
我通常在必须使用SQL LIKE 表达式的情况下创建报表,因为case number 字段无法分解为
year、serial number、case type 和defendant code 等要素。性能也会变坏。假如年度和类型字
段可以分解为索引字段那么这些报表运行起来就会快多了。
― rdelval
4. 键设计4 原则
・ 为关联字段创建外键。
・ 所有的键都必须唯一。
・ 避免使用复合键。
・ 外键总是关联唯一的键字段。
― Peter Ritchie
5. 别忘了索引
索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到
解决。作为一条规则,我通常对逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用
唯一的非成组索引,对任何外键列采用非成组索引。不过,索引就象是盐,太多了菜就篌了。你
得考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。
― tduvall
大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比
如运行查询显示主表和所有关联表的某条记录就用得上。还有,不要索引memo/note 字段,不
要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。
― gbrayton
6. 不要索引常用的小型表
不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和
删除操作的索引维护可能比扫描表空间消耗更多的时间。
― kbpatel
7. 不要把社会保障号码(SSN)选作键
永远都不要使用SSN 作为数据库的键。除了隐私原因以外,须知政府越来越趋向于不准许把
SSN 用作除收入相关以外的其他目的,SSN 需要手工输入。永远不要使用手工输入的键作为主
键,因为一旦你输入错误,你唯一能做的就是删除整个记录然后从头开始。
― teburlew
上个世纪70 年代我还在读大学的时候,我记得那时SSN 还曾被用做学号,当然尽管这么做是非
法的。而且人们也都知道这是非法的,但他们已经习惯了。后来,随着盗取身份犯罪案件的增
加,我现在的大学校园正痛苦地从一大摊子数据中把SSN 删除。
― generalist
8. 不要用用户的键
在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要
选择用户可编辑的字段作为键。这样做会迫使你采取以下两个措施:
・ 在创建记录之后对用户编辑字段的行为施加限制。假如你这么做了,你可能会发现你的应用程
序在商务需求突然发生变化,而用户需要编辑那些不可编辑的字段时缺乏足够的灵活性。当用
户在输入数据之后直到保存记录才发现系统出了问题他们该怎么想?删除重建?假如记录不可
重建是否让用户走开?
・ 提出一些检测和纠正键冲突的方法。通常,费点精力也就搞定了,但是从性能上来看这样做的
代价就比较大了。还有,键的纠正可能会迫使你突破你的数据和商业/用户界面层之间的隔
离。
所以还是重提一句老话:你的设计要适应用户而不是让用户来适应你的设计。
― Lamont Adams
不让主键具有可更新性的原因是在关系模式下,主键实现了不同表之间的关联。比如,
Customer 表有一个主键CustomerID,而客户的定单则存放在另一个表里。Order 表的主键可能
是OrderNo 或者OrderNo、CustomerID 和日期的组合。不管你选择哪种键设置,你都需要在
Order 表中存放CustomerID 来保证你可以给下定单的用户找到其定单记录。
假如你在Customer 表里修改了CustomerID,那么你必须找出Order 表中的所有相关记录对其进
行修改。否则,有些定单就会不属于任何客户――数据库的完整性就算完蛋了。
如果索引完整性规则施加到表一级,那么在不编写大量代码和附加删除记录的情况下几乎不可能
改变某一条记录的键和数据库内所有关联的记录。而这一过程往往错误丛生所以应该尽量避免。
― ljboast
9. 可选键有时可做主键
记住,查询数据的不是机器而是人。
假如你有可选键,你可能进一步把它用做主键。那样的话,你就拥有了建立强大索引的能力。这
样可以阻止使用数据库的人不得不连接数据库从而恰当的过滤数据。在严格控制域表的数据库
上,这种负载是比较醒目的。如果可选键真正有用,那就是达到了主键的水准。
我的看法是,假如你有可选键,比如国家表内的state_code,你不要在现有不能变动的唯一键上
创建后续的键。你要做的无非是创建毫无价值的数据。比如以下的例子:
Select count(*)
from address, state_ref
where
address.state_id = state_ref.state_id
and state_ref.state_code = 'TN'
我的做法是这样的:
Select count(*)
from address
where
and state_code = 'TN'
如你因为过度使用表的后续键建立这种表的关联,操作负载真得需要考虑一下了。
― Stocker
10. 别忘了外键
大多数数据库索引自动创建的主键字段。但别忘了索引外键字段,它们在你想查询主表中的记录
及其关联记录时每次都会用到。还有,不要索引memo/notes 字段而且不要索引大型文本字段
(许多字符),这样做会让你的索引占据大量的数据库空间。。
― gbrayton
第4 部分― 保证数据的完整性
1. 用约束而非商务规则强制数据完整性
如果你按照商务规则来处理需求,那么你应当检查商务层次/用户界面:如果商务规则以后发生变
化,那么只需要进行更新即可。
假如需求源于维护数据完整性的需要,那么在数据库层面上需要施加限制条件。
如果你在数据层确实采用了约束,你要保证有办法把更新不能通过约束检查的原因采用用户理解
的语言通知用户界面。除非你的字段命名很冗长,否则字段名本身还不够。― Lamont Adams
只要有可能,请采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还
包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层
保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。
― Peter Ritchie
2. 分布式数据系统
对分布式系统而言,在你决定是否在各个站点复制所有数据还是把数据保存在一个地方之前应该
估计一下未来5 年或者10 年的数据量。当你把数据传送到其他站点的时候,最好在数据库字段
中设置一些标记。在目的站点收到你的数据之后更新你的标记。为了进行这种数据传输,请写下
你自己的批处理或者调度程序以特定时间间隔运行而不要让用户在每天的工作后传输数据。本地
拷贝你的维护数据,比如计算常数和利息率等,设置版本号保证数据在每个站点都完全一致。
― Suhair TechRepublic
3. 强制指示完整性
没有好办法能在有害数据进入数据库之后消除它,所以你应该在它进入数据库之前将其剔除。激
活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处
理错误条件。
― kol
4. 关系
如果两个实体之间存在多对一关系,而且还有可能转化为多对多关系,那么你最好一开始就设置
成多对多关系。从现有的多对一关系转变为多对多关系比一开始就是多对多关系要难得多。
― CS Data Architect
5. 采用视图
为了在你的数据库和你的应用程序代码之间提供另一层抽象,你可以为你的应用程序建立专门的
视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的
自由。
― Gay Howe
6. 给数据保有和恢复制定计划
考虑数据保有策略并包含在设计过程中,预先设计你的数据恢复过程。采用可以发布给用户/开发
人员的数据字典实现方便的数据识别同时保证对数据源文档化。编写在线更新来“更新查询”供
以后万一数据丢失可以重新处理更新。
― kol
7. 用存储过程让系统做重活
解决了许多麻烦来产生一个具有高度完整性的数据库解决方案之后,我所在的团队决定封装一些
关联表的功能组,提供一整套常规的存储过程来访问各组以便加快速度和简化客户程序代码的开
发。在此期间,我们发现3GL 编码器设置了所有可能的错误条件,比如以下所示:
SELECT Cnt = COUNT (*)
FROM [
]
WHERE [] =
IF Cnt = 0
BEGIN
INSERT INTO []
( [< primary key column>] )
VALUES ( )
END
ELSE
BEGIN
END
而一个非3GL 编码器是这样做的:
INSERT INTO []
( [< primary key column>] )
VALUES
( )
IF @@ERROR = 2627 -- Literal error code for Primary Key Constraint
BEGIN
END
第2 个程序简单多了,而且事实上,利用了我们给数据库的功能。虽然我个人不喜欢使用嵌入文
字(2627)。但是那样可以很方便地用一点预先处理来代替。数据库不只是一个存放数据的地
方,它也是简化编码之地。
― a-smith
8. 使用查找
控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值
列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适
合查找:国家代码、状态代码等。
― CS Data Architect
第5 部分― 各种小技巧
1. 文档、文档、文档
对所有的快捷方式、命名规范、限制和函数都要编制文档。
― nickypendragon
采用给表、列、触发器等加注释的数据库工具。是的,这有点费事,但从长远来看,这样做对开
发、支持和跟踪修改非常有用。
― chardove
取决于你使用的数据库系统,可能有一些软件会给你一些供你很快上手的文档。你可能希望先开
始在说,然后获得越来越多的细节。或者你可能希望周期性的预排,在输入新数据同时随着你的
进展对每一部分细节化。不管你选择哪种方式,总要对你的数据库文档化,或者在数据库自身的
内部或者单独建立文档。这样,当你过了一年多时间后再回过头来做第2 个版本,你犯错的机会
将大大减少。
― mrs_helm
2. 使用常用英语(或者其他任何语言)而不要使用编码
为什么我们经常采用编码(比如9935A 可能是墨水笔的供应代码,4XF788-Q 可能是帐目编
码)?理由很多。但是用户通常都用英语进行思考而不是编码。工作5 年的会计或许知道
4XF788-Q 是什么东西,但新来的可就不一定了。在创建下拉菜单、列表、报表时最好按照英语
名排序。假如你需要编码,那你可以在编码旁附上用户知道的英语。
― amasa
3. 保存常用信息
让一个表专门存放一般数据库信息非常有用。我常在这个表里存放数据库当前版本、最近检查/修
复(对Access)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据
库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境
特别有用。
― Richard Foster
4. 测试、测试、反复测试
建立或者修订数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测
试并且同用户一道保证你选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之
前完成。
― juneebug
5. 检查设计
在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,
针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。
― jgootee
6. Access 设计技巧
对复杂的Microsoft Access 数据库应用程序而言,可以把所有的主表放在一个数据库文件里,然
后增加其他数据库文件和装载同原有数据库有关的特殊函数。根据需要用这些函数连接到主文件
中的主表。比如数据输入、数据QC、统计分析、向管理层或者政府部门提供报表以及各类只读
查询等。这一措施简化了用户和组权限的分配,而且有利于应用程序函数的分组和划分,从而在
程序必须修改的时候易于管理。
― Dennis Walden
你可能感兴趣的:(数据库设计的折衷方法)
aocache:AOCache 新增功能深度解析:从性能监控到灵活配置的全方位升级
10km
aocache java java aocache 性能分析
最近对aocache进行了重要升级,最新版本0.6.0增加了几项新功能:性能分析日志,AOCache性能分析工具,切入点自定义配置,全局配置,本文详细说明这几项目新功能的作用和使用方式。一、性能分析日志需求背景对于哪些方法适合使用aocache注解提高性能,开始我是凭经验和直觉来判断的。但是对于下面这个方法,凭直觉你觉得用方法缓存能提高性能么?publicStringnext(Stringexpr
React--Fiber 架构
前端_学习之路
React.js react.js 架构 前端
React的Fiber架构是React16.x版本引入的核心更新,旨在解决大型应用中渲染性能瓶颈的问题。它重新设计了协调算法(Reconciliation),使渲染过程更加可控和高效。核心设计目标1.可中断渲染:将渲染工作拆分成多个小任务,允许浏览器中断渲染进程,优先处理高优先级事件(如用户输入、动画)。2.优先级调度:为不同类型的更新分配不同优先级,紧急更新(如动画)可以插队执行。3.增量渲染:
坚持不懈以学筑魂,不断筑牢政治忠诚
日落时分217
孔子曰:“学而时习之,不亦说乎”古人在面对学习时的态度也再次印证了学习的重要性,活到老,学到老的坚持是我们每个党员干部需要贯彻的学习思想,只有通过不断地学习,才能武装思想扎实理论基础,跟得上时代的变迁,适应世界格局的变化。自治区党委理论学习中心组会议暨省级领导读书班交流研讨会隆重举行。马兴瑞书记强调:“深入学习贯彻习近平新时代中国特色社会主义思想是新时代新征程下的党员干部的首要政治任务个终身必修课
思恩感恩日志♥(18)
睿智女人思恩
1感恩自己今天很早就起来陪家里人出去玩,不赖床,家里人很开心。2感恩姐姐辛苦开车到一个很远的地方,我们都睡着了,她还在开,辛苦啦。3感恩叔叔昨晚开车带我们出去兜风,聊了一下哥哥的心里话,终于知道哥哥的内心想法了。4感恩弟弟今天知道我很累了,找了一辆自行车给我骑,不然腿真的废了。5感恩表嫂介绍女孩给哥哥认识6感恩今晚弟弟请我们2家人喝茶,撑死啦。7感恩今天2家人去了3个地方,很开心,一天都在外面。8
被诱导的消费
橘子猫耳
近几日,因为临近所谓的双十一和双十二活动,各大店铺推出了很多优惠活动,不管是线上线下一样。由于各种的券和折价,都需要满足一定的消费才可以使用,看似是我们得到了优惠,实则不过是让我们囤下了很多暂时不会使用,又或者未来也不一定使用的东西,既浪费钱,又浪费时间和物品,还占用时间。我当时也差点没忍住,本来不过是买上一些生活必须品,然后一看满减,又屁颠屁颠去搜索还可以买些什么东西,看了大半天,没有中意的,其
《股市心理学》重点摘要--人性几百年并未变化(6)
89089答复
股市心理学重点摘要:1,为使得自己不受狂热效应的影响,股民必须时刻保持清醒的头脑,并坚持自己的投资态度,而不应该盲目跟随投资的“狂潮”2,恐慌是一种远比贪婪更猛烈、更猛爆的情绪,这也是为什么股市空头时跌势通常极为猛烈,让人难措手不及,而相对的上涨过程中总是较跌势温和的原因3,恐慌不是突然出现的,而是长期积累的结果4,恐慌时期出现的价格底部往往不是由恐惧造成的,因为恐惧的股民此时早已因恐惧而卖出了股
番外:肖泓
笔端v
泓知道,自己离开这驿站,就再也没有回去的理由了。泓曾是一名将士,言行必果。但他自知不是个武断的人,前几日做出的决定却已注定使他关于前路无法再有多余的思量。最考验一个人的时候莫过于,在他面前有不同的路时,他该如何做出选择。泓不一样,他的面前似乎只剩下一条。这或许并不是一件坏事。泓看向同行的小白,他正瑟缩在自己的长袍里,还未醒来。篝火早已熄灭,连灰烬也被吹去不少,酒壶翻倒在灰烬旁,没去了一半。又是一阵
0524-2019理财小知识@
星月传奇1998
欢迎大家继续学习基金投资的课程。基金投资是咱们理财同心圆和亿万金三角两个路径的共同必修课。先声明一下,我们课程中所提到的基金,都是指理财基金。换句话说,不管你的资产金额是100块钱还是100个亿,基金尤其是指数基金都是你必不可少的投资方式。Part1:基金的初步认知你还别觉得我在说大话,我们先简单的介绍一下,到底什么是基金?做一个形象的比喻,基金其实就是一个篮子,按照预定设好的规则,我们把各个资产
数据库、HTML
一、数据库数据库文件与普通文件区别:普通文件对数据管理(增删改查)效率低2.数据库对数据管理效率高,使用方便常用数据库:1.关系型数据库:将复杂的数据结构简化为二维表格形式大型:0racle、DB2中型:MySq1、sQLServer小型:Sqlite2.非关系型数据库以键值对存储,且结构不固定。//JSONRedisMongoDB嵌入式数据库:sqlite3:stu.db1.开源免费,c语言开发
女孩子生二胎,不如好好爱自己?
小小草_e216
现在国家新的政策,放开三胎生育政策,我们对90后说,有政策你们可以给家里的孩子多个弟弟妹妹呢,可是大多女同事都同一口径,基本不敢再要宝宝。很多人都说,你只管生,家里有老人带,先不说经济条件,要想给孩纸最好的教育,那陪伴一定是最好的教育。可是现在的工作加班,学习、职场发展,谁有更多的时间:晚上、周末来陪伴孩子?一个宝宝,六岁入学前花费的时间最多,如果28岁有升职的机会,生完2个孩子后,陪伴他们到6岁
高省注册必须要邀请码吗? 高省邀请码怎么才能有
凌风导师
高省注册必须要邀请码吗?高省邀请码怎么才能有这一款简单的app各种返利APP平台数据佣金测试对比(实测高省返利佣金最高,欢迎下载对比)高省-各大应用商城下载即可-购物领劵返利高,邀请码切记填882288,凌风高省邀请码882288,全网唯一教你技术的老师码填对码直送2皇冠总裁等级,《凌风导师V:125130414》送价值百万引流技术推广绝密大礼包,也可以后台联系老师进高省官方群。什么值得买好物频道
无脑发优惠券项目,一部手机就可以玩
高省APP大九
大家好,今天我想分享一个简单却非常实用的优惠券项目。这个项目的基本思路就是邀请你的亲朋好友或者推广粉丝加入一个特殊的群组。在这个群组里,我们会发布各种商品的优惠券。最棒的是,这些优惠券的使用门槛非常低,你只需要一部手机就能轻松操作。首先,让我来详细解释一下这个项目。你可能已经注意到了,有很多群组或者个人在社交媒体上分享各种特价商品,有时候甚至是隐藏的优惠券。这些优惠券能让你以非常低的价格购买商品,
日常杂记
小悯丶
1、走在路上,突然想找个人说说话,但也不知说什么,打给谁,显得有些不负责。于是这样的问题产生了:你的生命里有没有这么一个,不用害怕他目前在做什么事情,不用顾虑自己要说什么,你都可以没有压力的打给他呢?哪怕这并不礼貌,并不负责。12/112、有那么一个过去的“你”吗?我不禁想这样问,在面对亲戚朋友口中,那个他们眼中一直未变的自己,试图从过去的点滴与当下的你产生联系之时,哪怕在说自己的事情,心里却感到
性能优化在实际案例中的使用
渴死的鱼仔
javascript 前端 html
案例:电商网站购物车功能优化问题描述:电商网站的购物车功能存在性能瓶颈,当用户添加大量商品时,页面响应变慢,甚至出现卡顿现象。需要通过优化代码和数据结构提升性能。原始代码(未优化)//购物车数据以数组存储,每次操作都遍历整个数组letcart=[];functionaddToCart(product){letfound=false;for(leti=0;i{constitemElement=doc
米哈游游戏有内部号吗 哪里可以拿到游戏内部号?
诸葛村夫123
目前手游用户已经突破了4亿人了,市面上的游戏品类更是数不胜数。喜欢在游戏里充值的玩家更是多如牛毛。有的充值几千,有的充值几万,甚至还有人充值几十万。这么多充值玩家当中确有着一群鲜为人知的特殊玩家,这群特殊的玩家享受到游戏运营商的特殊待遇。这就是我们常说的托号(也就是内部号)这种内部号玩家进游戏机会得到v7到v10的vip等级扶持,一般这种玩家充值100就能得到700-1000左右的实际充值。领先于
单身男人的白日梦
你先走
短文,这是看完英伦才子阿兰.德波顿《无聊的魅力》后的一些想法。强迫孤独,忧伤以及快乐如果你像我一样太早接触火车这类事物,很早背井离乡,成年后经年累月四处漂泊,一定和我一样,更容易看懂爱德华.霍珀的画作。aaf0a9268bba469c8da9b0d49fda44dc.jpeg孤独,是霍珀绘画艺术的核心主题。但是,用德波顿的话说:其作品充满忧伤,但不会让观众忧伤。f0def170bb3815d798
明天见(十三)
h陈兮
20.11.15有时候我们都要承认,当知道不可能的时候,那个人真的就会离你越来越远,哪怕他就在这里,你们也不会在有一抬头就见到的机会了。可能他故意走了,或者有事情忙没有来。但是真的当我放弃的时候,见到他的频率远比初识的时候少多了。以前我甚至能看到他放书离开,现在见他一面我都很难做到。其实,我能感觉到他就在那里,好像我的眼睛被纱蒙住了,看不清,我什么都看不清。造化弄人,错的人偏要遇见。
日更500天随想
雨萌2018
不知不觉中,我也坚持日更500天了。日更排名日更500天,对我来说,真是喜忧参半。喜的是自己获得日更365天徽章后,又坚持日更100多天。忧的是自己的日更还能坚持多久?看着天际、天翼口腔两位友友,都是日更1000天以上的达人了,我只有羡慕的份,绝对没有嫉妒和恨。日更1000天,那是他们两个人坚持不懈的结果,是我学习的“标杆”。我就在想:我们同样是一个脑袋,两只手,人和人的差距咋会这么大呢?他们两个
C#linq中的any方法解析
Linq中的any方法有那两个重载any()的方法主要功能是:判断是否为空、是否存在元素满足指定的条件。any()空参的方法作用:判断目标是否为空、是否包含元素。//声明一个int类型的数组int[]intA={1,2,3,4,5,6,7,8,9,10};//判断数组是否为空boolresultA=intA.Any();Console.WriteLine("intA数组使用any方法的结果:"+r
妈妈的爱,是永远热着的米饭,是1屉包子,1罐小菜
北花
“赵馨你好!时间如穿梭,不知不觉你离开故乡去武汉前线已经二十多天了,你不怕一切困难,勇敢地站在第一线,你这种不畏一切困难顽强的精神,是我们学习的榜样。昨天,我和阳阳睡午觉,他突然坐起来说,姥姥,我妈妈走了几天啦,他这一问,我的眼泪忍不住流下来,我想他是在做梦,见到了妈妈。。。”这是妈妈给援鄂孙女的一封家书,整整两页的字里,透着满满的爱和鼓励。我的妈妈是一名退休的妇女干部,也是一位普普通通的母亲,跨
倒闭潮 | 旅游业停滞一天,损失178亿元
斜杠老刘
武汉新型冠状病毒感染肺炎疫情进入紧急状态至今,二十多天了。整个中国都是一个话题——共同抗击新型冠状病毒疫情,同时也是横在全国文旅行业面前生死攸关的一道坎……截至2月3日16:00,全国共确诊新型冠状病毒肺炎17293例(含港澳台地区33例),重症2,296例,死亡361例,治愈出院477例;疑似病例21,558例。01疫情突发整个旅游业震痛!钟南山2日表示:“目前全国的疫情仍处于上升期,可能只会局
告别内存焦虑!用Dask打开Python大数据并行计算的“任意门“
小张在编程
python 大数据 开发语言
引言当你在Jupyter里用Pandas读取20GB的CSV文件,看到内存占用率从10%飙升到90%,最后弹出"MemoryError"时;当你想对亿级数据做分组聚合,却发现单线程计算要等上半小时——这些场景是不是像极了用小推车搬运万吨货物?Python生态中,Dask库就像一台"并行计算推土机",能把大数据拆分成小块并行处理,让你的普通电脑也能拥有分布式计算的能力。本文将从原理到实战,带你掌握这
什么样的团队值得待下去
绿阶窗前草不除
什么是真正的团队?麻省理工大学,有一个研究组,邀请了几百名志愿者,并将他们分成了几组来解决难题。结果显示,那些表现优异的团队,并不是拥有一两个超高智商的成员,也不是成员们整体智商水平最高。反之,获得成功的团队都有三个特点:第一,他们都有着较高的社交灵敏度和同理心。第二,成功的团队给了每个人同样的时间,这样就没有任何人能成为主导,也没有任何人有机会搭便车。第三,成功的团队里都有更多的女性员工。试验,
2020-12-01 第304篇《幸福的千年老二》
ALady155
古人云,宁做鸡头不做凤尾。有人愿意做鸡头,有人愿意做凤尾,不管坐什么位置,一定要清晰自己的方向只有自己的方向清晰了,明确了自己的目标,坐在哪里最合适就坐哪里我是特别喜欢做一个千年老二,从小在家我就是老二。长大之后参加工作,我也一直位居老二的位置,一直觉得这个位置特别适合我特别舒服老大一直让我跳出舒适区,说应该独自挑大梁,不应该只做一个千年的老二。但我很清楚自己的优势和劣势,人是应该在自己的长处之上
手机做任务哪个软件好?七大手机做任务赚钱正规平台推荐!
高省爱氧惠
互联网时代,兼职比较容易找,找兼职的人也多,毕竟生活压力也不少,能赚点钱补贴家用也是不错的。手机赚钱的平台有哪些?小编今天为各位推荐7个靠谱的手机赚钱平台,希望能给你带来帮助。第一:兼职刷手通过一些购物平台购买指定商品,帮助商家提升商品销量和店铺权重的行为,每单一般会有5-10元的佣金,当刷手完成交易,给了好评,商家就会把相应的报酬发给刷手。购物、看电影、点外卖、用氧惠APP!更优惠!氧惠(全网优
读书笔记之 瑞达利欧《原则》
niuDavid
桥水创始人瑞·达利欧写的《原则》一书,厚厚的竟达五百多页,我也是花费很长时间读完。《原则》主体架构无非分为三个部分,首先是写自己的历程,夹杂一些自己感悟作为本书的引子,第二部分是讲到归纳的生活原则,最后一部分就讲了工作中的原则。书中归纳点很多,虽然有些是我们早已体察到的,但仍有部分观点新鲜可敬,有些理论是深刻的,有些观点是让人触动不已,有些竟是即相通而又交叉验证的,这些都通过此书系统的给我们展显出
2023-10-30
佳依我心
“生活中都有面具,既然看透了,那么就请用绝对清醒的理智,去压制不该有的情绪;最好的状态就是不属于任何人,也不拥有任何人,减少期待,好好生活。”我自己本人,不是很喜欢与人过多的交往和接触,只不过到了后来,不得不为之改正和调整自己的方式,只有这样才能适应越来越多的复杂个艰苦,却不会轻易放弃自己所坚持的事。未来有多远,我们并不知道,可是脚下的路却让我们变得更加强大和无畏,只有不停的走下去,才能够变得越来
STM32F103R6的Keil和Protues仿真-点亮LED灯
怎么就重名了
stm32 嵌入式硬件 单片机
STM32F103R6的Keil和Protues仿真-点亮LED灯STM32F103R6的Keil和Protues仿真-点亮LED灯1、效果1.1、低电平点亮1.2、高电平点亮2、代码2.1、Keil2.2、protueshttps://gitee.com/xiaolixi/l-stm32/tree/master/STM32Protues/diandeng-lowhttps://gitee.com
清晨
斯华_37c3
早安,当老公的闹钟响的时候,其实我已经醒来,最近的习惯6点多钟就睡不着了。我觉的是自已有点焦虑,就每时每刻就想着哪里可以省到钱,哪里可以赚点钱,可是却无从下手,唉,什么时候才不为这一斗米折腰。其实,挺喜欢早上的,因为新的一天又开始了,又要干劲十足的去完成自已的工作,现在辛苦一点,往后就轻松一点,加油。外面的摩托车的声音不断,都是为了生计,生活。不停的奔走,不停的忙碌,都是想让自已的小家过上更好的生
量子计算与AI融合的技术突破与实践路径
量子计算与人工智能的融合正开启一个全新的技术纪元,这种"量智融合"不是简单的技术叠加,而是多领域、多学科的横向连接,通过协同创新实现非线性增长。本文将深入探讨这一领域的最新进展、技术实现路径以及行业应用案例。电子-光子-量子一体化芯片:硬件基础突破2025年7月,美国波士顿大学、加州大学伯克利分校和西北大学团队联合开发出全球首个电子-光子-量子一体化芯片系统。这一突破性成果发表在《自然·电子学》杂
PHP如何实现二维数组排序?
IT独行者
二维数组 PHP 排序
二维数组在PHP开发中经常遇到,但是他的排序就不如一维数组那样用内置函数来的方便了,(一维数组排序可以参考本站另一篇文章【PHP中数组排序函数详解汇总】)。二维数组的排序需要我们自己写函数处理了,这里UncleToo给大家分享一个PHP二维数组排序的函数:
代码:
functionarray_sort($arr,$keys,$type='asc'){
$keysvalue= $new_arr
【Hadoop十七】HDFS HA配置
bit1129
hadoop
基于Zookeeper的HDFS HA配置主要涉及两个文件,core-site和hdfs-site.xml。
测试环境有三台
hadoop.master
hadoop.slave1
hadoop.slave2
hadoop.master包含的组件NameNode, JournalNode, Zookeeper,DFSZKFailoverController
由wsdl生成的java vo类不适合做普通java vo
darrenzhu
VO wsdl webservice rpc
开发java webservice项目时,如果我们通过SOAP协议来输入输出,我们会利用工具从wsdl文件生成webservice的client端类,但是这里面生成的java data model类却不适合做为项目中的普通java vo类来使用,当然有一中情况例外,如果这个自动生成的类里面的properties都是基本数据类型,就没问题,但是如果有集合类,就不行。原因如下:
1)使用了集合如Li
JAVA海量数据处理之二(BitMap)
周凡杨
java 算法 bitmap bitset 数据
路漫漫其修远兮,吾将上下而求索。想要更快,就要深入挖掘 JAVA 基础的数据结构,从来分析出所编写的 JAVA 代码为什么把内存耗尽,思考有什么办法可以节省内存呢? 啊哈!算法。这里采用了 BitMap 思想。
首先来看一个实验:
指定 VM 参数大小: -Xms256m -Xmx540m
java类型与数据库类型
g21121
java
很多时候我们用hibernate的时候往往并不是十分关心数据库类型和java类型的对应关心,因为大多数hbm文件是自动生成的,但有些时候诸如:数据库设计、没有生成工具、使用原始JDBC、使用mybatis(ibatIS)等等情况,就会手动的去对应数据库与java的数据类型关心,当然比较简单的数据类型即使配置错了也会很快发现问题,但有些数据类型却并不是十分常见,这就给程序员带来了很多麻烦。
&nb
Linux命令
510888780
linux命令
系统信息
arch 显示机器的处理器架构(1)
uname -m 显示机器的处理器架构(2)
uname -r 显示正在使用的内核版本
dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)
hdparm -i /dev/hda 罗列一个磁盘的架构特性
hdparm -tT /dev/sda 在磁盘上执行测试性读取操作
cat /proc/cpuinfo 显示C
java常用JVM参数
墙头上一根草
java jvm参数
-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2
我的spring学习笔记9-Spring使用工厂方法实例化Bean的注意点
aijuans
Spring 3
方法一:
<bean id="musicBox" class="onlyfun.caterpillar.factory.MusicBoxFactory"
factory-method="createMusicBoxStatic"></bean>
方法二:
mysql查询性能优化之二
annan211
UNION mysql 查询优化 索引优化
1 union的限制
有时mysql无法将限制条件从外层下推到内层,这使得原本能够限制部分返回结果的条件无法应用到内层
查询的优化上。
如果希望union的各个子句能够根据limit只取部分结果集,或者希望能够先排好序在
合并结果集的话,就需要在union的各个子句中分别使用这些子句。
例如 想将两个子查询结果联合起来,然后再取前20条记录,那么mys
数据的备份与恢复
百合不是茶
oracle sql 数据恢复 数据备份
数据的备份与恢复的方式有: 表,方案 ,数据库;
数据的备份:
导出到的常见命令;
参数 说明
USERID 确定执行导出实用程序的用户名和口令
BUFFER 确定导出数据时所使用的缓冲区大小,其大小用字节表示
FILE 指定导出的二进制文
线程组
bijian1013
java 多线程 thread java多线程 线程组
有些程序包含了相当数量的线程。这时,如果按照线程的功能将他们分成不同的类别将很有用。
线程组可以用来同时对一组线程进行操作。
创建线程组:ThreadGroup g = new ThreadGroup(groupName);
&nbs
top命令找到占用CPU最高的java线程
bijian1013
java linux top
上次分析系统中占用CPU高的问题,得到一些使用Java自身调试工具的经验,与大家分享。 (1)使用top命令找出占用cpu最高的JAVA进程PID:28174 (2)如下命令找出占用cpu最高的线程
top -Hp 28174 -d 1 -n 1
32694 root 20 0 3249m 2.0g 11m S 2 6.4 3:31.12 java
【持久化框架MyBatis3四】MyBatis3一对一关联查询
bit1129
Mybatis3
当两个实体具有1对1的对应关系时,可以使用One-To-One的进行映射关联查询
One-To-One示例数据
以学生表Student和地址信息表为例,每个学生都有都有1个唯一的地址(现实中,这种对应关系是不合适的,因为人和地址是多对一的关系),这里只是演示目的
学生表
CREATE TABLE STUDENTS
(
C/C++图片或文件的读写
bitcarter
写图片
先看代码:
/*strTmpResult是文件或图片字符串
* filePath文件需要写入的地址或路径
*/
int writeFile(std::string &strTmpResult,std::string &filePath)
{
int i,len = strTmpResult.length();
unsigned cha
nginx自定义指定加载配置
ronin47
进入 /usr/local/nginx/conf/include 目录,创建 nginx.node.conf 文件,在里面输入如下代码:
upstream nodejs {
server 127.0.0.1:3000;
#server 127.0.0.1:3001;
keepalive 64;
}
server {
liste
java-71-数值的整数次方.实现函数double Power(double base, int exponent),求base的exponent次方
bylijinnan
double
public class Power {
/**
*Q71-数值的整数次方
*实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。
*/
private static boolean InvalidInput=false;
public static void main(
Android四大组件的理解
Cb123456
android 四大组件的理解
分享一下,今天在Android开发文档-开发者指南中看到的:
App components are the essential building blocks of an Android
[宇宙与计算]涡旋场计算与拓扑分析
comsci
计算
怎么阐述我这个理论呢? 。。。。。。。。。
首先: 宇宙是一个非线性的拓扑结构与涡旋轨道时空的统一体。。。。
我们要在宇宙中寻找到一个适合人类居住的行星,时间非常重要,早一个刻度和晚一个刻度,这颗行星的
同一个Tomcat不同Web应用之间共享会话Session
cwqcwqmax9
session
实现两个WEB之间通过session 共享数据
查看tomcat 关于 HTTP Connector 中有个emptySessionPath 其解释如下:
If set to true, all paths for session cookies will be set to /. This can be useful for portlet specification impleme
springmvc Spring3 MVC,ajax,乱码
dashuaifu
spring jquery mvc Ajax
springmvc Spring3 MVC @ResponseBody返回,jquery ajax调用中文乱码问题解决
Spring3.0 MVC @ResponseBody 的作用是把返回值直接写到HTTP response body里。具体实现AnnotationMethodHandlerAdapter类handleResponseBody方法,具体实
搭建WAMP环境
dcj3sjt126com
wamp
这里先解释一下WAMP是什么意思。W:windows,A:Apache,M:MYSQL,P:PHP。也就是说本文说明的是在windows系统下搭建以apache做服务器、MYSQL为数据库的PHP开发环境。
工欲善其事,必须先利其器。因为笔者的系统是WinXP,所以下文指的系统均为此系统。笔者所使用的Apache版本为apache_2.2.11-
yii2 使用raw http request
dcj3sjt126com
http
Parses a raw HTTP request using yii\helpers\Json::decode()
To enable parsing for JSON requests you can configure yii\web\Request::$parsers using this class:
'request' =&g
Quartz-1.8.6 理论部分
eksliang
quartz
转载请出自出处:http://eksliang.iteye.com/blog/2207691 一.概述
基于Quartz-1.8.6进行学习,因为Quartz2.0以后的API发生的非常大的变化,统一采用了build模式进行构建;
什么是quartz?
答:简单的说他是一个开源的java作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。并且还能和Sp
什么是POJO?
gupeng_ie
java POJO 框架 Hibernate
POJO--Plain Old Java Objects(简单的java对象)
POJO是一个简单的、正规Java对象,它不包含业务逻辑处理或持久化逻辑等,也不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。
POJO对象有时也被称为Data对象,大量应用于表现现实中的对象。如果项目中使用了Hiber
jQuery网站顶部定时折叠广告
ini
JavaScript html jquery Web css
效果体验:http://hovertree.com/texiao/jquery/4.htmHTML文件代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>网页顶部定时收起广告jQuery特效 - HoverTree<
Spring boot内嵌的tomcat启动失败
kane_xie
spring boot
根据这篇guide创建了一个简单的spring boot应用,能运行且成功的访问。但移植到现有项目(基于hbase)中的时候,却报出以下错误:
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.Lif
leetcode: sort list
michelle_0916
Algorithm linked list sort
Sort a linked list in O(n log n) time using constant space complexity.
====analysis=======
mergeSort for singly-linked list
====code======= /**
* Definition for sin
nginx的安装与配置,中途遇到问题的解决
qifeifei
nginx
我使用的是ubuntu13.04系统,在安装nginx的时候遇到如下几个问题,然后找思路解决的,nginx 的下载与安装
wget http://nginx.org/download/nginx-1.0.11.tar.gz
tar zxvf nginx-1.0.11.tar.gz
./configure
make
make install
安装的时候出现
用枚举来处理java自定义异常
tcrct
java enum exception
在系统开发过程中,总少不免要自己处理一些异常信息,然后将异常信息变成友好的提示返回到客户端的这样一个过程,之前都是new一个自定义的异常,当然这个所谓的自定义异常也是继承RuntimeException的,但这样往往会造成异常信息说明不一致的情况,所以就想到了用枚举来解决的办法。
1,先创建一个接口,里面有两个方法,一个是getCode, 一个是getMessage
public
erlang supervisor分析
wudixiaotie
erlang
当我们给supervisor指定需要创建的子进程的时候,会指定M,F,A,如果是simple_one_for_one的策略的话,启动子进程的方式是supervisor:start_child(SupName, OtherArgs),这种方式可以根据调用者的需求传不同的参数给需要启动的子进程的方法。和最初的参数合并成一个数组,A ++ OtherArgs。那么这个时候就有个问题了,既然参数不一致,那