2009-12-16 40 views
0

因爲我的內存不足,我想編寫一個簡單的應用程序來存儲表列信息,特別是表列的含義。現在我的桌子設計出現了問題。我計劃讓該表有以下欄目:我應該如何設計這張桌子?

id, table_name, column_name, data_type, is_pk, meaning 

但是這種設計無法表達的外鍵關係。例如:table1.column1table2.column3table8.column5都具有相同的數據類型和相同的意思,我怎麼能修改我的表的設計來表達這種信息(關係)?

非常感謝!

PS: 其實,最近我工作的遺留應用程序。數據庫設計不佳。外鍵關係不在數據庫層上表示,而在應用程序層上表示。現在我的老闆不允許我們修改數據庫。我們只需要讓應用程序工作。所以我無法直接在數據庫上做一些工作。

+1

沒有SQL服務器存儲這些信息已經默認? – Kimvais 2009-12-16 08:16:17

+0

SQL Server爲每列執行「描述」屬性。我不確定他是在談論SQLServer,而是一個通用數據庫。 – Faruz 2009-12-16 08:19:53

+0

嗨Kimvais,我沒有使用SQL服務器,我想寫這個應用程序僅供我個人使用。例如,我可以在這個簡單的應用程序中保存我的生產數據庫元數據。修改生產數據庫設計並不方便。 – 2009-12-16 08:23:21

回答

3

根據您的DBMS,您可能可以在表/列上使用註釋來記錄每個列的含義。大多數DBMS允許您執行某種註釋。

如果你必須在你的表中有它,你有幾個選擇。

  • 自由文本如果這只是作爲一個幫助記憶,它並不真正需要的是機器可讀的。這使您更容易直接閱讀/使用。
  • fk_id存儲此外鍵映射到的字段的ID。然後,您可以定義一個視圖,從該外鍵拉入含義列。
  • 含義表將含義作爲ID存儲到單獨的表中,並使用視圖使其更易於使用。
  • 創建文檔將其保存在文檔中。這樣你就可以打印出來並且方便使用。

你可以嘗試爲此設計一個完整的非標準化模式,但我認爲這是認真的過度思考一些只是意味着記憶輔助的東西。

1

我只是將一列添加到您的設計「FK_Column_ID」,該列將在FK約束的情況下保存對列ID的引用。

另一種方式是創建DBDefinitions或類似的東西的數據庫副本。

+0

嗨法魯茲, 我已經考慮過這種方式。如果是這樣,我該如何編寫一個查詢來獲取所有具有相同含義的列?也就是說,在我的例子中,我如何獲得column1,column3和column5? – 2009-12-16 08:26:01

+0

你可以「分組」的意思。但我真的覺得意思應該是自由文本,不應該涉及條件。 Column3&Column5可能會指向我們添加的新字段中的Column1,因此您可以通過該字段獲取 – Faruz 2009-12-16 08:41:45

1

幾乎所有的DBMS都允許您將描述或註釋附加到表,索引和列定義。

甲骨文:

COMMENT ON COLUMN employees.job_id IS 'abbreviated job title'; 

如果指定爲模式的一部分外鍵關係,該數據庫將保持對它們的跟蹤,並顯示它們。

+0

實際上,最近我正在開發一個遺留應用程序。數據庫設計不佳。外鍵關係不在數據庫層上表示,而在應用程序層上表示。現在我的老闆不允許我們修改數據庫。我們只需要讓應用程序工作。所以我無法直接在數據庫上做一些工作。 – 2009-12-16 08:30:49

+0

在這種情況下,我與亞當:創建(文本)文檔。 – Thilo 2009-12-16 08:36:05

1

無法使用單個附加列定義複合外鍵關係。我會建議你創建第二個表來定義外鍵,或許有以下欄目:

id, fk_name, primary_table_id, foreign_table_id 

,並添加fk_id列相關的外鍵關係使用的字段。這適用於單列外鍵和複合外鍵。

另外,有些嘗試外交時,告訴你的老闆,如果你不能解決問題的根本原因,那麼完成項目所需的時間將比預期長得多。首先,您需要一些時間來實施一項工作,而這項工作將無法充分發揮作用,那麼您將需要更多時間來實施您應該首先實施的修復程序(在這種情況下,修復數據庫)。

1

如果你不允許編輯數據庫,那麼你可能想在另一個獨立的DBMS中創建它。我不認爲你可以簡單地達到目標,你可能會更好地將它寫在文本文件中。

我認爲你需要多個表。如果創建表的表:

id, table_name, meaning

然後列一個表:

id, column_name, datatype, meaning

然後,您可以創建一個鏈接表:

table_id, column_id, is_pk, meaning

這將使您可以將同一列鏈接到多個表 - 即expr嘲笑你的外鍵。正如我上面所說的 - 它可能比它的價值更努力。

1

FWIW,我經常這樣做,我找到的最好的「簡單應用程序」是一個電子表格。

我使用的表/列DEFS一個頁面,多餘的頁面,因爲我需要他們的東西像FK關係,查找值等

一個關於這個應用程序電子表格偉大的事情,是添加列當你需要它們的時候去除它們,&當你不需要時去除它們。

當您有大量的表格可以使用時,電子表格的索引功能也很有用。

1

我知道這並不直接回答你的問題,但如何使用數據庫圖?
我的內存也很差(我想我的年齡),而且我的牆上總是有最新的圖表。

您可以顯示所有表,字段和外鍵,並添加註釋。
我使用PowerAMC(又名PowerDesigner from Sybase)數據庫設計器,它也生成SQL腳本來創建數據庫,可能對遺留數據庫不是很有用,儘管它會逆向設計數據庫並自動創建圖表(可能需要一段時間讓圖表可讀)。

+0

如何在physicam模型圖中顯示錶格欄的註釋? – egor7 2016-10-27 11:28:29

1

我不明白爲什麼你應該實現一些應用程序來存儲一些信息。你也可以像OneNote或任何其他可用的組織者,開發wiki等一樣使用平板電腦:有很多方法可以存儲信息,以便將來查找時方便使用。

如果您可以進行一些內部更改,則可以將鍵的約束名稱更改爲可讀格式,如table1_colName_table2_colName

至少您可以製作一些圖表,無論是手工製作還是使用某些設計應用程序。

如果這一切都沒有解決您的問題,因此必須對您需要解決:)正是一些細節