ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

Êý¾Ý¿â¸´Ï°3¨D¨DÊý¾Ý¿âÍêÕûÐÔ(Ò»)
2015-07-24 10:57:30 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:4´Î
Tags£ºÊý¾Ý¿â ¸´Ï° ÍêÕûÐÔ

Êý¾Ý¿â¸´Ï°">Êý¾Ý¿â¸´Ï°


CH5 ÍêÕûÐÔ

5.1 ÍêÕûÐÔÔ¼Êø

Êý¾Ý¿âÍêÕûÐÔÊÇÖ¸Êý¾Ý¿âÖÐÊý¾ÝÔÚÂß¼­ÉϵÄÒ»ÖÂÐÔ¡¢ÕýÈ·ÐÔ¡¢ÓÐЧÐÔºÍÏàÈÝÐÔ£¬ÄÇôÍêÕûÐÔÔ¼Êø¾ÍÊÇÖ¸Óû§²åÈë¡¢Ð޸ĺÍɾ³ý²Ù×÷ʱ£¬DBMSΪÁ˱£Ö¤Êý¾Ý¿âÂß¼­ÉϵÄÒ»ÖÂÐÔ¡¢ÕýÈ·ÐÔ¡¢ÓÐЧÐÔºÍÏàÈÝÐÔËù±ØÐèÒª¼ì²éµÄÔ¼ÊøÌõ¼þ

C.J.DateÔÚ¡¶An Introduction to Database Systems¡·Ò»ÊéÖÐÃèÊöÁËËÄÖÖÍêÕûÐÔÔ¼Êø£º

ÀàÐÍÔ¼Êø ÊôÐÔÔ¼Êø ¹ØÏµ±äÁ¿Ô¼Êø Êý¾Ý¿âÔ¼Êø

C.J.DateÌá³öµÄÀíÂÛ¶à°ëÊǽ¨Á¢ÔÚËû×Ô´´µÄTutorial DÕâ¸ö¸ÅÄîÐÍÊý¾Ý¿â²Ù×÷ÓïÑÔÉϵģ¬ÏÂÃæµÄÃèÊöÒ²ÊÇ»ùÓÚTutorial D£¬×¢Òâ²»ÒªºÍSQL»ìÏý

£¨1£©ÀàÐÍÔ¼Êø

ÀàÐÍÔ¼ÊøÊǹØÓÚ×Ô¶¨ÒåÀàÐ͵ÄÖÖÀࣨ»ò¾ÍÊÇÊýÓò£©ÒÔ¼°Öµ´óСµÄÔ¼Êø£¬ÀýÈçÎÒÃÇ×Ô¶¨ÀàÐÍweightÊÇʵÊýÀàÐÍÇÒÒªÇóweight±ØÐë´óÓÚ0£¬ÄÇôÓÃTutorial D¶¨ÒåÒ»¸öÀàÐÍÔ¼ÊøÈçÏ£º

TYPE weight POSSREP(RATIONAL) CONSTRAINT the_weight(weight) > 0.0;

POSSREPÊÇpossible representation£¨¿ÉÄܵıí´ï·½Ê½£©£¬RATIONALÊÇÓÐÀíÊý£¬the_¼Óweight£¨Ç°ÃæÌáµ½¹ýÕâÊÇC.J.DateÌá³öµÄ¶ÔÀàÐ͵IJÙ×÷·ûºÅ£¬±íʾȡֵ£©weight×÷ÓÃÓÚweight±íʾȡֵ

£¨2£©ÊôÐÔÔ¼Êø

ÊôÐÔÔ¼Êø¾ÍÊǶ¨Òå¹ØÏµÊ±¶¨ÒåÊôÐÔµÄÀàÐͲúÉúµÄÒþÊ½Ô¼Êø£¬Tutorial D¶¨ÒåÒ»¸ö¹ØÏµÈçÏ£º

