今天原本要继续研究爬虫,使我们的资料库内的资料更为逼真(其实大可不必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');
小结
好累啊~~~两点多惹!