当前位置:文档之家› 数据库系统基础教程第九章答案

数据库系统基础教程第九章答案

数据库系统基础教程第九章答案
数据库系统基础教程第九章答案

9.3.1

a)

In the following, we use macro NOT_FOUND as defined in the section.

void closestMatchPC() {

EXEC SQL BEGIN DECLARE SECTION;

char manf, SQLSTATE[6];

int targetPrice, /* holds price given by user */

float tempSpeed, speedOfClosest;

char tempModel[4], modelOfClosest[4];

int tempPrice, priceOfClosest;

/* for tuple just read from PC & closest price found so far */

EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE pcCursor CURSOR FOR

SELECT model, price, speed FROM PC;

EXEC SQL OPEN pcCursor;

/* ask user for target price and read the answer into variable

targetPrice */

/* Initially, the first PC is the closest to the target price.

If PC is empty, we cannot answer the question, and so abort. */

EXEC SQL FETCH FROM pcCursor INTO :modelOfClosest, :priceOfClosest,

:speedOfClosest;

if(NOT_FOUND) /* print message and exit */ ;

while(1) {

EXEC SQL FETCH pcCursor INTO :tempModel, :tempPrice,

:tempSpeed;

if(NOT_FOUND) break;

if(/*tempPrice closer to targetPrice than is priceOfClosest */) {

modelOfClosest = tempModel;

priceOfClosest = tempPrice;

speedOfClosest = tempSpeed;

}

}

/* Now, modelOfClosest is the model whose price is closest to

target. We must get its manufacturer with a single-row select */

EXEC SQL SELECT maker

INTO :manf

FROM Product

WHERE model = :modelOfClosest;

printf("manf=%s, model=%d, speed=%d\n",

manf, modelOfClosest, speedOfClosest);

EXEC SQL CLOSE CURSOR pcCursor;

}

b)

void acceptableLaptop() {

EXEC SQL BEGIN DECLARE SECTION;

int minRam, minHd, minScreen; /* given by user */

float minSpeed;

char model[4], maker,

float speed;

int ram, hd, screen, price;

EXEC SQL END DECLARE SECTION;

EXEC SQL PREPARE query1 FROM

…SELECT model, speed, ram, hd, screen, price, maker

FROM Laptop l, Product p

WHERE speed >= ? AND

ram >= ? AND

hd >= ? AND

screen >= ? AND

l.model = p.model?

EXEC SQL DECLARE cursor1 CURSOR FOR query1;

/* ask user for minimum speed, ram, hd size, and screen size */

EXEC SQL OPEN cursor1 USING :minSpeed, :minRam, :minHd, :minScreen; while(!NOT_FOUND) {

EXEC SQL FETCH cursor1 INTO

:model, :speed, :ram, :hd, :screen, :price, :maker; if(FOUND)

{

printf("maker:%s, model:%d, \n

speed:%.2f, ram:%d, hd:%d, screen:%d, price:%d\n", maker, model, speed, ram, hd, screen, price);

}

}

EXEC SQL CLOSE CURSOR cursor1;

}

c)

void productsByMaker() {

EXEC SQL BEGIN DECLARE SECTION;

char maker, model[4], type[10], color[6];

float speed;

int ram, hd, screen, price;

EXEC SQL END DECLARE SECTION;

EXEC SQL PREPARE query1 FROM

…SELECT * FROM PC

WHERE model IN (SELECT model FROM Product

WHERE maker = ? AND

type = …pc?);

EXEC SQL PREPARE query2 FROM

…SELECT * FROM Laptop

WHERE model IN (SELECT model FROM Product

WHERE maker = ? AND

type = …laptop?);

EXEC SQL PREPARE query3 FROM

…SELECT * FROM Printer

WHERE model IN (SELECT model FROM Product

WHERE maker = ? AND

type = …printer?);

EXEC SQL DECLARE cursor1 CURSOR FOR query1;

EXEC SQL DECLARE cursor2 CURSOR FOR query2;

EXEC SQL DECLARE cursor3 CURSOR FOR query3;

/* ask user for manufacturer */

Printf(“maker:%s\n”, ma ker);

/* get PCs made by the manufacturer */

EXEC SQL OPEN cursor1 USING :maker;

Printf(“product type: PC\n”);

while(!NOT_FOUND) {

EXEC SQL FETCH cursor1 INTO

:model, :speed, :ram, :hd, :price;

if(FOUND)

{

printf("model:%d,speed:%.2f, ram:%d, hd:%d, price:%d\n”, model, speed, ram, hd, price);

}

}

/* get Laptops made by the manufacturer */

EXEC SQL OPEN cursor2 USING :maker;

Printf(“product type: Laptop\n”);

while(!NOT_FOUND) {

EXEC SQL FETCH cursor2 INTO

:model, :speed, :ram, :hd, :screen, :price;

if(FOUND)

{

printf("model:%d, speed:%.2f, ram:%d, hd:%d, screen:%d,

price:%d\n", model, speed, ram, hd, screen, price);

}

}

/* get Printers made by the manufacturer */

EXEC SQL OPEN cursor3 USING :maker;

Printf(“product type: Printer\n”);

while(!NOT_FOUND) {

EXEC SQL FETCH cursor3 INTO

:model, :color, :type, :price;

if(FOUND)

{

printf("model:%d, color:%s, type:%s, price:%d\n",

model, color, type, price); }

}

EXEC SQL CLOSE CURSOR cursor1;

EXEC SQL CLOSE CURSOR cursor2;

EXEC SQL CLOSE CURSOR cursor3;

}

d)

void withinBudget() {

EXEC SQL BEGIN DECLARE SECTION;

int total_budget, rest_budget, pc_price, printer_price;

char pc_model[4], printer_model[4], color[6];

float min_speed;

EXEC SQL END DECLARE SECTION;

EXEC SQL PREPARE query1 FROM

…SELECT model, price FROM PC

WHERE speed >= ? AND price <= ?

ORDER BY price?;

EXEC SQL PREPARE query2 FROM

…SELECT model, price FROM Printer

WHERE price <= ? AND color = ?

ORDER BY price?;

EXEC SQL DECLARE cursor1 CURSOR FOR query1;

EXEC SQL DECLARE cursor2 CURSOR FOR query2;

/* ask user for budget & the minimum speed of pc */

/* get the cheapest PC of the minimum speed */

EXEC SQL OPEN cursor1 USING :min_speed, :total_budget;

EXEC SQL FETCH cursor1 INTO :pc_model, :pc_price;

if (NOT_FOUND)

Printf(“no pc f ound within the budget\n”);

else

{

Printf(“pc model: %s\n”, pc_model);

}

/* get Printer within the budget */

rest_budget = total_budget – pc_price;

color = “true”;

EXEC SQL OPEN cursor2 USING :rest_budget, :color;

EXEC SQL FETCH cursor2 INTO :printer_model;

if(NOT_FOUND) {

EXEC SQL CLOSE CURSOR cursor2;

color = “false”;

EXEC SQL OPEN cursor2 USING :rest_budget, :color;

if(NOT_FOUND)

printf(“no printer found within the budget\n”);

else {

EXEC SQL FETCH cursor2 INTO :printer_model;

printf(“printer model: %s\n”, printer_model);

}

}

else {

printf(“printer model: %s\n”, printer_model);

}

EXEC SQL CLOSE CURSOR cursor1;

EXEC SQL CLOSE CURSOR cursor2;

}

e)

void newPCproduct() {

EXEC SQL BEGIN DECLARE SECTION;

char pmaker, pmodel[4], ptype[6];

float pspeed;

int pram, phd, pscreen, pprice;

int pcount;

EXEC SQL END DECLARE SECTION;

EXEC SQL PREPARE stmt1 FROM

…SELECT COUNT(*) INTO :count

FROM PC

WHERE MODEL = ?;

EXEC SQL PREPARE stmt2 FROM

…INSERT INTO Product VALUES(?, ?, ?)?;

EXEC SQL PREPARE stmt3 FROM

…INSERT INTO PC VALUES(?, ?, ?, ?, ?)?;

/* ask user for manufacturer, model, speed, RAM, hard-disk,

& price of a new PC */ EXEC SQL EXECUTE stmt1 USING :pmodel;

IF (count > 0)

Printf(“Warnning: The PC model already exists\n”);

ELSE

{

EXEC SQL EXECUTE stmt2 USING :pmaker, :pmodel, :ptype;

EXEC SQL EXECUTE stmt3 UINGNG :pmodel, :pspeed, :pram,

:phd, :pprice

}

}

