Monday, October 13, 2008
Saturday, October 11, 2008
Get Computed Style Attribute
when a dom style has been setted more than one times in css file, the final style should be computed, such as:
css file:
#abc{
color: red;
}
div #abc{
color: red;
}
html file:
...
<div><span id='abc'>text in span...</span></div>
...
js code:
var spanEl = document.getElementById('abc');
var ret = document.defaultView.getComputedStyle( spanEl, null );
var color = ret.getPropertyValue("color");
so we can get the right style which appled to dom.
css file:
#abc{
color: red;
}
div #abc{
color: red;
}
html file:
...
<div><span id='abc'>text in span...</span></div>
...
js code:
var spanEl = document.getElementById('abc');
var ret = document.defaultView.getComputedStyle( spanEl, null );
var color = ret.getPropertyValue("color");
so we can get the right style which appled to dom.
Labels:
computed dom style,
getComputedStyle,
getPropertyValue,
小楼听雨
js简单继承的实现 - 网上做法修正篇
网上有些继承prototype实现上有bug例如:
function base() {this.member = ["dnnsun_Member",2,3,4];
}
var child=function(){
};
child.prototype=new base;
var c1 = new child();
var c2 = new child();
c1.member[1]=333;
alert(c2.member[1]);
结果是: 333
base中如果有集合, 对象属性, 这种简单继承导致的后果是所有的child的实例都共享了base的同一个member属性. 所以要尽量避免此种情况, 尽量在父类中只是定义方法, 变量改为传入的方式. 估计这也是为什么jquery, ext等框架不强制继承的子类必须subclass_instance instanceof superclass==true的原因.
Event driven web application - javascript event bus
I implemented a javascript event bus for asynchronized web application, and this article hasn't any relationship with Ajax and Dom events
Using Event bus benefit your web application development, such as:
I have two components in my web app, one is a tree, another is a grid list, when current highlighted tree node was been deleted, the grid list should load it's next sibling node's data.
normally, we could write in tree.js:
//delete current hightlighted tree node
...
GridList.clear();
GridList.load(next_sibling_node.name)
...
but GridList was defined in grid.js, so tree and grid moudle was high coupled.
in new asynchronized web application. we can write in tree.js:
//delete current hightlighted tree node
EventBus.publish("tree-node-deleted", node);
and write in grid.js:
EventBus.subscribe("tree-node-deleted", function(argObj){
GridList.clear();
GridList.load(argObj.name)
});
I think this is a good experence in web development.
Using Event bus benefit your web application development, such as:
- low coupling between moudles
- flexible event dispatcher
- partible bussiness logic
- consistent code style
I have two components in my web app, one is a tree, another is a grid list, when current highlighted tree node was been deleted, the grid list should load it's next sibling node's data.
normally, we could write in tree.js:
//delete current hightlighted tree node
...
GridList.clear();
GridList.load(next_sibling_node.name)
...
but GridList was defined in grid.js, so tree and grid moudle was high coupled.
in new asynchronized web application. we can write in tree.js:
//delete current hightlighted tree node
EventBus.publish("tree-node-deleted", node);
and write in grid.js:
EventBus.subscribe("tree-node-deleted", function(argObj){
GridList.clear();
GridList.load(argObj.name)
});
I think this is a good experence in web development.
Wednesday, October 08, 2008
利用event bus来降低前台业务代码耦合度, Event bus - javascript, js实现
/*
demo:
var observer = function(paramObj){
alert("bomb event comes!" + paramObj);
}
//add business event listener
EventBus.subscribe("tree-node-change",observer);
//remove business event listener
//EventBus.unsubscribe("tree-node-change",observer);
//publish business event
EventBus.publish("tree-node-change",{oldName:"abc", newName:"cdef", id: 123});
*/
/*
ReadMe:
Goal: Using business event dispatcher to reduce code couple between web moudle,
目标: 为了尽可能的减少模块之间业务逻辑的耦合度, 而开发了这个消息总线, 主要用于业务逻辑的事件传递
目标: 为了尽可能的减少模块之间业务逻辑的耦合度, 而开发了这个消息总线, 主要用于业务逻辑的事件传递
使用规范: 每个js模块尽可能通过事件去通信, 减少模块之间的直接调用和依赖(耦合)
*/
var EventBus = function(){
var observers={};
var publish=function(eventName, argObj){
var obs = observers[eventName];
if(!obs){
return;
}
for(var i=0;i<obs.length;i++){
obs[i](argObj);
}
}
var subscribe=function(eventName, observer){
var obs = observers[eventName];
if(!obs){
obs=[];
observers[eventName]=obs;
}
obs.push(observer);
}
var unsubscribe=function(eventName, observer){
var obs = observers[eventName];
if(!obs){
return;
}
for(var i=0;i<obs.length;i++){
if(obs[i]==observer){
obs.splice(i,1);
break;
}
}
}
var unsubscribeByObserver=function(observer){
for(var eventName in observers){
removeByName(eventName, observer);
}
}
return {
publish:publish,
subscribe:subscribe,
unsubscribe:unsubscribe,
subscribeByObserver:unsubscribeByObserver
}
}();
Labels:
decouple,
event bus,
javascript,
js,
js event bus,
xlty,
小楼听雨
Monday, October 06, 2008
[转] 小三的爱情扒皮必修课 - 画皮精彩影评
说是,小三必修课
其实,是所有情场中人的扒皮戏。
《画皮》是一个惊喜,有些是无心,有些是故意。
因为戏路太善良,我们总是忍不住笑场。
然而,面对,那些太刻意的真情告白……我们如果不笑,难道要跟着哭吗?
这场戏,需要些时间沉淀,然后,就有人像我们回忆八十年代的港片一样来回忆这张《画皮》。
不如把笑点抖一抖,顺便帮着大家扭曲一下逻辑。
这个故事告诉我们生活中的许多大道理。
故事的基本结构是这样的。
陈坤和甄子丹本来是战友,两个人都喜欢赵薇。赵薇选择了嫁给陈坤,甄子丹愤而远走。
画皮定律一:再好的朋友,抢一个心上人,也会翻脸。无论男女。
陈坤救了一个女人周迅回家。周迅其实是妖怪。
画皮定律二:如果一个有家的男人把一个单身女子带回家,这绝对是场冒险,不管这个姑娘会不会画皮。
赵薇怀疑陈坤喜欢周迅,进而发觉周迅来了之后,城里开始死人。认准周迅就是妖怪,
画皮定律三:如果一个女人发现自己的男人外面有了女人,那么到处跟人说那个女人是狐狸精,只能显得自己像个疯子,太小气。
但是没有人相信她。她写信喊来了甄子丹。
画皮定律四:还是去找自己的旧情人,是正路!(找旧情人来干什么,看你的兴趣)
周迅想嫁给陈坤,不是做妾,而是做夫人。
画皮定律五:如果一个小三,喜欢上了一个有妇之夫,又不像只是玩一玩就吃掉他,而是想要个名分,会搞得三个人都很凄惨。
甄子丹来了,降魔者孙丽也来了,孙丽看着甄子丹很有感觉,甄子丹对孙丽也有点感觉。
画皮定律六:男人终究是要变心的,不管他当初多么爱你,只不过是动手没动手的差别,而且,总是有更年轻的姑娘出现的!!
还有个蜥蜴精追随周迅而来,蜥蜴精爱着狐狸精周迅,周迅不喜欢他。
画皮定律七:讨厌长得不帅的男人,女人讨厌"长舌头"的男人,讨厌知道自己当年底细的男人,讨厌,吃的东西,跟自己口味不同的男人……之后数条,都是第一条的借口。
甄子丹表示自己相信赵薇,赵薇说甄子丹是个好人。
画皮定律八:如果一个人给你发了"好人卡",基本来说,这个人打算送死你去,吃定你一辈子了。不知道逃的,是傻瓜。
周迅想色诱陈坤,蜥蜴精吃醋,进攻陈坤,大闹府里。
画皮定律九:在两个女人之间摇摆的男人,比较吃香。在两个男人之间摇摆的女人,其实比较危险。女人斗心计,男人斗体力。
蜥蜴精又进攻赵薇,关键时刻,陈坤选择去保护赵薇。
画皮定律十:所有的男人,都会先考虑自己的老婆的,小三们的悲哀…… 其实,不是因为他更看重老婆,而是他的身份促使他必须先救自己的老婆,否则,会被人说,没有人味。
周迅终于明白,陈坤更在乎身为老婆的赵薇。
画皮定律十一:情人早晚会发现真相的,这个时候,怎么选择,能比较出一个人的智商。
于是周迅直接胁迫赵薇离开,逼赵薇服毒。
画皮定律十二:偷情的乐趣,就在于偷偷摸摸,有人争抢的感觉比较刺激,直接逼宫……注定是悲剧
…………正邪开始大决战!!
所谓,凡事,不能十三点。那就到此为止吧。
爱情这种事情,都不能仔细推敲,一推敲,就千疮百孔。
-- 爆音爆食 发布于:2008-09-23 22:37
其实,是所有情场中人的扒皮戏。
《画皮》是一个惊喜,有些是无心,有些是故意。
因为戏路太善良,我们总是忍不住笑场。
然而,面对,那些太刻意的真情告白……我们如果不笑,难道要跟着哭吗?
这场戏,需要些时间沉淀,然后,就有人像我们回忆八十年代的港片一样来回忆这张《画皮》。
不如把笑点抖一抖,顺便帮着大家扭曲一下逻辑。
这个故事告诉我们生活中的许多大道理。
故事的基本结构是这样的。
陈坤和甄子丹本来是战友,两个人都喜欢赵薇。赵薇选择了嫁给陈坤,甄子丹愤而远走。
画皮定律一:再好的朋友,抢一个心上人,也会翻脸。无论男女。
陈坤救了一个女人周迅回家。周迅其实是妖怪。
画皮定律二:如果一个有家的男人把一个单身女子带回家,这绝对是场冒险,不管这个姑娘会不会画皮。
赵薇怀疑陈坤喜欢周迅,进而发觉周迅来了之后,城里开始死人。认准周迅就是妖怪,
画皮定律三:如果一个女人发现自己的男人外面有了女人,那么到处跟人说那个女人是狐狸精,只能显得自己像个疯子,太小气。
但是没有人相信她。她写信喊来了甄子丹。
画皮定律四:还是去找自己的旧情人,是正路!(找旧情人来干什么,看你的兴趣)
周迅想嫁给陈坤,不是做妾,而是做夫人。
画皮定律五:如果一个小三,喜欢上了一个有妇之夫,又不像只是玩一玩就吃掉他,而是想要个名分,会搞得三个人都很凄惨。
甄子丹来了,降魔者孙丽也来了,孙丽看着甄子丹很有感觉,甄子丹对孙丽也有点感觉。
画皮定律六:男人终究是要变心的,不管他当初多么爱你,只不过是动手没动手的差别,而且,总是有更年轻的姑娘出现的!!
还有个蜥蜴精追随周迅而来,蜥蜴精爱着狐狸精周迅,周迅不喜欢他。
画皮定律七:讨厌长得不帅的男人,女人讨厌"长舌头"的男人,讨厌知道自己当年底细的男人,讨厌,吃的东西,跟自己口味不同的男人……之后数条,都是第一条的借口。
甄子丹表示自己相信赵薇,赵薇说甄子丹是个好人。
画皮定律八:如果一个人给你发了"好人卡",基本来说,这个人打算送死你去,吃定你一辈子了。不知道逃的,是傻瓜。
周迅想色诱陈坤,蜥蜴精吃醋,进攻陈坤,大闹府里。
画皮定律九:在两个女人之间摇摆的男人,比较吃香。在两个男人之间摇摆的女人,其实比较危险。女人斗心计,男人斗体力。
蜥蜴精又进攻赵薇,关键时刻,陈坤选择去保护赵薇。
画皮定律十:所有的男人,都会先考虑自己的老婆的,小三们的悲哀…… 其实,不是因为他更看重老婆,而是他的身份促使他必须先救自己的老婆,否则,会被人说,没有人味。
周迅终于明白,陈坤更在乎身为老婆的赵薇。
画皮定律十一:情人早晚会发现真相的,这个时候,怎么选择,能比较出一个人的智商。
于是周迅直接胁迫赵薇离开,逼赵薇服毒。
画皮定律十二:偷情的乐趣,就在于偷偷摸摸,有人争抢的感觉比较刺激,直接逼宫……注定是悲剧
…………正邪开始大决战!!
所谓,凡事,不能十三点。那就到此为止吧。
爱情这种事情,都不能仔细推敲,一推敲,就千疮百孔。
-- 爆音爆食 发布于:2008-09-23 22:37
Saturday, October 04, 2008
js简单继承的实现, 改进篇
前文表述: js简单继承的实现
前文问题:alert(child instanceof base); 打印false, 此处并没有实现真正的继承
改进:
function base() {
this.member = "dnnsun_Member";
this.test=function(){
window.alert('in base');
}
}
base.prototype.test= function() {
window.alert("base member "+this.member);
}
function extend(child, b) {
b.call(child);
child.prototype=new b;
}
var childclass=function(){
this.test=function(){
window.alert("in child");
}
};
extend(childclass, base);
child = new childclass;
window.alert(child.member);
window.alert(child.test);
child.test();
window.alert(child instanceof base);
不能没有doctype
* 有他的好处, 我这里放下不表, 今天就说说没有他时, 在开发中遇到的问题
* 在不同的浏览器下网页莫名其妙的布局问题
* document.body与document.documentElement谁的属性是准的?
* scrollLeft
* Right
* Top
* Bottom
Thursday, October 02, 2008
Friday, September 19, 2008
Monday, September 15, 2008
Saturday, September 13, 2008
Ubuntu下映射windows系统中的硬盘盘符为固定名称, 并且可读写
修改/etc/fstab, 加入映射:
/dev/hda1 /media/c rw,relatime,user_i=0,group_id=0,nosuid,nodev,noatime,allow_other,ntfs 0 0
/dev/hda5 /media/d rw,relatime,user_i=0,group_id=0,nosuid,nodev,noatime,allow_other,ntfs 0 0
/dev/hda6 /media/e rw,relatime,user_i=0,group_id=0,nosuid,nodev,noatime,allow_other,ntfs 0 0
即可
/dev/hda1 /media/c rw,relatime,user_i=0,group_id=0,nosuid,nodev,noatime,allow_other,ntfs 0 0
/dev/hda5 /media/d rw,relatime,user_i=0,group_id=0,nosuid,nodev,noatime,allow_other,ntfs 0 0
/dev/hda6 /media/e rw,relatime,user_i=0,group_id=0,nosuid,nodev,noatime,allow_other,ntfs 0 0
即可
Thursday, September 11, 2008
晒一下用trac打造的任务管理+需求管理平台
- 基础
所需要组件(在http://trac-hacks.org都能找到):
1. Trac 0.11.1 这个是必须的了
2. BatchModify 0.2.0 ticket批量修改工具
3. BreadCrumbsNavPlugin 0.1 最近访问的页面链接
4. ComponentsListMacro 在wiki上列出所有的components
5. PrivateWikis 1.0.0 基于path的wiki权限管理(trac-hacks上的不能工作, 需要修改一下, 需要patch请联系我)
6. TicketBox 0.11.1 在wiki上列出tickets, 可以用来动态生成报告
7. TicketValidator 0.1 ticket字段验证, 比如close状态时, 某个字段不能为空
8. TracAddCommentMacro 0.3 wiki comment插件
9. TracCustomRoadmap 0.4 custom roadmap
10. TracDiscussion 0.6 论坛
11. TracFullBlogPlugin 0.1 博客
12. TracMacroPost 0.2 wiki comment 依赖
13. TracTags 0.6 tag组件, 页面右下角显示tag, 可以形成tag云
14. TracTocMacro 11.0.0.3 Title of Content, 用来形成简洁的wiki页面index
15. TracWysiwyg 0.2 所见即所得wiki编辑器
16. TracXMLRPC 1.0.0 用来支持eclipse mylyn插件的rpc接口
17. Ticket-clone 顾名思义, 用来克隆ticket
18. Testingworkflow 测试工作流
- 用途
* 任务管理
* 增加ticket timing控制字段(开发人员实际用时, PM估计用时, 开发人员估计用时)
* 启用测试工作流
* 自定义扩展Priority中的Delay属性
* 增加
* Urgent
* Middle Term
* Long Term
* 自定义扩展Type属性(New, Bug, Improvement)
* 增加
* Ondemand Feature
* Discussion Feature
* 自定义各种形式的report
* Running Task(正在做的任务)
* Under Testing(等待测试区)
* Urgent Delay(紧急Delay的任务)
* 自定义components
* 增加
* 命名: PM
* 其他必须的component
* 需求管理
* 新需求形成需求ticket, Component=PM的为项目需求, Priority=Urgent/Middle Term/Long Term为讨论优先级
* 讨论通过需求ticket即刻被分解形成任务tickets
* 需求管理报告
* Discussion(等待讨论的需求)
* Wiki
* 管理系统需求, api文档
* 项目的knowledge base
* Blog
* 通知
* 新闻
* team成员原创的技术文章
* Discussion
* 五花八门forum
* 八卦信息
所需要组件(在http://trac-hacks.org都能找到):
1. Trac 0.11.1 这个是必须的了
2. BatchModify 0.2.0 ticket批量修改工具
3. BreadCrumbsNavPlugin 0.1 最近访问的页面链接
4. ComponentsListMacro 在wiki上列出所有的components
5. PrivateWikis 1.0.0 基于path的wiki权限管理(trac-hacks上的不能工作, 需要修改一下, 需要patch请联系我)
6. TicketBox 0.11.1 在wiki上列出tickets, 可以用来动态生成报告
7. TicketValidator 0.1 ticket字段验证, 比如close状态时, 某个字段不能为空
8. TracAddCommentMacro 0.3 wiki comment插件
9. TracCustomRoadmap 0.4 custom roadmap
10. TracDiscussion 0.6 论坛
11. TracFullBlogPlugin 0.1 博客
12. TracMacroPost 0.2 wiki comment 依赖
13. TracTags 0.6 tag组件, 页面右下角显示tag, 可以形成tag云
14. TracTocMacro 11.0.0.3 Title of Content, 用来形成简洁的wiki页面index
15. TracWysiwyg 0.2 所见即所得wiki编辑器
16. TracXMLRPC 1.0.0 用来支持eclipse mylyn插件的rpc接口
17. Ticket-clone 顾名思义, 用来克隆ticket
18. Testingworkflow 测试工作流
- 用途
* 任务管理
* 增加ticket timing控制字段(开发人员实际用时, PM估计用时, 开发人员估计用时)
* 启用测试工作流
* 自定义扩展Priority中的Delay属性
* 增加
* Urgent
* Middle Term
* Long Term
* 自定义扩展Type属性(New, Bug, Improvement)
* 增加
* Ondemand Feature
* Discussion Feature
* 自定义各种形式的report
* Running Task(正在做的任务)
* Under Testing(等待测试区)
* Urgent Delay(紧急Delay的任务)
* 自定义components
* 增加
* 命名: PM
* 其他必须的component
* 需求管理
* 新需求形成需求ticket, Component=PM的为项目需求, Priority=Urgent/Middle Term/Long Term为讨论优先级
* 讨论通过需求ticket即刻被分解形成任务tickets
* 需求管理报告
* Discussion(等待讨论的需求)
* Wiki
* 管理系统需求, api文档
* 项目的knowledge base
* Blog
* 通知
* 新闻
* team成员原创的技术文章
* Discussion
* 五花八门forum
* 八卦信息
Monday, September 08, 2008
javascript 正则表达式在线测试 (javascript regexp online demo)
javascript regexp online demo http://www.regular-expressions.info/javascriptexample.html
用js需要注意的问题:
1. new RegExp的时候, 要手动转义, 例如: \w应该写成\\w
2. 这种方式var reg=/\w/ig, 不用手动转义
* re = new RegExp("\\w+") 等价于 re = /\w+/
3. test, match和search的区别:
* test:
* regexp对象的方法: 快速的判断给定的str是否匹配pattern * search:
* string对象的方法: 快速的判断给定的str是否匹配pattern, 只返回第一个匹配的位置
* match:
* string对象的方法: 识别str中所有的pattern, 较前者速度稍慢
Tuesday, September 02, 2008
感觉自己到了珍惜时间的年纪了
以后就要被这些事情所累:
- 结婚
- 生子
- ...
还有好多事情没有干好:
- design pattern没看完
- 买的新书没看完
- python代码研究
- django web dev
- english
- ...
还有好多地方没有去:
- 大理
- us
- 欧洲
- ...
抓紧时间吧!
- 结婚
- 生子
- ...
还有好多事情没有干好:
- design pattern没看完
- 买的新书没看完
- python代码研究
- django web dev
- english
- ...
还有好多地方没有去:
- 大理
- us
- 欧洲
- ...
抓紧时间吧!
Thursday, August 14, 2008
Sunday, August 10, 2008
Friday, August 08, 2008
基于svn的cruise control config file
<?xml version="1.0" encoding="UTF-8"?>
<cruisecontrol>
<project name="test">
<bootstrappers>
<!-- 根据本地svn目录check -->
<svnbootstrapper localWorkingCopy="projects/${project.name}" username='yourname' password='yourpassword'/>
</bootstrappers>
<modificationset quietperiod="30">
<!-- 根据本地svn目录查找修改的代码文件 -->
<svn localWorkingCopy="projects/${project.name}" username='yourname' password='yourpassword'/>
</modificationset>
<schedule interval="300">
<!-- 定时构建, 标准ant -->
<ant buildFile="projects/${project.name}/build.xml" antHome="apache-ant-1.7.0" target='all'/>
</schedule>
<log>
<!-- 指定ant build log结果存放目录 -->
<merge dir="projects/${project.name}/target/test-results" />
</log>
<publishers>
<onsuccess>
<!-- 构建成功之后, 将bin移动到指定目录 -->
<artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar" />
</onsuccess>
<!-- htmlemail -->
<!-- email -->
</publishers>
<listeners />
</project>
</cruisecontrol>
<cruisecontrol>
<project name="test">
<bootstrappers>
<!-- 根据本地svn目录check -->
<svnbootstrapper localWorkingCopy="projects/${project.name}" username='yourname' password='yourpassword'/>
</bootstrappers>
<modificationset quietperiod="30">
<!-- 根据本地svn目录查找修改的代码文件 -->
<svn localWorkingCopy="projects/${project.name}" username='yourname' password='yourpassword'/>
</modificationset>
<schedule interval="300">
<!-- 定时构建, 标准ant -->
<ant buildFile="projects/${project.name}/build.xml" antHome="apache-ant-1.7.0" target='all'/>
</schedule>
<log>
<!-- 指定ant build log结果存放目录 -->
<merge dir="projects/${project.name}/target/test-results" />
</log>
<publishers>
<onsuccess>
<!-- 构建成功之后, 将bin移动到指定目录 -->
<artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar" />
</onsuccess>
<!-- htmlemail -->
<!-- email -->
</publishers>
<listeners />
</project>
</cruisecontrol>
Thursday, August 07, 2008
tomcat下单独设置某个app的access log
在project的META-INF目录下添加context.xml文件, 内容:
<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="appname_localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false" buffered="false"/> </Context>
这样就能够单独设置某个app的access log了
如果把这一段放到server.xml中, 那么就是记录所有app的access log:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="appname_localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false" buffered="false"/>
更详细的说明见文档
http://localhost:8080/docs/config/valve.html
<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="appname_localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false" buffered="false"/> </Context>
这样就能够单独设置某个app的access log了
如果把这一段放到server.xml中, 那么就是记录所有app的access log:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="appname_localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false" buffered="false"/>
更详细的说明见文档
http://localhost:8080/docs/config/valve.html
Wednesday, August 06, 2008
Django ORM 中ForeignKey生成sql的方式
django根据model的name按照字母序升序排序, 然后依次生成sql, 例如有model A, B, C, 此时A外键引用B, C外键引用B, 则生成的sql即为:
create table app_a(...)
create table app_b(...)
create table app_c(...reference app_b(...))
alter table app_a add foreign key fkey_name reference app_b(...))
create table app_a(...)
create table app_b(...)
create table app_c(...reference app_b(...))
alter table app_a add foreign key fkey_name reference app_b(...))
Subscribe to:
Posts (Atom)
