Submitted by gouki on 2008, August 24, 5:17 PM
从MYSQL4.1开始,它终于支持了外键。在数据库设计中,主键和外键是一种能够把多个表组织为一个有效的关系数据库的粘合剂。它们的设计良好与否对数据库的性能和可用性有着决定性的影响。
不得不说的是,在系统设计的时候,必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。毕竟,一旦将所设计的数据库用于了生产环境,就很难对他们进行修改,因此,在开发阶段设计好主键和外键就显得犹为重要。
对于主键而言,它是不可被重复的,而且尽量不包含特殊含义,毕竟主键的使用只是为了让数据库多一条高效的索引,而且在被外部引用的时候不会产生重复。同样重要的是主键最好不要和其他键一起组成复合主键,而应该单独用一列来表示。
正因为主键的特殊性,所以在大多数情况下我们都采用了自增字段来表示(但由于前台应用的特殊性,建议在表字段中增加一列有唯一约束的字段,用作前台显示用。比如,原来查看新闻可能是:news.php?newsId=123,这样别人很容易猜出下一条是124,前一条是122,平时这样使用是无所谓,但如果是使用在订单上,别人就很容易知道你的订单数量等,如果采用了GUID这样的值,虽然看起来复杂了一点,但永远不会被人猜出你的订单)
当然主键也可以使用这种GUID来进行设定,但确实是不太建议使用,我主要是指MYSQL,因为MYSQL默认没有默认生成这样键值的函数。而且使用定长字符串做主键,在被外部引用的时候,就显得太长了。
而外键就相对来说比主键约束要小的多,但也是有一定规范的。比如,用主键作外键,这是大多数人的用法。即使在MYSQL尚未支持外键的时候,大多数情况下。也都是通过这样的方式来进行关联。
在使用外键的时候,一般建议是不要超过4张表关联,超过4张,可能你在某些个表里就纯粹看到的是ID记录(类似于数据库的索引),这个时候麻烦的问题就来了。该如何维护这样一个全是ID记录的表呢?一旦这个表被人误操作了。那么。所有的数据都将失去关联了。(如果数据库支持外键功能,在删除这样的外键关联数据,我记得是会出错的。)
外键,除了使用主键外,还有就是那种具有唯一索引的列,仔细想想也确实这样,如果没有唯一,那么关联出来的数据怎么能够具有唯一性?
利用外键进行数据的更新删除,应该是最方便的了。这样也可以避免数据库里会存在冗余数据。
——END——
纯粹是在这里发发牢骚,真正的表设计不是这么简单的。还要根据实际的应用,但这些可以算是一些小小的经验。也许在真正的高手眼里这些都不值一提。但,千里马常有,而伯乐不常有啊。很多人都认为是理所当然的事情,不代表我们这些新手就明白。
记录下来,作为参考,也算是一个笔记
Tags: mysql, primary key, index key, foreign key, design
DataBase | 评论:1
| 阅读:30773
Submitted by gouki on 2008, August 23, 10:02 PM
看新闻的时候,突然看到phpmyadmin出了3.0beta版本,只是好象新版本是基于5.2开发的。源码地址为:http://internap.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-3.0.0-beta-all-languages.zip,大家可以去下载,如果不能下载,可以先到:http://sourceforge.net/projects/phpmyadmin/,找到3.0beta版进行下载。
对于使用PHP进行开发的人员来说,phpmyadmin可以说是最常用的工具之一。其重要性不亚于一个好的IDE所带来的功效。
SF上面如此提示:
Welcome to the beta release of phpMyAdmin 3.0.0. This version supports various features of MySQL 5.1, the Maria and PBXT storage engines and
SweKey hardware authentication. The 3.0 series requires PHP 5.2+ and MySQL 5.0+.
看到cnbeta上有人评价说:phpmyadmin不是利器,而是神器。心中亦有此感啊。
下载源码,学习一下。oh yeah
Tags: phpmyadmin, php, mysql, database, management
PHP | 评论:0
| 阅读:20825
Submitted by gouki on 2008, August 23, 9:25 AM
虽然我至今为止还不能熟练使用delphi,但不代表我就不关心他。这不,我看到了最新的消息,马上就公布于众了。哇哈哈哈
Delphi 2009 and C++Builder 2009 will be available on Aug. 25 with North American pricing beginning at $399 per license for Professional editions, $1,299 for Enterprise editions and $2,299 for Architect editions.
Embarcadero Technologies从borland公司收购其子公司CodeGear以后将发布新一版本的delphi和C++Builder, Delphi 2009 and C++Builder 2009 for Windows正式版将于8月25号发布.
Embarcadero称这一是多年来改进最大的一个版本。
个人版3000元左右,好象在开发工具里面确实不是很贵。但。。。还会有多少人使用是个问题。而且据说delphi每次更新都需要重新购买授权?而且是有一定的装机次数的。如果是这样,那就贵很多了
Tags: delphi, software, borand, codegear
Software | 评论:0
| 阅读:19614
Submitted by gouki on 2008, August 23, 9:02 AM
不多说啥了。在网上看到这篇文章,难得是有详细介绍的。。虽然这个功能我很多时候其实已经在用了,但。那都是直接拿来用的,并没有深刻的研究过。今天这里终于看到一个有注释的,就贴上来看看。
这种用法,是被YAHOO所推荐的。因为。这样的用法,降低了图片的下载量。而且并在一起,并不会给图片的大小增加很多。
原文:http://iruif.cn/swd/?p=25
这里只贴重要的内容。请原作者不要伤心。谢谢
图片文件为:
首先我们得控制好要应用小图标的对象的高度. 否则到时候这个图标就会显示异常了.
比如说我们要给 li 标签使用这个小东东, 那么我们就得写上这样的代码:
CSS代码
- li {
- height: 12px;
- line-height: 12px;
- background: url('icons.gif') 0 -12px;
- padding-top: 0;
- padding-bottom: 0;
- padding-left: 14px;
- margin: 2px 0;
- overflow: hidden;
- }
显然, 把小图标都放到一个文件里的话会带来很多的问题. 比如要限定宽度和高度 [也就是内容会显示不完整] , 并且 padding 也将无法使用 [也就是会影响到 border 等属性的效果] .
当然也有解决办法. 那就是 — 把每个小图标的距离拉开, 或者干脆把他们都拆成单独的文件..
如果不明白可以问问原作者。。。
Tags: css, 背景色, position
Javascript | 评论:0
| 阅读:23072
Submitted by gouki on 2008, August 22, 9:33 AM
以前我写过一篇测试播放器的文章,当然,在我自己的网站是正常了。正好遇到一朋友需要在supesite下面为每篇文章增加不同的背景音乐,于是调试了一下。由于supesite的编辑器会自动过滤一些标签,最终我的处理方案如下:
1、先选中编辑器状态栏中的“源代码”,点击后,输入
<div id='audio_file' style="display:none">aaa.mp3</div> |
其中,aaa.mp3就是你要播放的音乐文件,默认在根目录下的music目录里,如果你在里面建立了目录hongkong来存放香港歌英,则aaa.mp3就变成了hongkong/aaa.mp3,即在文件名前要加上目录路径,id=audio_file不能被改变,
2、取消选中源代码,继续编辑你的文章,这时候刚才的 aaa.mp3 会显示在内容里,不用理会他,成功后不会影响文件的编辑的。或者,你也可以在文件内容编辑完毕后,再选中源代码,在源代码的最上面加入这一行就行了。
3、在模版里加上相应的代码
XML/HTML代码
- <script language="JavaScript" src="http://www.xxxx.com/public/audioplayer.js"></script>
- <script>
- try
- {
- var audio = document.getElementById('audio_file');
- if(audio.innerText != ''){
- var audio_flash = 'http://www.xxxxx.com/public/player.swf';
- var audio_vars = {};
- audio_vars.soundFile = 'http://www.xxxxx.com/music/' + audio.innerText;
- audio_vars.loop = 'yes';
- audio_vars.autostart = 'yes';
- set_audioplayer( audio_flash , audio_vars );
- }
- }
- catch (e){}
-
- </script>
4、成功……现在测试
具体的代码就不提供了。网上应该是有的下载。。。。只是提供这个解决方法。
演示地址:http://www.l2foto.com/s/?action-viewnews-itemid-4
Tags: supesite, 背景音乐, mp3播放器
Software | 评论:2
| 阅读:21665