9.3.2

a)

void largestFirepower() {

EXEC SQL BEGIN DECLARE SECTION;

char cclass[20], maxFirepowerClass[20];

int cnumGuns, cbore;

float firepower, maxFirepower;

EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE cursor1 CURSOR FOR

SELECT class, numGuns, bore FROM Classes;

EXEC SQL OPEN cursor1;

EXEC SQL FETCH FROM cursor1 INTO :cclass, :cnumGuns, :cbore;

if(NOT_FOUND) /* print message and exit */ ;

maxFirepower = cnumGuns * (power (cbore, 3));

strcpy(maxFirepowerClass, cclass);

while(1) {

EXEC SQL FETCH cursor1 INTO :cclass, :cnumGuns, :cbore;

if(NOT_FOUND) break;

firepower = cnumGuns * (power (cbore, 3));

if( firepower > maxFirepower )

{

maxFirepower = firepower;

strcpy(maxFirepowerClass, cclass);

}

}

printf("Class of maximum firepower :%s\n", maxFirepowerClass);

EXEC SQL CLOSE CURSOR cursor1;

}

b)

void getCountry() {

EXEC SQL BEGIN DECLARE SECTION;

char ibattle[20], iresult[10], ocountry[20];

char stmt1[200], stmt2[200];

EXEC SQL END DECLARE SECTION;

strcpy(stmt1, “SELECT COUNTRY FROM Classes C

WHERE C.class IN (

SELECT S.class FROM Ships S

WHERE https://www.doczj.com/doc/a813846223.html, IN (

SELECT ship FROM Outcomes

WHERE battle = ?))” );

Strcpy(stm2, “SELECT country FROM Classes

WHERE class = ( SELECT MAX(COUNT(class))

FROM Ships s, Outcomes o

WHERE https://www.doczj.com/doc/a813846223.html, = s.ship AND

s.result = …??)” );

EXEC SQL PREPARE query1 FROM stmt1;

EXEC SQL PREPARE query2 FROM stmt2;

EXEC SQL DECLARE cursor1 CURSOR FOR query1;

EXEC SQL DECLARE cursor2 CURSOR FOR query2;

/* ask user for battle */

/* get countries of the ships involved in the battle */

EXEC SQL OPEN cursor1 USING :ibattle;

while(!NOT_FOUND) {

EXEC SQL FETCH cursor1 INTO :ocountry;

if(FOUND)

printf("contry:%s\n”, ocoutry); }

EXEC SQL CLOSE CURSOR cursor1;

/* get the country with the most ships sunk */

strcpy(iresult, “sunk”);

EXEC SQL OPEN cursor2 USING :iresult;

/* loop for the case there?s the same max# of ships sunk */

While(!NOT_FOUND) {

EXEC SQL FETCH cursor2 INTO :ocountry;

If(FOUND)

Printf(“country with the most ships sunk: %s, ocountry);

}

/* get the country with the most ships damaged */

strcpy(iresult, “damaged”);

EXEC SQL OPEN cursor2 USING :iresult;

/* loop for the case there?s the same max# of ships damaged */

While(!NOT_FOUND) {

EXEC SQL FETCH cursor2 INTO :ocountry;

If(FOUND)

Printf(“country with the most ships damaged: %s, ocountry); }

}

c)

void addShips() {

EXEC SQL BEGIN DECLARE SECTION;

char iclass[20], itype[3], icontry[20], iship[20];

int inumGuns, ibore, idisplacement, ilaunched;

char stmt1[100], stmt2[100];

EXEC SQL END DECLARE SECTION;

strcpy(stmt1, “INSERT INTO Classes VALUES (?, ?, ?, ?, ?, ?)”);

strcpy(stmt2, “INSERT INTO Ships VALUES (?, ?, ?)”);

/* ask user for a class and other info for Classes table */

EXEC SQL EXECUTE IMMEDATE :stmt1

USING :iclass, :itype, :icontry,

:inumGuns, :ibore, :idisplacement;

/* ask user for a ship and launched */

WHILE(there_is_input)

{

EXEC SQL EXECUTE IMMEDATE :stmt2

USING :iship, :iclass, ilaunched;

/* ask user for a ship and launched */

}

}

d)

void findError() {

EXEC SQL BEGIN DECLARE SECTION;

char bname[20], bdate[8], newbdate[8];

char sname[20], lyear[4], newlyear[4];

char stmt1[100], stmt2[100];

EXEC SQL END DECLARE SECTION;

strcpy(stmt1, “UPDATE Battles SET date = ? WHERE name = ?”);

strcpy(stmt2, “UPDATE Ships SET launched = ? WHERE name = ?”); EXEC SQL DECLARE C1 CURSOR FOR

Select https://www.doczj.com/doc/a813846223.html,, b.date, https://www.doczj.com/doc/a813846223.html,, https://www.doczj.com/doc/a813846223.html,unched

FROM Battles b, Outcomes o, Ships s

WHERE https://www.doczj.com/doc/a813846223.html, = o.battle AND

o.ship = https://www.doczj.com/doc/a813846223.html, AND

YEAR(b.date) < https://www.doczj.com/doc/a813846223.html,unched;

EXEC SQL OPEN C1;

while(!NOT_FOUND) {

EXEC SQL FETCH C1 INTO :bname, :bdate, :sname, :lyear;

/* prompt user and ask if a change is needed */

if(change_battle)

{

/* get a new battle date to newbdate */

EXEC SQL EXECUTE IMMEDATE :stmt1

USING :bname, :newbdate;

}

if(change_ship)

{

/* get a new launched year to newlyear */

EXEC SQL EXECUTE IMMEDATE :stmt2

USING :sname, :newlyear;

}

}

}

9.4.1

a)

CREATE FUNCTION PresNetWorth(studioName CHAR[15]) RETURNS INTEGER DECLARE presNetWorth INT;

BEGIN

SELECT netWorth

INTO presNetWorth

FROM Studio, MovieExec

WHERE https://www.doczj.com/doc/a813846223.html, = studioName AND presC# = cert#;

RETURN(presNetWorth);

END;

b)

CREATE FUNCTION status(person CHAR(30), addr CHAR(255)) RETURNS INTEGER DECLARE isStar INT;

DECLARE isExec INT;

BEGIN

SELECT COUNT(*)

INTO isStar

FROM MovieStar

WHERE https://www.doczj.com/doc/a813846223.html, = person AND MovieStar.address = addr;

SELECT COUNT(*)

INTO isExec

FROM MovieExec

WHERE https://www.doczj.com/doc/a813846223.html, = person AND MovieExec.address = addr;

IF isStar + isExec = 0 THEN RETURN(4)

ELSE RETURN(isStar + 2*isExec)

END IF;

END;

c)

CREATE PROCEDURE twoLongest(

IN studio CHAR(15),

OUT longest VARCHAR(255),

OUT second VARCHAR(255)

)

DECLARE t VARCHAR(255);

DECLARE i INT;

DECLARE Not_Found CONDITION FOR SQLSTATE = '02000';

DECLARE MovieCursor CURSOR FOR

SELECT title FROM Movies WHERE studioName = studio

ORDER BY length DESC;

BEGIN

SET longest = NULL;

SET second = NULL;

OPEN MovieCursor;

SET i = 0;

mainLoop: WHILE (i < 2) DO

FETCH MovieCursor INTO t;

IF Not_Found THEN LEAVE mainLoop END IF;

SET i = i + 1;

END WHILE;

CLOSE MovieCursor;

END;

d)

CREATE PROCEDURE earliest120mMovie(

IN star CHAR(30),

OUT earliestYear INT

)

DECLARE Not_Found CONDITION FOR SQLSTATE = '02000';