VAR S BASE RELATION(S# S#, status integer, city char);

±ÈÈçÉÏÀýµÄstatus¾ÍÐèÒªÒþʽ×ñÊØÀàÐÍintegerµÄÀàÐÍÔ¼Êø

£¨3£©¹ØÏµ±äÁ¿Ô¼Êø

¹ØÏµ±äÁ¿Ô¼ÊøÊǶԹØÏµÖÐÔª×éµÄÔ¼Êø£¬ÈçÏÞ¶¨ÔÚÂ׶صũӦÉÌ״̬һ¶¨ÊÇ20£º

Constraint sc1 is_empty(S where city = 'London' and status ~= 20);

¹ØÏµ±äÁ¿Ô¼Êø×ÜÊÇÁ¢¼´¼ì²éµÄ

£¨4£©Êý¾Ý¿âÔ¼Êø

¹ØÏµ±äÁ¿Ô¼ÊøÊÇÕë¶Ôµ¥¸ö¹ØÏµ±äÁ¿ÄÚ²¿ÊôÐÔµÄÔ¼Êø£¨¿ÉÒ԰ѹØÏµ±äÁ¿¾ÍÀí½âΪ¹ØÏµ/±í£©£¬ÈôÔ¼ÊøÉæ¼°¶à¸ö¹ØÏµ±äÁ¿£¬Ôò³ÆÖ®ÎªÊý¾Ý¿âÔ¼Êø

ÈçϵÄÊý¾Ý¿âÔ¼Êø£¬ÏÞ¶¨Áã¼þÉ̵ĸöÊý±ØÐëµÈÓÚ¹©Ó¦±íÖÐÁã¼þÉ̵ĸöÊý£º

Constraint dbc1 count(SP(p#)) = count(P(p#));

£¨5£©Ô¼ÊøÉè¼ÆµÄ»Æ½ð×¼Ôò£¨Golden Rule£©

¹ØÓÚGolden Rule£¬C.J.DateÔÚÕâÀïÏëÒª±í´ïµÄÊÇÎÒÃǶ¨ÒåµÄËùÓÐÍêÕûÐÔÔ¼Êø¶¼³ÆÖ®ÎªÄÚ²¿Ô¼Êø£¬Óû§ºÍDBMS¶¼ºÜÇå³þ£¬±ÈÈçÌåÖØ±ØÐë´óÓÚ0

È»¶øÎÒÃÇÉè¼ÆµÄϵͳ»¹ÓкܶàÆäËûµÄÍâ²¿Ô¼Êø£¬±ÈÈç˵ÎÒµÄÌåÖØÊÇ69.5£¬ÄÇô¿ÉÒÔ²åÈëÒ»¸öÔª×é(jcguo, 69.5)£¬µ«ÊDzåÈë(jcguo, 100.5)˵ÎÒÊǸö´óÅÖ×ÓDBMSÒ²ÊÇÔÊÐíµÄ£¬µ«ÕâÎ¥·´ÁËÏÖʵÊÀ½çµÄÔ¼Êø

Õâ½ìÉæ¼°µ½Ö®Ç°ÔÚÍêÕûÐÔ¶¨ÒåÖаüÀ¨µÄÕýÈ·ÐÔ£¬C.J.DateÈÏΪÕⲿ·ÖµÄÍêÕûÐÔÓ¦¸ÃÓÉÓû§»òÕß˵DBAÔÚÊý¾Ý¿âÍⲿÏÞ¶¨£¬¶ø²»Êǽ»¸øDBMS

5.2 ¼üKey

Êý¾Ý¿âÖпÉÒÔ¶¨ÒåÒ»ÖÖÌØÊâµÄÍêÕûÐÔÔ¼Êø¡ª¡ª¼ü£¨key£¬»òÕßÓÐʱҲ·­ÒëΪÂ룬Îҽмü±È½Ï˳¿Ú£©

£¨1£©¸÷ÖÖ¼üµÄ¶¨Òå

ÎÒÃÇÏÈÀ´ÅªÇå³þ¸÷ÖÖ¼üµÄ¶¨Ò壺

super key£º³¬¼ü£¬ÔÚ¹ØÏµÖÐÄܹ»Î¨Ò»±êʶԪ×éµÄÊôÐÔ¼¯ candidate key£ººòÑ¡¼ü£¨Ò»°ã½ÐºòÑ¡Â룩£¬²»º¬ÓжàÓàÊôÐÔ/²»¿É¹æÔ¼µÄ³¬¼ü primary key£ºÖ÷¼ü£¬Óû§Ñ¡×öΨһ±íʶԪ×éµÄºòÑ¡¼ü£¬Ö÷¼ü²»ÄÜΪnull alternate key£º¿ÉÑ¡¼ü£¬ºòÑ¡¼üÖгýÁËÖ÷¼üÒÔÍ⣬ûÓб»Óû§Ñ¡ÖеĺòÑ¡¼ü foreign key£ºÍâ¼ü£¬ÊÇÒÀÀµÓÚÆäËû¹ØÏµÓÃÓÚ±£Ö¤Êý¾Ý¿âÂß¼­ÍêÕûÐÔµÄÔ¼Êø

ǰËĸökey¶¼ºÜºÃÀí½â£¬ÏÂÃæ×ÅÖØÀí½âÒ»ÏÂÍâ¼ü

£¨2£©Íâ¼ü

¹ØÏµR1ÉùÃ÷ÔÚÊôÐÔa1ÉÏ´´½¨Íâ¼üFK£¬ÄÇôÓУº

Õâ¸öÍâ¼üFK±ØÐëreference£¨ÒýÓÃorÒÔÀ´£©ÓÚÁíÒ»¸ö¹ØÏµR2µÄºòÑ¡¼üCK£¨Ò»°ãreferenceÁíÒ»¸ö¹ØÏµµÄÖ÷¼ü£¬ÉèCK´´½¨ÓÚÊôÐÔa2ÉÏ£© Õâ¸öreferenceµÄ×÷ÓþÍÊDZ£Ö¤R1ÖÐÊôÐÔa1ÖгöÏÖµÄֵȫ²¿¶¼ÔÚR2µÄa2ÖгöÏÖ£¨ÍêÕûÐÔÔ¼Êø£©

×¢Ò⣬Íâ¼üFK²¢²»ÒªÇóR2ÖÐÊôÐÔa2£¨CK£©ÖгöÏÖµÄÖµ¶¼±ØÐëÔÚR1ÖÐÊôÐÔa1ÖгöÏÖ£¬Ö»ÊÇ˵µ¥·½ÃæµÄÔ¼Êø£ºÒ»µ©ÔÚFKÖгöÏÖÔò±ØÐëÔÚCKÖгöÏÖ

Íâ¼ü»¹ÓÐÁíÒ»¸ö×îÖØÒªµÄÌØÐÔ£ºreferential action£¨¹ØÁª¶¯×÷£©£¬¹ØÁª¶¯×÷ÊÇÒ»¸öÒþʽµÄÌØÊâµÄ´¥·¢Æ÷£¨Ã¿µ±Âú×ã³ö·¢Ìõ¼þʱ¶¼»á³ö·¢µÄ¶¯×÷¼¯ºÏ£©

ÏÂÃæÔÚ½²SQLÍêÕûÐÔʱ»áÏêϸ²ûÊöSQLËùÖ§³ÖµÄ¹ØÁª¶¯×÷

5.3 SQLÍêÕûÐÔ

ÔÙ´ÎÇ¿µ÷֮ǰÎÒÃǸ´Ï°µÄËùÓÐÍêÕûÐÔ¶¼ÊdzéÏóÐԵĸÅÄÐèÒªÀí½â£¬ÄÇôÕâһС½ÚSQLÍêÕûÐÔÔòÐèÒª¼ÇÒäÁË

£¨1£©ÓòÔ¼Êø

ÓòÔ¼Êø£¨Domain Constraints£©ÊÇSQLÖжÔÊôÐÔȡֵ·¶Î§µÄÔ¼Êø£¬SQLÉùÃ÷ÓòÔ¼ÊøÊÇÔÚcreate tableʱÍê³ÉµÄ£¬Ö§³Ö´øÃû³ÆµÄÏÔÊ½Ô¼ÊøÉùÃ÷ÒÔ¼°²»´øÃû³ÆµÄ±ã½ÝÔ¼ÊøÉùÃ÷Á½ÖÖ·½Ê½£º

create table Student( S# char(10), name char(20), gender char(1), constraint gc check (gender in ('F', 'M')) );

ºÍÏÂÃæµÈ¼Û£º

create table Student( S# char(10), name char(20), gender char(1) check (gender in ('F', 'M')) );

check´Ó¾äÖпÉÒÔʹÓó£ÓõıȽϹØÏµ²Ù×÷·ûºÅ£¬Ò²¿ÉÒÔʹÓÃin¹¹Ô츴ºÏÓï¾ä

¸øÔ¼ÊøÃüÃûÊÇΪÁËÄ³Ð©ÌØÊâÇé¿öÎÒÃÇÐèÒª¶ÔÔ¼Êø½øÐÐÐ޸쬼ûÎÒÁíÍâһƪ²©ÎÄ£º

ÁíÍâSQLÖ§³Ö¶ÔÒÑÉùÃ÷µÄtableÌí¼ÓÔ¼Êø£¬Ê¹ÓÃalter tableÓï¾ä£¬±¾¿Î³ÌÔݲ»ÒªÇó

£¨2£©Ö÷¼ü

SQLÖ÷¼üÉùÃ÷Ò²ÊÇÔÚcreate tableʱÉùÃ÷µÄ£¬ÉùÃ÷Ö÷¼üÒ²ÓÐÁ½ÖÖ·½Ê½£¨ÏÔʽºÍ±ã½Ýʽ£¬ÏÔʽÖ÷¼ü²»ÐèÒªÃû×Ö£¬ÒòΪһ¸ö¹ØÏµ/±íÖ»ÄÜÓÐÒ»¸öÖ÷¼ü£©£º

create table Student( S# char(10), name char(20), gender char(1) check (gender in ('F', 'M')), primary key (S#) );

µÈ¼ÛÓÚ£º

create table Student( S# char(10) primary key, name char(20), gender char(1) check (gender in ('F', 'M')) );

ÐèҪעÒâµÄÊÇÖ÷¼ü²»ÄÜΪ¿Õ£¬²»ÄܲåÈëÒ»Ìõ²»°üº¬Ö÷¼ü/Ö÷¼üΪnullµÄÔª×é

primary keyÒ²¿ÉÒÔ×÷ÓÃÓÚ¶à¸öÊôÐÔ£¬ÈçÍ¬Ç°Ãæ¸ÅÄî½²½âÖÐËùÌáµ½µÄ£¬ÈçºÎÉè¼ÆÒÀÐèÇó¶ø¶¨

£¨3£©unique

SQLÖÐʵÏÖºòÑ¡ÂëʹÓÃuniqueÔ¼Êø£¬Ò»¸ö¹ØÏµ¿ÉÒÔÓжàÌõuniqueÔ¼Êø

Õâ¾ä»°·­Òë×ÔÀÏʦppt£¬¸öÈ˾õµÃÐèÒª²¹³ä£º

SQLÖе­»¯ÁËcandidate keyµÄ¸ÅÄî uniqueÔ¼Êø²»½ö¿ÉÒÔʵÏÖºòÑ¡Â룬Ҳ¿ÉÒÔʵÏÖ³¬Â룬Ҳ¾ÍÊÇËüûÓв»¿ÉÔ¼µÄÏÞÖÆ

ÉùÃ÷uniqleÔ¼ÊøºÍÖ÷¼üÀàËÆ£¬¾ÙÀýÂÔ

£¨4£©Íâ¼ü

Foreign key֮ǰÁôÁ˸ö¿Ó£¬ÕâÀïÖ±½Ó¾ÙÀý°É£º

create table Dept( D# char(3) primary key, name char(20), type char(20) check (type in ('engineering', 'science', 'business')) );

ÏÈ´´½¨ÁËÒ»¸ötable DeptÊÇϵµÄ¹ØÏµ£¬ËüµÄÖ÷¼üÊÇD#

Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 1/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºORA-02049:³¬Ê±:·Ö²¼Ê½ÊÂÎñ´¦ÀíµÈ.. ÏÂһƪ£º»ùÓÚORACLEÊý¾Ý¿âµÄÑ­»·½¨±í¼°Ñ­..

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)