募的地专题开发日誌3-Oracle DB的外键

今天原本要继续研究爬虫,使我们的资料库内的资料更为逼真(其实大可不必XD),殊不知全忘了资料库的外键还没建置完成,一经提醒只好立马开工。整个晚上就这样飞走了,走了不少冤望路...

资料库外键的建立

还好后来总算把资料库的语法稍稍微搞懂了,最刚开始是外键没设,只建立了表格、自增主键、一些假资料。这样是很爽没错,咻~~一声组员的资料收一收,小bug修一下,就这样建好了。还想说其实挺简单的啊!但是加上外键时才是痛苦的开始...

先说结论

最后,我把资料库的建立分成三部分

表格(需注意建立先后)、自增主键外键假资料(需注意输入先后)

这样做能降低相依性,也能分段debug,另外请组员交资料时,也才不会全部混在一起而提高整合的难度。不过这些都是摸索最后才得到的结论啦QAQ

爱捣乱的外键

因为有了为外键,表格们就有了阶层的关係。例如:会员与活动。一定要先有这个会员才能报名活动吧!可是啊...我们的表格算一算30个出头,也是个大工程啊!

基本语法

表格(需注意建立先后)、自增主键

这边我是拆开解释,我的做法是在DROP TABLE的部分,会依照表格阶层逆向排序。再来是DROP SEQUENCE一区,最后是各个TABLE的建立。

DROP TABLE MEM;DROP SEQUENCE MEM_seq;
CREATE TABLE MEM ( MEM_NO              VARCHAR2(45) NOT NULL, MEM_ACC             VARCHAR2(45), MEM_PWS             VARCHAR2(20), MEM_NAME            VARCHAR2(20), MEM_NICKNAME        VARCHAR2(60), MEM_PHONE           VARCHAR2(20), MEM_TEL             VARCHAR2(20), MEM_EMAIL           VARCHAR2(200), MEM_ADRS            VARCHAR2(200), MEM_STATUS          VARCHAR2(5), LOVE_POINTS         VARCHAR2(200), CONSTRAINT MEM_KEY PRIMARY KEY (MEM_NO));CREATE SEQUENCE MEM_seqINCREMENT BY 1START WITH 1NOMAXVALUENOCYCLENOCACHE;

外键

外键的建立因为将资料的书放到最后的关係,变得比较简单,下面的语法是在表格建立后所使用的。

-- 公益活动ALTER TABLE ACTIVITY ADD CONSTRAINT ACT_FK1 FOREIGN KEY (FDN_NO) REFERENCES FUNDATION(FDN_NO);ALTER TABLE ACTIVITY ADD CONSTRAINT ACT_FK2 FOREIGN KEY (ACT_SNO) REFERENCES ACTIVITY_SORT (ACT_SNO);ALTER TABLE ACTIVITY ADD CONSTRAINT ACT_FK3 FOREIGN KEY (ADM_NO) REFERENCES ADM(ADM_NO);

假资料(需注意输入先后)

输入假资料的部分则是要依照表格阶层顺向排序,这边我是分成LEVEL1~5来分区,以降低整合的难度。

-------------- LEVEL1 ---------------- ADM 管理员INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM1', '123456', '史瑞克', '1');INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM2', '123456', '史迪奇', '1');INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM3', '123456', '史努比', '1');INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM4', '123456', '史莱姆', '1');INSERT INTO ADM (ADM_NO, ADM_ACC, ADM_PSW, ADM_NAME, ADM_STATUS) VALUES ('A'||LPAD(to_char(ADM_seq.NEXTVAL), 6, '0'), 'ADM5', '123456', '史考特', '1');

小结

好累啊~~~两点多惹!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章