DECLARE MovieCursor CURSOR FOR

SELECT MIN(year) FROM Movies

WHERE length > 120 AND

title IN (SELECT movieTitle FROM StarsIn

WHERE starName = star);

BEGIN

SET earliestYear = 0;

OPEN MovieCursor;

FETCH MovieCursor INTO earliestYear;

CLOSE MovieCursor;

END;

e)

CREATE PROCEDURE uniqueStar(

IN addr CHAR(255),

OUT star CHAR(30)

)

BEGIN

SET star = NULL;

IF 1 = (SELECT COUNT(*) FROM MovieStar WHERE address = addr)

THEN

SELECT name INTO star FROM MovieStar WHERE address = addr;

END;

f)

CREATE PROCEDURE removeStar(

IN star CHAR(30)

)

BEGIN

DELETE FROM Movies WHERE title IN

(SELECT movieTitle FROM StarsIn WHERE starName = star); DELETE FROM StarsIn WHERE starName = star;

DELETE FROM MovieStar WHERE name = star;

END;

9.4.2

a)

CREATE FUNCTION closestMatchPC(targetPrice INT) RETURNS CHAR DECLARE closestModel CHAR(4);

DECLARE diffSq INT;

DECLARE currSq INT;

DECLARE m CHAR(4);

DECLARE p INT;

DECLARE Not_Found CONDITION FOR SQLSTATE '02000';

DECLARE PCCursor CURSOR FOR

SELECT model, price FROM PC;

BEGIN

SET closestModel = NULL;

SET diffSq = -1;

OPEN PCCursor;

mainLoop: LOOP

FETCH PCCursor INTO m, p;

IF Not_Found THEN LEAVE mainLoop END IF;

SET currSq = (p - targetPrice)*(p - targetPrice);

IF diffSq = -1 OR diffSq > currSq

THEN BEGIN

SET closestModel = m;

SET diffSq = currSq;

END IF;

END LOOP;

CLOSE PDCursor;

RETURN(closestModel);

END;

b)

CREATE FUNCTION getPrice(imaker CHAR(1), imodel CHAR(4))

RETURNS INTEGER

DECLARE ptype VARCHAR(10);

DECLARE pprice INT;

DECLARE Not_Found CONDITION FOR SQLSTATE '02000';

BEGIN

SELECT type INTO ptype FROM Product

WHERE maker = imaker AND model = imodel;

IF ptype = …pc? THEN

SELECT price INTO pprice FROM PC

WHERE model = imodel;

ELSE IF ptype = …laptop? THEN

SELECT price INTO pprice FROM Laptop

WHERE model = imodel;

ELSE IF ptype = …printer? THEN

SELECT price INTO pprice FROM Printer

WHERE model = imodel;

ELSE

pprice = NULL;

END IF;

RETURN (pprice);

END;

c)

CREATE PROCEDURE addPC(

IN imodel INT,

IN ispeed DECIMAL(3,2),

IN iram INT,

IN ihd INT,

IN iprice INT

)

DECLARE Already_Exist CONDITION FOR SQLSTATE '02300';

BEGIN

INSERT INTO PC VALUES(imodel, ispeed, iram, ihd, iprice);

WHILE (Already_Exist) DO

SET imodel = imodel + 1;

INSERT INTO PC VALUES(imodel, ispeed, iram, ihd, iprice); END WHILE;

END;

d)

CREATE PROCEDURE getNumOfHigherPrice(

IN iprice INT,

OUT NumOfPCs INT,

OUT NumOfLaptops INT,

OUT NumOfPrinters INT

)

BEGIN

SET NumOfPCs = 0;

SET NumOfLaptops = 0;

SET NumOfPrinters = 0;

SELECT COUNT(*) INTO NumOfPCs FROM PC

WHERE price > iprice;

SELECT COUNT(*) INTO NumOfLaptops FROM Laptop

WHERE price > iprice;

SELECT COUNT(*) INTO NumOfPrinters FROM Printer

WHERE price > iprice;

END;

9.4.3

a)

CREATE FUNCTION getFirepower(iclass VARCHAR(10)) RETURNS INTEGER DECLARE firepower INT;

DECLARE nguns INT;

DECLARE nbore INT;

BEGIN

SELECT numGuns, bore INTO nguns, nbore FROM Classes

WHERE class = iclass;

SET firepower = nguns * (nbore * nbore * nbore);

RETURN(firepower);

END;

b)

CREATE PROCEDURE twoCountriesInBattle(

IN ibattle VARCHAR(20),

OUT firstCountry VARCHAR(20),

OUT secondCountry VARCHAR(20)

)

DECLARE i INT;

DECLARE ocountry VARCHAR(20);

DECLARE classCursor CURSOR FOR

SELECT country FROM Classes

WHERE class IN(SELECT class FROM Ships

WHERE name IN(

SELECT ship FROM Outcomes WHERE battle = ibattle

)

);

BEGIN

SET firstCountry = NULL;

SET secondCountry = NULL;

SET i = 0;

IF 2 = (SELECT COUNT(*) count FROM Classes

WHERE class IN(SELECT class FROM Ships

WHERE name IN(

SELECT ship FROM Outcomes WHERE battle = ibattle

)

)

)

THEN

OPEN classCursor;

WHILE (i < 2) DO

FETCH classCursor INTO ocountry;

IF (i = 0) THEN

SET firstCountry = ocountry;

ELSE

SET secoundCountry = ocountry;

END IF;

END WHILE;

END IF;

CLOSE calssCursor;

END;

c)

CREATE PROCEDURE addClass(

IN iship VARCHAR(20),

IN iclass VARCHAR(20),

IN itype CHAR(2),

IN icountry VARCHAR(20),

IN inumGuns INT,

IN ibore INT,

IN idisplacement INT

)

BEGIN

INSERT INTO Classes VALUES(iclass, itype, icountry,

inumGuns, ibore, idisplacement); INSERT INTO Ships VALUES(iship, iclass, NULL);

END;

d)

CREATE PROCEDURE checkLaunched(

IN ship VARCHAR(20)

)

DECLARE bname VARCHAR(20);

BEGIN

IF EXIST (SELECT https://www.doczj.com/doc/a813846223.html, INTO bname

FROM Battles b, Outcomes o, Ships s

WHERE https://www.doczj.com/doc/a813846223.html, = o.battle AND

o.ship = https://www.doczj.com/doc/a813846223.html, AND

YEAR(b.date) < https://www.doczj.com/doc/a813846223.html,unched)

THEN

UPDATE Ships SET launced = 0 WHERE name = iship;

UPDATE Battles SET date = 0 WHERE name = bname;

END IF;

END

9.4.4

9.5.1

a)

#include sqlcli.h

SQLHENV myEnv;

SQLHDBC mycon;

SQLHSTMT execStat;

SQLRETURN errCode1, errCode2, errCode3;

SQLCHAR manf, tempModel[4];

SQLFLOAT tempSpeed;

SQLINTEGER tempPrice;

SQLINTEGER colInfo;

Int targetPrice;

char modelOfClosest[4];

float speedOfClosest;

int priceOfClosest;

/* ask user for target price and read the answer into variable

targetPrice */

errCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);

if(errCode1) {

printf(”Error for SQL_HANDLE_ENV.\n”);

exit(1);

}

errCode2 = SQLAllocHandle(SQL_HANDLE_DBC, myEnv, &myCon);

if(errCode2) {

printf(”Error for SQL_ HANDLE_DBC.\n”);

exit(1);

}

errCode3 = SQLAllocHandle(SQL_HANDLE_STMT, myCon, &execStat);

if(errCode3) {

printf(”Error for SQL_ HANDLE_STMT.\n”);

exit(1);

}

SQLExecDirect(execStat, “SELECT model, price, speed FROM PC”, SQL_NTS); SQLBindCol(execStat, 1, SQL_CHAR, tempModel,

sizeof(tempModel), &colInfo); SQLBindCol(execStat, 2, SQL_INTEGER, tempPrice,

sizeof(tempPrice), &colInfo); SQLBindCol(execStat, 3, SQL_FLOAT, tempSpeed,

sizeof(tempSpeed), &colInfo); priceOfClosest = NULL;

