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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數(shù)據(jù)庫設(shè)計問題,不通過外鍵如何維護(hù)關(guān)系

數(shù)據(jù)庫設(shè)計問題,不通過外鍵如何維護(hù)關(guān)系

一只萌萌小番薯 2019-04-13 08:46:19
現(xiàn)在有幾張表:學(xué)生表、班級表、專業(yè)表、院系表其中學(xué)生信息要實現(xiàn)批量導(dǎo)入功能,導(dǎo)入的信息中的班級、專業(yè)、院系等都是名稱,而不是id,所以在學(xué)生表中沒有班級、專業(yè)、院系的外鍵,是直接在三個字段中存入名稱。但是在其他地方還要用到班級、專業(yè)、院系的信息,所以這三個必須建表。這樣怎么保證學(xué)生表和其他三個表中數(shù)據(jù)的一致性。
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊

瀉藥。
數(shù)據(jù)一致性墨菲定律:任何數(shù)據(jù)只要存儲了超過1次,那么數(shù)據(jù)的一致性就算再精心維持,也遲早會受到破壞,沒有例外。
真正有效的文本數(shù)據(jù)應(yīng)當(dāng)并僅允許存儲1次。關(guān)系應(yīng)當(dāng)并僅允許使用ID來維持。任何冗余的數(shù)據(jù)都只應(yīng)當(dāng)用作緩存。學(xué)生表中必須只存儲班級·專業(yè)·院系的ID。這一點沒有任何的商量。
應(yīng)對其他的需求,應(yīng)當(dāng)在程序設(shè)計方法上見招拆招,而不是動搖數(shù)據(jù)庫設(shè)計的原則——
導(dǎo)入時應(yīng)當(dāng)識別班級·專業(yè)·院系的名稱并轉(zhuǎn)換為ID。
在學(xué)生表格的最后加入一個緩存列,存儲班級·專業(yè)·院系的名稱用于顯示時快速調(diào)用,而不應(yīng)當(dāng)拆掉學(xué)生表格原本的結(jié)構(gòu)。
緩存列任何時候想刷掉就刷掉,絕對禁止視為有效數(shù)據(jù),如果可能應(yīng)當(dāng)禁止導(dǎo)出。重要場合應(yīng)當(dāng)強制刷新甚至禁止緩存。
緩存不是人應(yīng)該看的東西,在數(shù)據(jù)表中占地越少越好。比如這個需求,緩存數(shù)據(jù)就應(yīng)當(dāng)用JSON編碼后擠在1列里,而不應(yīng)當(dāng)啰嗦的存3列。
考慮到班級·專業(yè)·院系名稱種類相對較少,記錄變動也不頻繁,也可以考慮使用Redis/Memcached等各種緩存方案。
最后提一下:數(shù)據(jù)庫的外鍵約束可以使用,但絕對不能作為維持?jǐn)?shù)據(jù)關(guān)系的可靠方法,只能在小規(guī)模數(shù)據(jù)庫中作為兜底的手段。斷不可寫出“try{$record->insert();}catch(MySQLForeignKeyException$e){...}”這樣的代碼。
                            
查看完整回答
反對 回復(fù) 2019-04-13
?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗 獲得超4個贊

你應(yīng)該在學(xué)生表里面存班級、專業(yè)和院系的id,如果為了方便展示,也可以存入班級、專業(yè)和院系的名字。
一般來說(我指的是要面向很多用戶的互聯(lián)網(wǎng)產(chǎn)品)我們不會使用數(shù)據(jù)庫的forignkey功能,而是采用程序邏輯來維護(hù)這些東西的一致性,比如在修改班級名稱的時候也記得把所有存了班級名稱的數(shù)據(jù)全部修改過來。這里面并沒有什么巧,就是簡單的通過程序邏輯(甚至是程序員的自覺性)來保證。
總之,沒什么好建議,如果要這么做,小心的寫代碼吧。
                            
查看完整回答
反對 回復(fù) 2019-04-13
  • 2 回答
  • 0 關(guān)注
  • 474 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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