1. 資料庫到底用不用外鍵
外鍵的設計初衷是為了在資料庫端保證對邏輯上相關聯的表數據在操作上的一致性與完整性。
優點:
精簡關聯數據,減少數據冗餘
避免後期對大量冗餘處理的額外運維芹前操作。
降低應用代碼復雜性,減少了額外的異常處理
相關數據管理全由資料庫端處理。
增加文檔的可讀性
特別是在表設計開始,繪制 ER 圖的時候,邏輯簡單明了,可讀性非常強。
性能壓力
外鍵一般會存在級聯功能,級聯更新,級聯刪除等等。在海量數據場嫌耐清景,造成很大的性能壓力。比如插入一畝鬧條新記錄,如果插入記錄的表有 10 個外鍵,那勢必要對關聯的 10 張表逐一檢查插入的記錄是否合理,延誤了正常插入的記錄時間。並且父表的更新會連帶子表加上相關的鎖。
其他功能的靈活性不佳
比如,表結構的更新等。
缺點:
2. 資料庫的五種約束關系是什麼主外鍵有什麼用。求教
額,這是資料庫原理的基礎知識,比如連接,分左外連接,右外連接,外連接。
以左外連接為例
代碼大概為
select
*
from
data1
left
join
data2
on
data1.num=data2.num
where
data1.name='我'
可以連接不同的表。
主鍵,外鍵等的都是基礎的東西,主鍵相當於一列數據的身份證號碼,是唯一的。
外鍵就是說這個單元格的數據,是別的表的主鍵
。。。。。。
建議lz買本《資料庫原理》看看,一個星期就看會了。這個需要系統的學一下,半路出家學不到什麼東西
關於sql語句代碼,只有4種,select,update,insert,delete
非常簡單
3. 資料庫該不該用外鍵
明確說,不該用。
1. 外鍵屬於業務需求
2. 在數據量稍微大點的資料庫極大影響性能。
3. 影響業務擴展,並且業務本身能夠代替處理一致性關聯。
即便業務端忘記處理關聯信息的刪除,也不影響最終查詢結果。比如user和user_info表, user刪除了,user_info忘記刪除。正常關聯user_info表, 左連user結果正常。僅僅增加冗餘數據而已。相比檢索寫入性能的指數級降低,業務處理更好。況且,現在也不會真的刪除一條記錄,僅僅一個標記。忘記標記某給表,影響不大。
4. 如何解決PDM生成sql腳本的過程中,無法生成外鍵約束
先將斗敏資料庫修改成sqlserver2000,
雙擊存在問題的約束,選擇Integrity選項攜桐卡,辯銷坦修改Implementation屬性值為Declarative。
再次選擇Preview選項卡
ok,現在一切正常,這時再把資料庫變成sqlserver2008。