while(SQLFetch(execStat) != SQL_NO_DATA) {

if( /* the 1st fetch or tempPrice closer to targetPrice */

modelOfClosest = tempModel;

priceOfClosest = tempPrice;

speedOfClosest = tempSpeed;

}

}

/* Now, modelOfClosest is the model whose price is closest to

target. We must get its manufacturer with a single-row select */

if (priceOfClosest == NULL ) /* no data fetched */

/* print error message and exit */

SQLPrepare (execStat,

“SELECT maker FROM Product WHERE model = ?”, SQL_NTS); SQLBindParameter(execStat, 1,…,modelOfClosest, …);

SQLExecute(execStat);

SQLBindCol(execStat, 1, SQLCHAR, &manf, sizeof(manf), &colInfo);

/* print manf */

b)

#include sqlcli.h

SQLHENV myEnv;

SQLHDBC mycon;

SQLHSTMT execStat;

SQLRETURN errCode1, errCode2, errCode3;

SQLCHAR model[4], maker;

SQLFLOAT minSpeed;

SQLINTEGER minRam, minHd, minScreen;

SQLFLOAT speed;

SQLINTEGER ram, hd, screen;

SQLINTEGER colInfo;

/* ask user for minimum speed, ram, hd size, and screen size */ errCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);

if(errCode1) {

printf(”Error for SQL_HANDLE_ENV.\n”);

exit(1);

}

errCode2 = SQLAllocHandle(SQL_HANDLE_DBC, myEnv, &myCon);

if(errCode2) {

printf(”Error for SQL_ HANDLE_DBC.\n”);

exit(1);

}

errCode3 = SQLAllocHandle(SQL_HANDLE_STMT, myCon, &execStat);

if(errCode3) {

printf(”Error for SQL_ HANDLE_STMT.\n”);

exit(1);

}

SQLPrepare(execStat,

“SELECT model, speed, ram, hd, screen, price, maker ” ||

“FROM Laptop l, Product p ” ||

“WHERE speed >= ? AND ” ||

“ram >= ? AND ” ||

“hd >= ? AND ” ||

“screen >= ? AND ” ||

“l.model = p.model”,

SQL_NTS);

SQLBindParameter(execStat, 1, SQL_FLOAT, …, minSpeed, …);

SQLBindParameter (execStat, 2, SQL_INTEGER, …, minRam, …);

SQLBindParameter (execStat, 3, SQL_ INTEGER, …, minHd, …);

SQLBindParameter (execStat, 4, SQL_ INTEGER, …, minScreen, …);

SQLExecute(execStat);

SQLBindCol(execStat, 1, SQL_CHAR, model, sizeof(model), &colInfo); SQLBindCol(execStat, 2, SQL_FLOAT, speed, sizeof(speed), &colInfo);

SQLBindCol(execStat, 3, SQL_INTEGER, ram,

sizeof(ram), &colInfo);

SQLBindCol(execStat, 4, SQL_INTEGER, hd,

sizeof(hd), &colInfo);

SQLBindCol(execStat, 5, SQL_INTEGER, screen,

sizeof(screen), &colInfo);

SQLBindCol(execStat, 6, SQL_INTEGER, price,

sizeof(price), &colInfo);

SQLBindCol(execStat, 7, SQL_CHAR, maker,

sizeof(maker), &colInfo);

while(SQLFetch(execStat) != SQL_NO_DATA) {

if( FOUND )

/* print fetched info */

}

c)

#include sqlcli.h

SQLHENV myEnv;

SQLHDBC mycon;

SQLHSTMT execStat;

SQLRETURN errCode1, errCode2, errCode3;

SQLCHAR maker, model[4], type[10], color[6];

SQLFLOAT speed;

SQLINTEGER ram, hd, screen, price;

SQLINTEGER colInfo;

/* ask user for minimum speed, ram, hd size, and screen size */

errCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);

if(errCode1) {

printf(”Error for SQL_HANDLE_ENV.\n”);

exit(1);

}

errCode2 = SQLAllocHandle(SQL_HANDLE_DBC, myEnv, &myCon);

if(errCode2) {

printf(”Error for SQL_ HANDLE_DBC.\n”);

exit(1);

}

errCode3 = SQLAllocHandle(SQL_HANDLE_STMT, myCon, &execStat);

if(errCode3) {

printf(”Error for SQL_ HANDLE_STMT.\n”);

exit(1);

}

/* get PCs made by the manufacturer */

