隨筆-13  評(píng)論-12  文章-1  trackbacks-0
          目前在職場(chǎng)中很難找到非常合格的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員。我的一個(gè)同事曾經(jīng)說(shuō)過(guò):“SQL開(kāi)發(fā)是一門(mén)語(yǔ)言,它很容易學(xué),但是很難掌握。”

            在面試應(yīng)聘的SQL Server數(shù)據(jù)庫(kù)開(kāi)發(fā)人員時(shí),我運(yùn)用了一套標(biāo)準(zhǔn)的基準(zhǔn)技術(shù)問(wèn)題。下面這些問(wèn)題是我覺(jué)得能夠真正有助于淘汰不合格應(yīng)聘者的問(wèn)題。它們按照從易到難的順序排列。當(dāng)您問(wèn)到關(guān)于主鍵和外鍵的問(wèn)題時(shí),后面的問(wèn)題都十分有難度,因?yàn)榇鸢缚赡軙?huì)更難解釋和說(shuō)明,尤其是在面試的情形下。

            您能向我簡(jiǎn)要敘述一下SQL Server 2000中使用的一些數(shù)據(jù)庫(kù)對(duì)象嗎?

            您希望聽(tīng)到的答案包括這樣一些對(duì)象:表格、視圖、用戶(hù)定義的函數(shù),以及存儲(chǔ)過(guò)程;如果他們還能夠提到像觸發(fā)器這樣的對(duì)象就更好了。如果應(yīng)聘者不能回答這個(gè)基本的問(wèn)題,那么這不是一個(gè)好兆頭。

            什么是索引?SQL Server 2000里有什么類(lèi)型的索引?

            任何有經(jīng)驗(yàn)的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員都應(yīng)該能夠很輕易地回答這個(gè)問(wèn)題。一些經(jīng)驗(yàn)不太多的開(kāi)發(fā)人員能夠回答這個(gè)問(wèn)題,但是有些地方會(huì)說(shuō)不清楚。

            簡(jiǎn)單地說(shuō),索引是一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)快速訪問(wèn)數(shù)據(jù)庫(kù)表格或者視圖里的數(shù)據(jù)。在SQL Server里,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級(jí)保存數(shù)據(jù)。這意味著不論聚集索引里有表格的哪個(gè)(或哪些)字段,這些字段都會(huì)按順序被保存在表格。由于存在這種排序,所以每個(gè)表格只會(huì)有一個(gè)聚集索引。非聚集索引在索引的葉級(jí)有一個(gè)行標(biāo)識(shí)符。這個(gè)行標(biāo)識(shí)符是一個(gè)指向磁盤(pán)上數(shù)據(jù)的指針。它允許每個(gè)表格有多個(gè)非聚集索引。

            NULL是什么意思?

            NULL(空)這個(gè)值是數(shù)據(jù)庫(kù)世界里一個(gè)非常難纏的東西,所以有不少應(yīng)聘者會(huì)在這個(gè)問(wèn)題上跌跟頭您也不要覺(jué)得意外。

            NULL這個(gè)值表示UNKNOWN(未知):它不表示“”(空字符串)。假設(shè)您的SQL Server數(shù)據(jù)庫(kù)里有ANSI_NULLS,當(dāng)然在默認(rèn)情況下會(huì)有,對(duì)NULL這個(gè)值的任何比較都會(huì)生產(chǎn)一個(gè)NULL值。您不能把任何值與一個(gè) UNKNOWN值進(jìn)行比較,并在邏輯上希望獲得一個(gè)答案。您必須使用IS NULL操作符。

            什么是主鍵?什么是外鍵?

            主鍵是表格里的(一個(gè)或多個(gè))字段,只用來(lái)定義表格里的行;主鍵里的值總是唯一的。外鍵是一個(gè)用來(lái)建立兩個(gè)表格之間關(guān)系的約束。這種關(guān)系一般都涉及一個(gè)表格里的主鍵字段與另外一個(gè)表格(盡管可能是同一個(gè)表格)里的一系列相連的字段。那么這些相連的字段就是外鍵。

            什么是觸發(fā)器?SQL Server 2000有什么不同類(lèi)型的觸發(fā)器?

            讓未來(lái)的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員知道可用的觸發(fā)器類(lèi)型以及如何實(shí)現(xiàn)它們是非常有益的。

            觸發(fā)器是一種專(zhuān)用類(lèi)型的存儲(chǔ)過(guò)程,它被捆綁到SQL Server 2000的表格或者視圖上。在SQL Server 2000里,有INSTEAD-OF和AFTER兩種觸發(fā)器。INSTEAD-OF觸發(fā)器是替代數(shù)據(jù)操控語(yǔ)言(Data Manipulation Language,DML)語(yǔ)句對(duì)表格執(zhí)行語(yǔ)句的存儲(chǔ)過(guò)程。例如,如果我有一個(gè)用于TableA的INSTEAD-OF-UPDATE觸發(fā)器,同時(shí)對(duì)這個(gè)表格執(zhí)行一個(gè)更新語(yǔ)句,那么INSTEAD-OF-UPDATE觸發(fā)器里的代碼會(huì)執(zhí)行,而不是我執(zhí)行的更新語(yǔ)句則不會(huì)執(zhí)行操作。

            AFTER觸發(fā)器要在DML語(yǔ)句在數(shù)據(jù)庫(kù)里使用之后才執(zhí)行。這些類(lèi)型的觸發(fā)器對(duì)于監(jiān)視發(fā)生在數(shù)據(jù)庫(kù)表格里的數(shù)據(jù)變化十分好用。

            您如何確一個(gè)帶有名為Fld1字段的TableB表格里只具有Fld1字段里的那些值,而這些值同時(shí)在名為T(mén)ableA的表格的Fld1字段里?

            這個(gè)與關(guān)系相關(guān)的問(wèn)題有兩個(gè)可能的答案。第一個(gè)答案(而且是您希望聽(tīng)到的答案)是使用外鍵限制。外鍵限制用來(lái)維護(hù)引用的完整性。它被用來(lái)確保表格里的字段只保存有已經(jīng)在不同的(或者相同的)表格里的另一個(gè)字段里定義了的值。這個(gè)字段就是候選鍵(通常是另外一個(gè)表格的主鍵)。

            另外一種答案是觸發(fā)器。觸發(fā)器可以被用來(lái)保證以另外一種方式實(shí)現(xiàn)與限制相同的作用,但是它非常難設(shè)置與維護(hù),而且性能一般都很糟糕。由于這個(gè)原因,微軟建議開(kāi)發(fā)人員使用外鍵限制而不是觸發(fā)器來(lái)維護(hù)引用的完整性。

          對(duì)一個(gè)投入使用的在線事務(wù)處理表格有過(guò)多索引需要有什么樣的性能考慮?

            您正在尋找進(jìn)行與數(shù)據(jù)操控有關(guān)的應(yīng)聘人員。對(duì)一個(gè)表格的索引越多,數(shù)據(jù)庫(kù)引擎用來(lái)更新、插入或者刪除數(shù)據(jù)所需要的時(shí)間就越多,因?yàn)樵跀?shù)據(jù)操控發(fā)生的時(shí)候索引也必須要維護(hù)。

            您可以用什么來(lái)確保表格里的字段只接受特定范圍里的值?

            這個(gè)問(wèn)題可以用多種方式來(lái)回答,但是只有一個(gè)答案是“好”答案。您希望聽(tīng)到的回答是Check限制,它在數(shù)據(jù)庫(kù)表格里被定義,用來(lái)限制輸入該列的值。

            觸發(fā)器也可以被用來(lái)限制數(shù)據(jù)庫(kù)表格里的字段能夠接受的值,但是這種辦法要求觸發(fā)器在表格里被定義,這可能會(huì)在某些情況下影響到性能。因此,微軟建議使用Check限制而不是其他的方式來(lái)限制域的完整性。

            返回參數(shù)和OUTPUT參數(shù)之間的區(qū)別是什么?

            如果應(yīng)聘者能夠正確地回答這個(gè)問(wèn)題,那么他的機(jī)會(huì)就非常大了,因?yàn)檫@表明他們具有使用存儲(chǔ)過(guò)程的經(jīng)驗(yàn)。

            返回參數(shù)總是由存儲(chǔ)過(guò)程返回,它用來(lái)表示存儲(chǔ)過(guò)程是成功還是失敗。返回參數(shù)總是INT數(shù)據(jù)類(lèi)型。

            OUTPUT參數(shù)明確要求由開(kāi)發(fā)人員來(lái)指定,它可以返回其他類(lèi)型的數(shù)據(jù),例如字符型和數(shù)值型的值。(可以用作輸出參數(shù)的數(shù)據(jù)類(lèi)型是有一些限制的。)您可以在一個(gè)存儲(chǔ)過(guò)程里使用多個(gè)OUTPUT參數(shù),而您只能夠使用一個(gè)返回參數(shù)。

            什么是相關(guān)子查詢(xún)?如何使用這些查詢(xún)?

            經(jīng)驗(yàn)更加豐富的開(kāi)發(fā)人員將能夠準(zhǔn)確地描述這種類(lèi)型的查詢(xún)。

            相關(guān)子查詢(xún)是一種包含子查詢(xún)的特殊類(lèi)型的查詢(xún)。查詢(xún)里包含的子查詢(xún)會(huì)真正請(qǐng)求外部查詢(xún)的值,從而形成一個(gè)類(lèi)似于循環(huán)的狀況。

            關(guān)于面試過(guò)程的思考

            這些問(wèn)題只不過(guò)是確定一個(gè)SQL Server數(shù)據(jù)庫(kù)開(kāi)發(fā)人員是否合格的起點(diǎn)。根據(jù)應(yīng)聘者對(duì)上面這些問(wèn)題的回答情況,我可能會(huì)要求他們參加我的TSQL編程考試,這一般是一套根據(jù)不同情況進(jìn)行的10到12個(gè)數(shù)據(jù)庫(kù)查詢(xún)。

            您需要自己決定將要雇用的開(kāi)發(fā)人員具有什么樣的專(zhuān)業(yè)技能。然后,需要通過(guò)自己的經(jīng)驗(yàn)、判斷以及在面試時(shí)對(duì)應(yīng)聘者的感受(來(lái)做最終決定)。

          posted on 2007-04-11 09:12 白杰 閱讀(177) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 铁力市| 离岛区| 鹿泉市| 仲巴县| 林州市| 韶关市| 阿坝县| 桃江县| 华蓥市| 平阴县| 淄博市| 乌拉特前旗| 石城县| 阜平县| 北川| 岳普湖县| 蒲城县| 德安县| 顺义区| 垦利县| 吉木乃县| 正安县| 怀安县| 衡阳县| 当雄县| 新巴尔虎左旗| 安康市| 依安县| 山东省| 信宜市| 汉中市| 嘉峪关市| 土默特左旗| 雷州市| 崇左市| 托克逊县| 香港| 新疆| 余干县| 菏泽市| 衢州市|