2016-06-30 95 views
2

問題:我想創建一個外鍵到視圖的列。從我使用的列上的主鍵約束的另一個模式,該視圖是SELECT *創建一個視圖的外鍵

這可能嗎?如果是這樣,這被認爲是不好的做法?如果不是這樣,是否有其他選擇?它似乎不可能通過phpmyadmin,我不能在視圖上創建主鍵。

原因:我對兩個不同的應用程序使用了兩個模式,但是在一個架構中有一個'user'表(不一定是mysql.user表中的用戶),我希望在模式中重用授予其他模式的權限。這就是我使用視圖的原因。

回答

1

不,這是不可能的。

請參閱MySQL Forums post

在引用表

,必有所參考 列被列爲第一列的索引...

視圖是物化。他們本身並不是最左邊索引的表格。視圖也是時間快照(創建時間)。他們可能會失去當前模式的青睞,直到下一次使用才知道。因此,由於許多原因,他們不會將FK用作target,,因爲他們稱之爲

從手冊FAQ: Views

的視圖創建後,可以刪除或修改一個表 或視圖到的定義是指。要檢查 這種問題的視圖定義,請使用CHECK TABLE語句。

進一步的原因爲什麼一個視圖是我稱之爲快照的。其在任何時間點的有效性都可能變得高度受損。不是FK 參考候選人。

+1

無論迂腐分歧,這是你的問題的唯一答案。 – Drew

+0

道歉,我還沒有意識到MySQL中的所有視圖都是'快照',直到進一步研究。我來自Oracle DB背景。 – Mocking

0

除了使用視圖外,還可以創建另一個(共享)模式並將表移動到該模式。這使得它可以在不授予受限模式的單個表權限的情況下重用表。就像@Drew說的那樣,不可能在視圖上創建外鍵約束,因爲你不能在視圖上創建索引。