SQLPrepare(execStat,

“SELECT * FROM PC WHERE model IN (” ||

“SELECT model FROM Product ” ||

“WHERE maker = ? AND ” ||

“type = …pc?”,

SQL_NTS);

SQLBindParameter(execStat, 1, SQL_CHAR, …, maker, …);

SQLExecute(execStat);

SQLBindCol(execStat, 1, SQL_CHAR, model, sizeof(model), &colInfo); SQLBindCol(execStat, 2, SQL_FLOAT, speed, sizeof(speed), &colInfo);

SQLBindCol(execStat, 3, SQL_INTEGER, ram,

sizeof(ram), &colInfo);

SQLBindCol(execStat, 4, SQL_INTEGER, hd,

sizeof(hd), &colInfo);

SQLBindCol(execStat, 5, SQL_INTEGER, price,

sizeof(price), &colInfo);

while(SQLFetch(execStat) != SQL_NO_DATA) {

if( FOUND )

/* print fetched info */

}

/* get Laptops made by the manufacturer */

SQLPrepare(execStat,

“SELECT * FROM Laptop WHERE model IN (” ||

“SELECT model FROM Product ” ||

“WHERE maker = ? AND ” ||

“type = …laptop?”,

SQL_NTS);

SQLBindParameter(execStat, 1, SQL_CHAR, …, maker, …);

SQLExecute(execStat);

数据库系统原理及应用教程第四版课后答案

第一章 1、(1)数据:数据用于载荷信息的物理符号。 (2)数据的特征;○1数据有“型”与“值”之分;○2数据受数据类型与取值范围的约束;○3数据有定性表示与定量之分;○4数据应具有载体与多种表现形式。 3、(1)数据管理的功能: ○1组织与保存数据功能,即将收集到的数据合理地分类组织,将其存储在物理载体上,使数据能够长期的被保存; ○2数据维护功能,即根据需要随时进行插入新数据,修改原数据与删除失效数据的操作; ○3数据查询与数据统计功能,即快速的得到需要的正确数据,满足各种使用要求;○4数据的安全与完整性控制功能,即能保护数据的安全与完整性。 (2)数据管理的目标:收集完整的信息,将信息用数据表示,按数据结构合理科学的组织并保存数据;为各种使用快速地提供需要的数据,并保护数据的安全与完整性。 4、(1)数据库:就是数据管理的新方法与技术,她就是一个按数据结构来存储与管理数据的计算机软件系统。 (2)数据库中的数据具有的特点:○1数据库中的数据具有整体性,即数据库中的数据要保持自身完整的数据结构;○2数据库中的数据具有数据共享性,不同的用户可以按各自的用法使用数据库中的数据,多个用户可以同时共享数据库中的数据资源。 5、(1)数据库管理系统:它就是专门用于管理数据库的计算机管理软件。数据库管理系统能够为数据库提供数据的定义、建立、维护、查询与统计等操作功能,并完成对数据完整性、安全性进行操作的功能。 (2)数据库管理系统主要功能:就是数据存储、数据操作与数据控制功能。其数据存储与数据操作就是:数据库的定义功能,指未说明库中的数据情况而进行的建立数据库结构的操作;数据库建立功能,指大批数据录入到数据库的操作,它使得库中含有需要保护的数据记录;数据库维护功能,指对数据的插入、删除与修改操纵,其操作做能满足库中信息变化或更新的需求;数据库查询与统计功能,指通过对数据库的访问,为实际应用提供需要的数据。数据库管理系统的数据控制功能为:数据安全性控制功能,即为了保证数据库的数据安全可靠,防止不合法的使用造成数据库泄露与破坏,也就就是避免数据被人偷瞧、篡改或破坏;数据库完整性控制功能,指为了保证数据库中的数据的正确、有效与相容,防止不合语意的错误数据被输入或输出。 14、(1)数据库系统的软件由几部分组成?数据库系统的软件中包括操作系统(OS)、数据库管理系统(DBMS)、主语言系统、应用程序软件与用户数据库。 (2)作用:①操作系统或汉字操作系统:操作系统就是所有计算机软件的基础,在数据库系统中它起着支持DBMS及主语言系统工作的作用。如果管理的信息中有汉字,则需要中文操作系统的支持,以提供汉字的输入、输出方法与汉字信息的处理方法。②数据库管理系统与主语言系统:数据库管理系统就是为定义、建立、维护、使用及控制数据库而提供的有关数据管理的系统软件。主语言系统就是为应用程序提供的诸如程序控制、数据输入输出、功能函数、图形处理、计算方法等数据处理功能的系统软件。③应用开发工具软件:应用开发工具就是DBMS系统为应用开发人员与最终用户提供的高效率、多功能的应用生成器、第四代计算机语言等各种软件工具.如报表生成器、表单生成器、查询与视图设计器等,它们为数据库系统的开发与使用提供了良好的环境与帮助。④应用系统及数据库:数据库应用系统包括为特定的应用环境建立的数据库、开发的各类应用程序及编写的文档资料,它们就是一个有机整体。通过运行数据库应用系统,可以实现对数据库中数据的维护、查询、管理与处理操作。(3)关系:

数据库系统教程(何玉洁 李宝安 编著)第2章习题答案

第2章数据模型与数据库结构习题答案

1.解释数据模型的概念,为什么要将数据模型分成两个层次? 数据模型(Data Model)是对现实世界数据特征的抽象。 根据模型应用的不同目的,分为两大类。 2.概念层数据模型和组织层数据模型分别是面对什么的数据模型? 概念层数据模型面对现实世界,组织层数据模型面对信息世界。 3.实体之间的联系有哪几种,请为每一种联系举出一个例子。 一对一联系(1:1),例:部门和经理 一对多联系(1:m),例:公司和员工 多对多联系(m:m),例:学生和课程 4.说明实体-联系模型中的实体、属性和联系的概念。 实体是具有公共性质并可相互区分的现实世界对象的集合。 属性是描述实体或联系的性质或特征的数据项。 联系是数据间的关联关系,是客观存在的应用语义链。 5.指明下列实体间联系的种类: 教研室和教师(假设一个教师只属于一个教研室,一个教研室可有多名教师)1:m 商店和顾客m:m 国家和首都1:1 飞机(座位)和乘客1:m 6.数据库包含哪三级模式,试分别说明每一级模式的作用。 内模式描述数据的存储结构。 外模式对现实系统中用户感兴趣的整体数据的局部描述,以满足数据库不同用户对数据的需求。 模式描述数据库中全体数据的逻辑结构和特征,是所有用户的公共数据视图。

7.数据库管理系统提供的两级映像的作用是什么,它带来了哪些功能? 作用:在数据库内部实现对数据库三级模式的联系和转换。 功能:保证了数据库中的数据能够具有较高的逻辑独立性和物理独立性,使数据库应用程序不随数据库数据的逻辑或存储结构的变动而变动。 8.数据库三级模式划分的优点是什么,它能带来哪些数据独立性? 数据库三级模式是对数据的三个抽象级别,它把数据的具体组织留给DBMS管理,使用户能逻辑、抽象地处理数据,而不必关心数据在计算机中的具体表示方式与存储方式。 外模式/模式映像保证了程序与数据的逻辑独立性,模式/内模式映像保证了数据与程序的物理独立性。 *以上内容仅供参考

数据库系统基础教程(第二版)课后习题答案

Database Systems: The Complete Book Solutions for Chapter 2 Solutions for Section 2.1 Exercise 2.1.1 The E/R Diagram. Exercise 2.1.8(a) The E/R Diagram Kobvxybz Solutions for Section 2.2 Exercise 2.2.1 The Addresses entity set is nothing but a single address, so we would prefer to make address an attribute of Customers. Were the bank to record several addresses for a customer, then it might make sense to have an Addresses entity set and make Lives-at a many-many relationship. The Acct-Sets entity set is useless. Each customer has a unique account set containing his or her accounts. However, relating customers directly to their accounts in a many-many relationship conveys the same information and eliminates the account-set concept altogether. Solutions for Section 2.3 Exercise 2.3.1(a) Keys ssNo and number are appropriate for Customers and Accounts, respectively. Also, we think it does not make sense for an account to be related to zero customers, so we should round the edge connecting Owns to Customers. It does not seem inappropriate to have a customer with 0 accounts;

数据库基础教程CH1 答案

Exercises 2.3.1 In this exercise we introduce one of our running examples of a relational database schema. The database schema consists of four relations, whose schemas are: Product (maker, model, type) PC (model, speed, ram. hd, price) Laptop (model, speed, ram, hd, screen, price) Printer (model, color, type, price) The Product relation gives the manufacturer, model number and type (PC, laptop, or printer) of various products. We assume for convenience that model numbers are unique over all manufacturers and product types; that assumption is not realistic, and a real database would include a code for the manufacturer as part of the model number. The PC relation gives for each model number that is a PC the speed (of the processor, in gigahertz), the amount of RAM (in megabytes), the size of the hard disk (in gigabytes), and the price. The Laptop relation is similar, except that the screen size (in inches) is also included. The Printer relation records for each printer model whether the printer produces color output (true, if so), the process type (laser or ink-jet, typically), and the price. Write the following declarations: a) A suitable schema for relation Product. b) A suitable schema for relation PC. c) A suitable schema for relation Laptop. d) A suitable schema for relation Printer. e)An alteration to your Printer schema from (d) to delete the attribute color. f)An alteration to your Laptop schema from (c) to add the attribute od (optical-disk type, e.g., cd or dvd). Let the default value for this attribute be 'none' if the laptop does not have an optical disk. Exercise 2.3.1a CREATE TABLE Product ( maker CHAR(30), model CHAR(10) PRIMARY KEY, type CHAR(15) ); Exercise 2.3.1b CREATE TABLE PC ( model CHAR(30), speed DECIMAL(4,2), ram INTEGER, hd INTEGER, price DECIMAL(7,2) );

《VisualFoxPro6.0简明教程》教学指导书(精)

《Visual FoxPro6.0简明教程》教学指导书 一、教学目的和要求 本课程以Visual Foxpro 6.0 为基础,讲授数据库系统的基本概念和基本理论,使学生了解关系型数据库的基本概念和程序设计方法,能够独立编写VFP程序,并结合数据库的操作管理功能,实现信息管理与查询功能,为后续课程学习奠定基础。 通过本课程的学习,使学生掌握数据库的基本概念、操作、查询;掌握高级语言程序设计及可视化编程功能,掌握可视化编程技巧及技术。学完本课程后,学生应该能够独立编制小型数据库应用程序。 为了便于教师备课,掌握进度,我们给出该课程的教学指导书。但基于各学校的教学安排和情况有所不同,所以很难有统一要求,我们仅以每周3+2学时为例(3节上课,2节上机,按18周设计)写出教学要求。对于每周2+2学时的教学单位有些章节内容可以删略。 二、课程内容及其安排 (课程安排以教育部高职高专规划教材《Visual FoxPro6.0简明教程》为基础) 教学课程内容安排: 第一周 内容:第1章Visual FoxPro 6.0概述 教学目的: 要求学生掌握VFP6.0的功能,VFP6.0系统的软硬件环境,VFP6.0系统的安装及性能指标和VFP6.0文件组成。 教学重点与难点: 1.VFP6.0系统的启动 2. VFP6.0环境介绍 3.VFP6.0文件组成 作业: 1.VFP 6.0的主要特点是什么? 2.VFP 6.0主要使用哪两种菜单? 3.VFP 6.0的数据库文件和数据表文件的扩展名是什么? 第二周 内容:项目管理器 教学目的: 使学生学会项目管理器的建立和使用. 教学重点与难点: 1.项目管理器的建立和界面操作 2. 设计器与生成器的使用 3. 工作目录与搜索路径的建立 作业: 1.什么是项目管理器? 2.如何进入项目管理器 3.项目文件的扩展名是什么?

