COMP9311 Database Systems Lab2&3

Summary

在lab1基礎(chǔ)上把一個(gè)ER design應(yīng)用postgreSQL實(shí)現(xiàn)狸剃。

1.Download files

(1)應(yīng)用lab1方法進(jìn)入實(shí)驗(yàn)路徑

(1) ssh z1234567@login.cse.unsw.edu.au
(2)輸入密碼
(3)ssh grieg
(4)source /srvr/z1234567/env
(5)pgs start
(6)cd /srvr/z1234567

(2)拷貝schema, data, bad

cp /home/cs9311/web/17s2/labs/02/schema.sql /home/cs9311/web/17s2/labs/02/data.sql /home/cs9311/web/17s2/labs/02/bad.sql /srvr/z1234567

2.Create and load database

(1)創(chuàng)建database company

createdb company

注:create database的語(yǔ)法是createdb [connection-option...] [option...] [dbname [description]]裳擎,例如create the database demo using the server on host eden, port 5000, using the LATIN1 encoding scheme:

createdb -p 5000 -h eden -E LATIN1 -e demo

(2)load schema.sql到database company

psql company -f schema.sql

(3)check
進(jìn)入company database

psql company

重要:database中和terminal中都可以操作數(shù)據(jù)庫(kù)丧鸯,但是命令截然不同。后續(xù)lab中募壕,所有psql開(kāi)頭的命令都是在terminal中運(yùn)行的,database的prompt是:
“database名稱”=#,
例如company=#
退出database的方法是輸入\q后回車
database中的load方法是輸入\i "需要load的文件名"坏怪,
例如\i schema.sql

顯示所有table

\d

顯示table的所有attributes

\d "table名稱"
例如\d employees

顯示table中所有instances

select * from "table名稱";
注意不要忘記語(yǔ)句末尾的分號(hào),例如
select * from employees;

(4)load valid data到database company
和上文方法一致

psql company -f data.sql
或者
\i data.sql
根據(jù)上文重要部分的提示根據(jù)情況選擇命令

(5)load invalid data到database company
和上文方法一致

psql company -f bad.sql
或者
\i bad.sql
根據(jù)上文重要部分的提示根據(jù)情況選擇命令

3.drop previous database and modify documents

由于schema的數(shù)據(jù)庫(kù)搭建沒(méi)有限定绊茧,產(chǎn)生了很多錯(cuò)誤數(shù)據(jù)铝宵,比如有人一周工作時(shí)間是小于0的,所以刪除之前的company database再修改schema
(1)刪除company database

dropdb company
注意一定要在terminal中運(yùn)行該命令华畏。

(2)修改schema
先進(jìn)入修改VIM編輯器

vim schema.sql

鍵盤(pán)i進(jìn)入編輯狀態(tài)鹏秋,編輯好之后esc退出編輯狀態(tài),:wq保存退出亡笑。

create table Employees (
        tfn         char(11) check (tfn ~ '^(\d{3}-){2}\d{3}$'),
        --^是開(kāi)始侣夷,\d是數(shù)字,{3}是三次仑乌,(\d{3}-)重復(fù)2次百拓,$是結(jié)束
        givenName   varchar(30) not null,
        --not null不能是空的琴锭,完全關(guān)系total participation
        familyName  varchar(30),
        hoursPweek  float check (hoursPweek <= 168 AND hoursPweek >= 0),
        primary key (tfn)
);

create table Departments (
        id          char(3) check (id ~ '^\d{3}$'),
        name        varchar(100) unique,
        manager     char(11) unique not null,
        primary key (id),
        foreign key (manager) references Employees(tfn)
);

create table DeptMissions (
        department  char(3) references Departments(id),
        keyword     varchar(20),
        primary key (department, keyword)
);

create table WorksFor (
        employee    char(11) not null references Employees(tfn),
        department  char(3) references Departments(id),
        percentage  float check (percentage <= 100 AND  percentage >= 0),
        primary key (employee, department)
);

create function check_worksfor_insert()
    returns trigger as $$
    declare
        percentage1 float;
        percentage2 float;
    begin
        select into percentage1 sum(percentage)
        from WorksFor
        where employee = New.employee;
        percentage2 = percentage1 + New.percentage;
        if percentage2 > 100 then
            raise exception 'work percentage cannot exceed 100 percent';
        end if;
        return New;
    end;
$$ language plpgsql;

create trigger sum_of_percentage before insert or update on WorksFor for each row execute procedure check_worksfor_insert();

