第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

SQL-間接外鍵

SQL-間接外鍵

德瑪西亞99 2019-11-04 10:13:51
我對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)有一些疑問(wèn)。有這個(gè)名字嗎?這是好習(xí)慣嗎?有性能方面的考慮嗎?我有一個(gè)用于存儲(chǔ)關(guān)系的通用表結(jié)構(gòu)。最近,我重構(gòu)了一些東西來(lái)使用這種通用結(jié)構(gòu),而不是直接使用Fk列,但是現(xiàn)在我不確定這是否真的是最好的主意。原始架構(gòu): + ------------------ + + --------------------- + + ------ ---------------- + | 書(shū)本 | 注意事項(xiàng) | MetaParent | | ------------------ | | --------------------- | | ---------------------- | | ID | | ID | | ID | | NoteId | | MetaParentId :(空)| | MetaTableId | | + ------- + + ---- + KeyValue | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + ------------------ + + --------------------- + + ------ ---------------- +新架構(gòu) + ------------------ + + --------------------- + + ------ ---------------- + | 書(shū)本 | 注意事項(xiàng) | MetaParent | | ------------------ | | --------------------- | | ---------------------- | | ID | | ID | | ID | | | | MetaParentId :(空)| | MetaTableId | | + + + ---- + KeyValue | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + ------------------ + + --------------------- + + ------ ---------------- +因此,基本上,與在Book和Note之間沒(méi)有直接的Fk關(guān)系相比,我們通過(guò)使用MetaTableId / KeyValue列的MetaParent表具有間接關(guān)系。當(dāng)前,MetaParent表具有約50萬(wàn)條記錄,并且一切運(yùn)行正常。但是我們每天晚上都會(huì)重建索引。我擔(dān)心的是,現(xiàn)在Book和Note之間的關(guān)系并不明顯。您必須知道一個(gè)存在并使用MetaParent表。在性能方面,我不確定在什么時(shí)候遇到針對(duì)MetaTableId / KeyValue的連接運(yùn)行太慢的問(wèn)題。似乎您添加到該表中的越多,查詢速度就越慢。
查看完整描述

2 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

您應(yīng)該始終通過(guò)使用“常規(guī)” FOREIGN KEY來(lái)強(qiáng)制實(shí)現(xiàn)引用完整性。


簡(jiǎn)而言之,F(xiàn)OREIGN KEY具有以下優(yōu)點(diǎn):


它們已經(jīng)在DBMS中實(shí)現(xiàn)。

它們是聲明性的,自我記錄的和“顯而易見(jiàn)的”。

它們不能被繞過(guò)(除非被明確禁用或刪除)。

他們是正確的。

他們很快。

它們支持級(jí)聯(lián)引用動(dòng)作(例如ON DELETE CASCADE)。

DBMS知道數(shù)據(jù)是相關(guān)的,因此在某些情況下可以找到更好的查詢計(jì)劃。

如果使用的是ORM工具,則它可以自動(dòng)在對(duì)象之間生成引用。

以下是在應(yīng)用程序代碼中強(qiáng)制執(zhí)行引用完整性的相應(yīng)缺點(diǎn):


您正在復(fù)制已經(jīng)完成的工作。

它勢(shì)在必行,可能會(huì)“深埋”在您的應(yīng)用程序源代碼中,并且很難維護(hù)。

具有錯(cuò)誤的單個(gè)客戶端應(yīng)用程序可能會(huì)破壞參照完整性(并破壞數(shù)據(jù))。

您可能會(huì)在應(yīng)用程序代碼中錯(cuò)誤地實(shí)現(xiàn)它們。從一開(kāi)始看起來(lái)很簡(jiǎn)單,但是在并發(fā)環(huán)境中,很容易引入競(jìng)爭(zhēng)條件。

即使正確實(shí)現(xiàn)了它們,您也可能會(huì)使用某種形式的鎖定來(lái)避免爭(zhēng)用情況,這比DBMS中內(nèi)置的經(jīng)過(guò)特別優(yōu)化的FK可能更慢/可擴(kuò)展性更小。

您必須自己實(shí)現(xiàn)級(jí)聯(lián)。

DBMS不知道數(shù)據(jù)是否相關(guān),這可能會(huì)產(chǎn)生次優(yōu)的查詢計(jì)劃。

您可能需要在所選的ORM工具中進(jìn)行更多的手動(dòng)工作。

有這個(gè)名字嗎?


從來(lái)沒(méi)聽(tīng)說(shuō)過(guò)。我聽(tīng)說(shuō)使用了“通用FK”一詞,但這可能不是通用的。


這是好習(xí)慣嗎?


否(請(qǐng)參見(jiàn)上文)。


有性能方面的考慮嗎?


是的(見(jiàn)上文)。


查看完整回答
反對(duì) 回復(fù) 2019-11-04
  • 2 回答
  • 0 關(guān)注
  • 738 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)