数据库原理及应用教程第4版习题参考答案

习题参考答案 第1章习题参考答案 一、选择题 1. C 2. B 3. D 4. C 5. D 6. B 7. A 8. B 9. D 10. B 11. C 12. D 13. D 14. D 15. B 16. C 17. D 18. A 19. D 20. A 21. D 22. D 23. C 24. A 25. C 二、填空题 1. 数据库系统阶段 2. 关系 3. 物理独立性 4. 操作系统 5. 数据库管理系统(DBMS) 6. 一对多 7. 独立性 8. 完整性控制 9. 逻辑独立性 10. 关系模型 11. 概念结构(逻辑) 12. 树有向图二维表嵌套和递归 13. 宿主语言(或主语言) 14. 数据字典 15. 单用户结构主从式结构分布式结构客户/服务器结构浏览器/服务器结构 16. 现实世界信息世界计算机世界 三、简答题 1、简述数据库管理技术发展的三个阶段。各阶段的特点是什么? 答:数据库管理技术经历了人工管理阶段、文件系统阶段和数据库系统阶段。 (1)、人工管理数据的特点: A、数据不保存。 B、系统没有专用的软件对数据进行管理。 C、数据不共

享。D、数据不具有独立性。 (2)、文件系统阶段的特点: A、数据以文件的形式长期保存。 B、由文件系统管理数据。 C、程序与数据之间有一定的独立性。 D、文件的形式已经多样化 E、数据具有一定的共享性 (3)、数据库系统管理阶段特点: A、数据结构化。 B、数据共享性高、冗余度底。 C、数据独立性高。 D、有统一的数据控制功能。 2、从程序和数据之间的关系来分析文件系统和数据库系统之间的区别和联系 答:数据管理的规模日趋增大,数据量急剧增加,文件管理系统已不能适应要求,数据库管理技术为用户提供了更广泛的数据共享和更高的数据独立性,进一步减少了数据的余度,并为用户提供了方便的操作使用接口。数据库系统对数据的管理方式与文件管理系统不同,它把所有应用程序中使用的数据汇集起来,以记录为单位存储,在数据库管理系统的监督和管理下使用,因此数据库中的数据是集成的,每个用户享用其中的一部分。 3、简述数据库、数据库管理系统、数据库系统三个概念的含义和联系。答:数据库是指存储在计算机内、有组织的、可共享的数据集合。 数据库管理系统是软件系统的一个重要组成部分,它通过借助操作系统完成对硬件的访问,并对数据库的数据进行存取、维护和管理。 数据库系统是指计算机系统中引入数据库后的系统构成。它主要由数据库、数据库用户、计算机硬件系统和计算机软件系统几部分组成。 三者的联系是:数据库系统包括数据库和数据库管理系统。数据库系统主要通过数据库管理系统对数据库进行管理的。 4、数据库系统包括哪几个主要组成部分?各部分的功能是什么?画出整个数据库系统的层次结构图。 答:数据库系统包括:数据库、数据库用户、软件系统和硬件系统。 数据库主要是来保存数据的。 数据库用户是对数据库进行使用的人,主要对数据库进行存储、维护和检索等操作。 软件系统主要完成对数据库的资源管理、完成各种操作请求。 硬件系统主要完成数据库的一些物理上的操作,如物理存储、输入输出等。

数据库系统教程试卷-A

《数据库系统教程》试卷(A卷,2005.1) 一、单项选择题(本大题共15小题,共25分。 1.DBS具有较高的数据独立性,是因为DBS采用了 [ B ] A.嵌入式语言B.三级模式结构C.DD D.六个层次的存储介质 2.在层次、网状模型中,起导航数据作用的是[ A ] A.指针B.关键码C.DD D.索引 3.设关系R(A,B,C)和关系S(B,C,D), 那么与R?S等价的关系代数表达式是 2=1 [ B ] A.σ2=4(R?S)B.σ2=4(R×S)C.σ2=1(R?S) D.σ2=1(R×S)4.设关系R和S的结构相同,分别有m和n个元组,那么R-S操作的结果中元组个数为 [ C ] A.为m-n B.为m C.小于等于m D.小于等于(m-n)5.元组比较操作(a1,a2)>=(b1,b2)的意义是 [ D ] A.(a1>=b1)AND(a2>=b2)B.(a1>=b1)OR((a1=b1)AND(a2>=b2)) C.(a1>b1)AND((a1=b1)AND(a2>=b2))D.(a1>b1)OR((a1=b1)AND(a2>=b2))

6.设有关系R(A,B,C)的值如下: A B C 5 6 5 6 7 5 6 8 6 下列叙述正确的是[ B ] A.函数依赖C→A在上述关系中成立B.函数依赖AB→C在上述关系中成立 C.函数依赖A→C在上述关系中成立D.函数依赖C→AB在上述关系中成立 7.设关系模式R(A,B,C,D),F是R上成立的FD集,F={ A→C,BC→D },那么ρ={ ABD,AC }相对于F [ B ] A.是无损联接分解,也是保持FD的分解 B.是无损联接分解,但不保持FD的分解 C.不是无损联接分解,但保持FD的分解 D.既不是无损联接分解,也不保持FD的分解 8.概念设计的结果得到的是概念模式。概念模式是[ D ] A.与DBMS有关的B.与硬件有关的 C.独立于DBMS的D.独立于DBMS和硬件的

南京理工大学《数据库系统基础教程》试题和答案

一、选择题60(选择一个最合适的答案,在答题纸上涂黑) 1.一个事务中的一组更新操作是一个整体,要么全部执行,要么全部不执行。这是事务的:A.原子性B.一致性 C.隔离性 D.持久性 2.在数据库的三级模式结构中,描述一个数据库中全体数据的全局逻辑结构和特性的是:A.外模式 B.模式 C.存储模式D.模式 3.关于联系的多重性,下面哪种说法不正确? A.一个多对多的联系中允许多对一的情形。 B.一个多对多的联系中允许一对一的情形。 C.一个多对一的联系中允许一对一的情形。 D.一个多对一的联系中允许多对多的情形。 4.考虑学校里的"学生"和"课程"之间的联系,该联系的多重性应该是: A. 一对一 B. 多对一 C. 一对多 D. 多对多 5.下面哪种约束要求一组属性在同一实体集任意两个不同实体上的取值不同。 A. 键(key)约束。 B. 单值约束。 C. 参照完整性。 D. 域(domain)约束 6.关系模型要求各元组的每个分量的值必须是原子性的。对原子性,下面哪种解释不正确:A.每个属性都没有部结构。 B.每个属性都不可再分解。 C.各属性值应属于某种基本数据类型。 D.属性值不允许为NULL。 7.对于一个关系的属性(列)集合和元组(行)集合,下面哪种说法不正确: A.改变属性的排列次序不影响该关系。 B.改变元组的排列次序不影响该关系。 C.改变元组的排列次序会改变该关系。 D.关系的模式包括其名称及其属性集合。 8.若R是实体集R1与R2间的一个多对多联系,将其转换为关系R',哪种说法不正确:A.R'属性应包括R1与R2的所有属性。 B.R'属性应包括R1与R2的键属性。 C.R1与R2的键属性共同构成R'的键。 D.R'的属性应包括R自身定义的属性。 9.关于函数依赖的判断,下面哪种说法不正确? A.若任意两元组在属性A上一致,在B上也一致,则有A → B成立。 B.若任意两元组在属性A上一致,在B上不一致,则A → B不成立。 C.若任意两元组在属性A上不可能一致,则不管在B上是否一致,有A → B成立。

数据库系统简明教程填空题答案

第一章 1数据库具有(永久储存,有组织,可共享)三个基本特点。 2数据库管理系统是数据库系统的一个重要组成部分,他的功能包括(数据定义功能,数据操纵功能,数据库的运行管理,数据的建立和维护) 3数据库系统是指在计算机系统中引入数据库后的系统,一般由(数据库,数据库管理系统,应用系统,数据库管理员)构成 4数据库管理技术的发展是与计算机技术及其应用的发展联系在一起的,他经历三个阶段(人工管理阶段,文件系统阶段,数据库系统阶段) 5数据库具有数据结构化、最小的冗余度、较高的独立性的特点 6DBMS还必须提供(数据的安全性保护、数据的完整性检查、并发控制、数据库恢复)等数据控制功能 7模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及到(型)的描述,不涉及到具体的值 8三级模式之间的两层映像保正了数据库系统中的数据具有较高的(逻辑独立性和物理独立性) 第二章 1、根据模型应用的不同目的,可以将这些模型划分为两类,它们分别属于两个不同的层次。第一类是(概念模型),第二类是(数据模型)。 2、数据模型的三要素是指(数据结构)、(数据操作)和(完整性约束)。实际数据库 系统中所支持的主要数据模型是(层次模型)(网状模型)和(关系模型) 3、数据模型中的(数据结构)是对数据系统的静态特征描述,包括数据结构和数据间联系的描述,(数据操作)是对数据库系统的动态特征描述,是一组定义在数据上的操作, 包括操作的涵义、操作符]、运算规划及其语言等。 4、用树型结构表示实体类型及实体间联系的数据模型称为(层次),上一层的父结点 和下一层的子结点之间的联系是(一对多)的联系。 5、用有向图结构表示实体类型及实体间联系的数据模型称为(网状模型),数据之间的联系通常用(指针)实现 6、(关系模型)是目前最常用也是最重要的一种数据模型。采用该模型作为数据的组织方式的数据库系统称为(关系数据库系统) 7、关系的完整性约束条件包括三大类(实体完整性)(参照完整性)和(用户定义完整性)第三章习题 1、关系数据模型中,二维表的行称为(元组)。 2、用户选作元组标识的一个候选码为(主码),其属性不能取(相同) 3、关系代数运算中,传统的集合运算有(并)、(交)(差)(笛卡尔积)。 4、关系代数运算中,基本的运算是并、差、选择、投影、笛卡尔积 5、关系代数运算中,专门的关系运算有(选择)、(投影)(连接) 6、关系数据库中基于数学上的两类运算是(关系代数)和(关系演算) 7、关系代数中,从两个关系中找出相同元组的运算称为(交)运算。 8.R》《S表示R与S的(自然连接) 第四章 1、SQL的中文全称是(结构化查询语言)。 2、SQL语言除了具有数据查询和数据操纵功能之外,还具有(数据定义)和(数据控制)的功能,它是一个综合性的功能强大的语言。 3、在关系数据库标准SQL中,实现数据检索的语句命令是(select)

