2015-09-06 63 views
0

主鍵有什麼辦法,我可以強迫我的MySQL數據庫,以便與名稱table_xyz新表的創建,只有在另一個表存在與table_xyz記錄?創建一個表是誰的名字必須是另一個表

基本上我想我的表名是一個外鍵。

例如allowed_tables結構:

table_id | other columns | 
-------------------------- 
table_xyz| bla bla bla | 
-------------------------- 

因爲我有在allowed_tables table_xyz的記錄,我可以創建一個表,這個名字。如果我刪除記錄,表格應該自動刪除。如果我更改表名稱,也會發生同樣的情況。

編輯1:

表allowed_structures實際上被稱爲貸款。它包含loan_id和合同所需的其他列。插入此記錄後,我創建了一個名稱爲< loan_id>的表(貸款表中必須存在一條記錄)。如果我更新/刪除貸款表中的< loan_id>的記錄,我希望該表名可以自動更改,而不是通過PHP腳本。目前通過PHP腳本完成。

我需要知道哪個是最好的選擇來做到這一點,爲什麼。謝謝!

+1

我認爲你需要重讀數據庫設計。 –

+0

這聽起來對我來說很糟糕的設計,但您可以嘗試使用源表的觸發器創建/更新/刪除新表。 – lad2025

+1

我建議使用與名稱不同的標識符,爲貸款表創建一個不像名稱那樣可修改的唯一標識符。 – krato

回答

4

這最初是爲SQL Server編寫的,但每個RDBMS的概念都是相同的。

是的,它是可以實現的,但Curse and Blessing Dynamic SQL by Erland Sommarskog

CREATE TABLE @tbl

這裏的願望是創建的名稱在運行時確定的表。

如果我們只查看反對在存儲過程中使用動態SQL的參數,其中幾乎沒有一個適用於此。如果一個存儲過程有一個靜態的CREATE TABLE,那麼運行這個過程的用戶必須有權創建表,所以動態SQL不會改變任何東西。計劃緩存顯然與它無關。等等

然而:爲什麼?你爲什麼想做這個? 如果您在應用程序中實時創建表格,那麼您已經錯過了關於數據庫設計的一些基礎知識。在關係數據庫中,表和列的設置應該是不變的。它們可能隨着新版本的安裝而改變,但不會在運行期間改變。

編輯:

在SQL Server中,我會用觸發源表(FOR INSERT/UPDATE/DELETE),並使用Dynamic-SQL我可以實現你想要什麼,但我仍然認爲這是瘋狂

如果你想去這個路徑檢查MySQL是否支持相同的。

+0

謝謝你的回答。我更新了我的內容以顯示創建新表的目的,其中的名稱必須存在於另一個表中。 – besciualex

相關問題