(3)修改data
同時(shí)注意還要修改data的輸入順序:

vim data.sql
insert into Employees values ('777-654-321','Yusif','Budianto',40.0);
insert into Employees values ('123-987-654','Maria','Orlowska',40.0);
insert into Employees values ('323-626-929','Tom','Robbins',35.0);
insert into Employees values ('993-893-864','Susan','Ryan',60.0);
insert into Employees values ('419-813-573','Max','Schmidt',40.0);
insert into Employees values ('222-333-444','Pradeep','Sharma',30.0);
insert into Employees values ('123-234-456','John','Smith',40.0);
insert into Employees values ('632-647-973','Steven','Smooth',45.0);
insert into Employees values ('747-400-123','Adam','Spencer',50.0);
insert into Employees values ('326-888-711','Walter','Wong',50.0);

insert into Departments values ('001','Administration','123-234-456');
insert into Departments values ('002','Sales','222-333-444');
insert into Departments values ('003','Research','326-888-711');

insert into DeptMissions values ('001','innovation');
insert into DeptMissions values ('001','reliability');
insert into DeptMissions values ('001','profit');
insert into DeptMissions values ('002','customer-focus');
insert into DeptMissions values ('002','growth');
insert into DeptMissions values ('003','innovation');
insert into DeptMissions values ('003','technology');

insert into WorksFor values ('777-654-321','003',100);
insert into WorksFor values ('123-987-654','003',100);
insert into WorksFor values ('323-626-929','001',50);
insert into WorksFor values ('323-626-929','002',50);
insert into WorksFor values ('993-893-864','001',100);
insert into WorksFor values ('419-813-573','003',100);
insert into WorksFor values ('222-333-444','002',100);
insert into WorksFor values ('123-234-456','001',100);
insert into WorksFor values ('632-647-973','002',100);
insert into WorksFor values ('747-400-123','001',10);
insert into WorksFor values ('747-400-123','002',90);
insert into WorksFor values ('326-888-711','003',100);

VIM中cut, copy和paste的操作:
1.光標(biāo)放置于要cut/copy的開(kāi)始位置;
2.鍵盤(pán)v復(fù)制character耐版;鍵盤(pán)V復(fù)制whole line祠够;鍵盤(pán)Ctrl-v選擇rectangular blocks;
3.光標(biāo)放置于要cut/copy的結(jié)束位置粪牲;
4.鍵盤(pán)d是cut(d是delete)古瓤;鍵盤(pán)y是copy(y是yank);
5.光標(biāo)放置于要paste的位置腺阳;
6.鍵盤(pán)p在光標(biāo)后paste落君;鍵盤(pán)P在光標(biāo)前paste

(4)編輯好后重新運(yùn)行:

createdb company
psql company
\i schema.sql
\i data.sql
\i bad.sql
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市亭引,隨后出現(xiàn)的幾起案子绎速,更是在濱河造成了極大的恐慌,老刑警劉巖焙蚓,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纹冤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡购公,警方通過(guò)查閱死者的電腦和手機(jī)萌京,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宏浩,“玉大人知残,你說(shuō)我怎么就攤上這事”茸” “怎么了求妹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)佳窑。 經(jīng)常有香客問(wèn)我制恍,道長(zhǎng),這世上最難降的妖魔是什么神凑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任吧趣,我火速辦了婚禮,結(jié)果婚禮上耙厚,老公的妹妹穿的比我還像新娘强挫。我一直安慰自己,他們只是感情好薛躬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布俯渤。 她就那樣靜靜地躺著,像睡著了一般型宝。 火紅的嫁衣襯著肌膚如雪八匠。 梳的紋絲不亂的頭發(fā)上絮爷,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音梨树,去河邊找鬼坑夯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抡四,可吹牛的內(nèi)容都是我干的柜蜈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼指巡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼淑履!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起藻雪,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤秘噪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后勉耀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體指煎,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年便斥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了至壤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椭住,死狀恐怖崇渗,靈堂內(nèi)的尸體忽然破棺而出字逗,到底是詐尸還是另有隱情京郑,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布葫掉,位于F島的核電站些举,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏俭厚。R本人自食惡果不足惜户魏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挪挤。 院中可真熱鬧叼丑,春花似錦、人聲如沸扛门。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)论寨。三九已至星立,卻和暖如春爽茴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绰垂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工室奏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劲装。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓胧沫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親酱畅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子琳袄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容