(完整word版)数据库系统原理及应用教程第四版课后答案

第一章 1、(1)数据:数据用于载荷信息的物理符号。 (2)数据的特征;○1数据有“型”和“值”之分;○2数据受数据类型和取值范围的约束;○3数据有定性表示和定量之分;○4数据应具有载体和多种表现形式。 3、(1)数据管理的功能:○1组织和保存数据功能,即将收集到的数据合理地分类组织,将其存储在物理载体上,使数据能够长期的被保存;○2数据维护功能,即根据需要随时进行插入新数据,修改原数据和删除失效数据的操作;○3数据查询和数据统计功能,即快速的得到需要的正确数据,满足各种使用要求;○4数据的安全和完整性控制功能,即能保护数据的安全和完整性。 (2)数据管理的目标:收集完整的信息,将信息用数据表示,按数据结构合理科学的组织并保存数据;为各种使用快速地提供需要的数据,并保护数据的安全和完整性。 4、(1)数据库:是数据管理的新方法和技术,他是一个按数据结构来存储和管理数据的计算机软件系统。 (2)数据库中的数据具有的特点:○1数据库中的数据具有整体性,即数据库中的数据要保持自身完整的数据结构;○2数据库中的数据具有数据共享性,不同的用户可以按各自的用法使用数据库中的数据,多个用户可以同时共享数据库中的数据资源。 5、(1)数据库管理系统:它是专门用于管理数据库的计算机管理软件。数据库管理系统能够为数据库提供数据的定义、建立、维护、查询和统计等操作功能,并完成对数据完整性、安全性进行操作的功能。 (2)数据库管理系统主要功能:是数据存储、数据操作和数据控制功能。其数据存储和数据操作是:数据库的定义功能,指未说明库中的数据情况而进行的建立数据库结构的操作;数据库建立功能,指大批数据录入到数据库的操作,它使得库中含有需要保护的数据记录;数据库维护功能,指对数据的插入、删除和修改操纵,其操作做能满足库中信息变化或更新的需求;数据库查询和统计功能,指通过对数据库的访问,为实际应用提供需要的数据。数据库管理系统的数据控制功能为:数据安全性控制功能,即为了保证数据库的数据安全可靠,防止不合法的使用造成数据库泄露和破坏,也就是避免数据被人偷看、篡改或破坏;数据库完整性控制功能,指为了保证数据库中的数据的正确、有效和相容,防止不合语意的错误数据被输入或输出。 14、(1)数据库系统的软件由几部分组成?数据库系统的软件中包括操作系统(OS)、数据库管理系统(DBMS)、主语言系统、应用程序软件和用户数据库。 (2)作用:①操作系统或汉字操作系统:操作系统是所有计算机软件的基础,在数据库系统中它起着支持DBMS及主语言系统工作的作用。如果管理的信息中有汉字,则需要中文操作系统的支持,以提供汉字的输入、输出方法和汉字信息的处理方法。②数据库管理系统和主语言系统:数据库管理系统是为定义、建立、维护、使用及控制数据库而提供的有关数据管理的系统软件。主语言系统是为应用程序提供的诸如程序控制、数据输入输出、功能函数、图形处理、计算方法等数据处理功能的系统软件。③应用开发工具软件:应用开发工具是DBMS系统为应用开发人员和最终用户提供的高效率、多功能的应用生成器、第四代计算机语言等各种软件工具.如报表生成器、表单生成器、查询和视图设计器等,它们为数据库系统的开发和使用提供了良好的环境和帮助。④应用系统及数据库:数据库应用系统包括为特定的应用环境建立的数据库、开发的各类应用程序及编写的文档资料,它们是一个有机整体。通过运行数据库应用系统,可以实现对数据库中数据的维护、查询、管理和处理操作。(3)关系:

数据库系统基础教程(第二版)课后习题答案2

Database Systems: The Complete Book Solutions for Chapter 2 Solutions for Section 2.1 Exercise 2.1.1 The E/R Diagram. Exercise 2.1.8(a) The E/R Diagram Kobvxybz Solutions for Section 2.2 Exercise 2.2.1 The Addresses entity set is nothing but a single address, so we would prefer to make address an attribute of Customers. Were the bank to record several addresses for a customer, then it might make sense to have an Addresses entity set and make Lives-at a many-many relationship. The Acct-Sets entity set is useless. Each customer has a unique account set containing his or her accounts. However, relating customers directly to their accounts in a many-many relationship conveys the same information and eliminates the account-set concept altogether. Solutions for Section 2.3 Exercise 2.3.1(a) Keys ssNo and number are appropriate for Customers and Accounts, respectively. Also, we think it does not make sense for an account to be related to zero customers, so we should round the edge connecting Owns to Customers. It does not seem inappropriate to have a customer with 0 accounts;

2019年大学《数据库原理及应用教程》试题及答案

《数据库原理及应用教程》试题及答案 一、选择题 1、下面叙述正确的是(C) A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或语句)的条数 C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都不对 (2) 以下数据结构中不属于线性数据结构的是(C) A. 队列 B. 线性表 C. 二叉树 D. 栈 (3) 在一棵二叉树上第5层的结点数最多是(B) 注:由公式2k-1得 A. 8 B. 16 C. 32 D. 15 (4) 下面描述中,符合结构化程序设计风格的是(A) A. 使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B. 模块只有一个入口,可以有多个出口 C. 注重提高程序的执行效率 D. 不使用goto语句 (5) 下面概念中,不属于面向对象方法的是(D) 注:P55-58 A. 对象 B. 继承 C. 类 D. 过程调用 (6) 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是 (B) A. 可行性分析 B. 需求分析 C. 详细设计 D. 程序编码 (7) 在软件开发中,下面任务不属于设计阶段的是(D) A. 数据结构设计 B. 给出系统模块结构

C. 定义模块算法 D. 定义需求并建立系统模型 (8) 数据库系统的核心是(B) A. 数据模型 B. 数据库管理系统 C. 软件工具 D. 数据库 (9) 下列叙述中正确的是(C) A.数据库是一个独立的系统,不需要操作系统的支持 B.数据库设计是指设计数据库管理系统 C.数据库技术的根本目标是要解决数据共享的问题 D.数据库系统中,数据的物理结构必须与逻辑结构一致 (10) 下列模式中,能够给出数据库物理存储结构与物理存取方法的是(A) 注:P108 A. 内模式 B. 外模式 C. 概念模式 D. 逻辑模式 (11) 算法的时间复杂度是指(C) A. 执行算法程序所需要的时间 B. 算法程序的长度 C. 算法执行过程中所需要的基本运算次数 D. 算法程序中的指令条数 (12) 算法的空间复杂度是指(D) A. 算法程序的长度 B. 算法程序中的指令条数 C. 算法程序所占的存储空间 D. 算法执行过程中所需要的存储空间 (13) 设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为(B) 注:利用公式n=n0+n1+n2、n0=n2+1和完全二叉数的特点可求出 A. 349 B. 350 C. 255 D. 351 (14) 结构化程序设计主要强调的是(B) A.程序的规模 B.程序的易读性

数据库系统教程试卷-A

一、单项选择题(本大题共15小题,共25分。 1.DBS具有较高的数据独立性,是因为DBS采用了[ B ] A.嵌入式语言B.三级模式结构C.DD D.六个层次的存储介质 2.在层次、网状模型中,起导航数据作用的是[ A ] A.指针B.关键码C.DD D.索引 3.设关系R(A,B,C)和关系S(B,C,D), 那么与R?S等价的关系 代数表达式是[ B ] A.σ2=4(R?S)B.σ2=4(R×S)C.σ2=1(R?S)D.σ2=1(R×S) 4.设关系R和S的结构相同,分别有m和n个元组,那么R-S操作的结果中元组个数为[ C ] A.为m-n B.为m C.小于等于m D.小于等于(m-n) 5.元组比较操作(a 1,a 2 )>=(b 1 ,b 2 )的意义是[ D] A.(a 1>=b 1 )AND(a 2 >=b 2 )B.(a 1 >=b 1 )OR((a 1 =b 1 )AND(a 2 >=b 2 )) C.(a 1>b 1 )AND((a 1 =b 1 )AND(a 2 >=b 2 )) D.(a 1 >b 1 )OR((a 1 =b 1 )AND(a 2 >=b 2 )) 6.设有关系R(A,B,C)的值如下: A B C 5 6 5 6 7 5 6 8 6 下列叙述正确的是[ B ] A.函数依赖C→A在上述关系中成立B.函数依赖AB→C在上述关系中成立 C.函数依赖A→C在上述关系中成立D.函数依赖C→AB在上述关系中成立 7.设关系模式R(A,B,C,D),F是R上成立的FD集,F={ A→C,BC→D },那么ρ={ ABD,AC }相对于F [ B ] A.是无损联接分解,也是保持FD的分解 B.是无损联接分解,但不保持FD的分解 C.不是无损联接分解,但保持FD的分解 D.既不是无损联接分解,也不保持FD的分解 8.概念设计的结果得到的是概念模式。概念模式是[ D] A.与DBMS有关的B.与硬件有关的 C.独立于DBMS的D.独立于DBMS和硬件的 9.在有关“弱实体”的叙述中,不正确的是[ C ] A.弱实体的存在以父实体的存在为前提 B.弱实体依赖于父实体的存在 C.父实体与弱实体的联系可以是1:1、1:N或M:N D.父实体与弱实体的联系只能是1:1或1:N 10.有15个实体类型,并且它们之间存在着15个不同的二元联系,其中5个是1:1联系类型,5个是1:N联系类型,5个M:N联系类型,那么根据转换规则,这个ER结构转换成的关系模式有[ D ] 2=1

《数据库原理及应用》教学大纲.

《数据库原理及应用》教学大纲 课程编号: 课程英文名称:Principle And Application of Database 课程类别:专业基础课程课程性质:必修课 学分: 3.5 总学时:64 理论学时:48 实验学时:16 开课对象:计算机应用与维护(专科) 开课分院、系:电子信息分院,计算机系 一、课程的性质、目的和任务 数据库是当前计算机领域中应用最广泛、发展最迅速的技术,数据库原理与应用课程是计算机相关专业的专业基础课。本课程的任务是培养学生数据库技术的综合应用能力。本课程主要介绍数据库的基本概念、数据模型,SQL语言,关系数据库及关系数据库理论、数据库设计方法,数据库保护以及SQL Server关系数据库系统的应用。通过本课程的学习,使学生掌握数据库的基本理论和数据库的应用技术,为后续课程学习以及今后从事数据库系统的开发打下一定的基础。 二、先修课程及预备知识 先修课程:计算机文化基础、程序设计语言 三、课程内容、基本要求及学时分配 1.数据库系统基本概念(4学时) [1]基本概念 [2]数据库技术及发展 [3]数据库系统的结构 基本要求: ①了解数据库技术的发展情况,理解数据库系统的结构。 ②掌握数据库的基本概念。 2.数据模型与概念模型(4学时) [1]信息的三种世界 [2]概念模型 [3]数据模型 基本要求: ①了解信息的三种世界,深刻理解概念模型和数据模型。 ②掌握概念模型和数据模型的表示方法。 3.关系数据库(4学时) [1]关系模型及其定义 [2]关系代数 基本要求: ①了解关系模型的数据结构,关系模型的完整性约束。 ②掌握关系代数的运算方法。

数据库系统基础教程课后答案第五章

Exercise 5.1.1 As a set: Average = 2.37 As a bag: Average = 2.48 Exercise 5.1.2 As a set:

Average = 218 As a bag: Average = 215 Exercise 5.1.3a As a set:

As a bag: Exercise 5.1.3b πbore(Ships Classes) Exercise 5.1.4a For bags: On the left-hand side: Given bags R and S where a tuple t appears n and m times respectively, the union of bags R and S will have tuple t appear n + m times. The further union of bag T with the tuple t appearing o times will have tuple t appear n + m + o times in the final result. On the right-hand side: Given bags S and T where a tuple t appears m and o times respectively, the union of bags R and S will have tuple t appear m + o times. The further union of bag R with the tuple t appearing n times will have tuple t appear m + o + n times in the final result. For sets: This is a similar case when dealing with bags except the tuple t can only appear at most once in each set. The tuple t only appears in the result if all the sets have the tuple t. Otherwise, the tuple t will not appear in the result. Since we cannot have duplicates, the result only has at most one copy of the tuple t. Exercise 5.1.4b For bags: On the left-hand side:

数据库课程设计 汽车销售管理系统

数据库课程设计汽车销售管理系统 院(系)别 班级 学号 姓名 指导教师 时间

课程设计任务书 题目汽车销售管理系统 系 (部) 专业 班级 学生姓名 学号 月日至月日共周 指导教师(签字) 系主任(签字) 年月日

成绩评定表

目录 1.系统分析..................................... 1.1系统需求分析............................................................................ 1.2项目规划.................................................................................... 1.3系统功能结构分析.................................................................... 1.4设计目的分析............................................................................ 1.5开发及运行环境分析................................................................ 2.数据库系统设计................................. 2.1数据表的设计 ........................................................................... 3.应用程序设计.................................. 3.1界面设置 ................................................................................... 3.2关键函数代码 ........................................................................... 4.系统测试...................................... 4.1系统连接SQL2005方法 ........................................................... 5.设计体会......................................

相关主题
文本预览
相关文档 最新文档