我正在開發一個數據庫。我會很感激一些幫助重組2到3表,所以數據庫都符合前3個正常形式;並且可以在將來使用和擴展/添加。我現在想花些時間來減少以後的努力和混亂。重組庫存管理數據庫(2到3個表;開發階段)
序言
請注意,我既是一個NUBE,和一個業餘愛好者,雖然我有一定的經驗和技能,熱情的豐富!
背景PROJECT
我寫一個小的(雖然雄心勃勃的!)Web應用程序(使用PHP和AJAX的的MySQL數據庫)。它本質上是一個系統,用於記錄和查看每件設備的當前位置及其維護歷史。如果相關,交易量將非常低(可能每天不到100個,但可能同時進行連接/操作)。行數也將非常低(可能是幾千)。
它將處理許多完全不同的設備類別,例如自行車和燈(隨機示例)。每個設備單元都將其數據記錄在數據庫中。對於自行車來說,重要的規格可能是框架顏色,而燈可能需要關於燈罩材料的信息。
由於類設備有所以什麼共同之處,我覺得來存儲信息的最合理的方式是每類1臺。這樣,每個類別都可以具有特定於該類別的列。
我打算在一個單獨的表中存儲一個類別列表。每個類別都有一個該類別唯一的ID。 (根據最終的設計,這可以作爲查詢表和/或表格來運行查詢)。可能只有很少的類別(可能是10到20個),除非系統特別成功並且擴展。
自行車列表將在自行車表中舉行。 每輛自行車都有一個自行車專用的標識(例如自行車0001)。 但燈臺(即燈0001)中會存在相同的ID。
在我的應用程序中,我希望用戶從下拉列表中選擇類別類型(例如自行車)。 然後他們將輸入對象的數字ID(例如0001)。 這兩個ID的組合是用於唯一標識對象的足夠信息。
圖片:
當前表設計
擬增設的表
問題
我的直覺是,應該有一個「整體表」,它包含每一件設備的文章,不管它來自何種類別。這比查詢知道多少個迷你桌子要簡單得多。但是當我試圖構建它時,它似乎會打破各種正常形式。例如引入冗餘,不一致的可能性,參照完整性問題等。它也開始看起來像域表。
或許首要表應該是一個查詢或視圖,而不是實體?
您能否看看截圖並讓我知道您的意見。謝謝。
由於各種原因,如果可能的話,我寧願使用代理鍵而不是自然鍵。理想情況下,我寧願在一列中使用代理鍵。
目前,自行車(或燈)表只使用第一列作爲主鍵。我是否應該將其擴展爲包含Equipment_Category_ID
列的組合鍵?然後使Equipment_Article
表成爲連接這兩列的視圖(迭代地爲每個設備類別)。可以將Bike_ID
和Lamp_ID
列重新命名爲通用類似Equipment_Article_ID
。這可能會使查詢變得更簡單,但有沒有失去特異性的風險?它會/仍然可以通過表名來限定。說到冗餘,當前燈或腳踏車表中的Equipment_Category_ID
似乎有點多餘(如果該表中的每個項目/行在該列中具有相同的值)。
這一切聽起來都很亂!但是,對於例如在線電子商店,出租商店等,這肯定是非常普遍的問題。希望有人會說那個老栗子!手指交叉!對不起,因爲不簡明,但我無法弄清楚什麼位可以省略。大部分似乎相關,如果有點健談。提前致謝。
UPDATE 27/03/2014(回覆@ElliotSchmelliot)
嗨埃利奧特。
感謝您的回覆,並指引我朝着正確的方向發展。我研究了OOP(用Java),但沒有意識到在SQL中可能有類似的東西。我閱讀了您感興趣發送的鏈接,其餘的網站/書籍看起來像是一個很好的資源。
請問MySQL InnoDB支持專業化&泛化?
不幸的是,經過3個小時的搜索和閱讀,我仍然無法找到這個問題的答案。關鍵詞我正在搜索的內容包括:MySQL +(繼承| EER |專業化|泛化|父|子|類|子類)。我發現的唯一積極結果是:http://en.wikipedia.org/wiki/Enhanced_entity%E2%80%93relationship_model。它提到了MySQL Workbench。 Equipment_Category(表3)
是和否的
可能的冗餘因爲這是一個查找表,它目前擁有的功能。 但是由於Lamp
或Bike
表中的每個項目都具有相同的類別,所以該列本身可能是多餘的;如果是,那麼Equipment_Category
表可能是多餘的......除非在其他地方需要。 I 有打算將其用作網絡表單下拉菜單的行來源/選項列表。在建議的Equipment
父表中將Equipment_Category作爲列是否也很方便。沒有它,如何返回燈類別的所有Equipment_Name
s的列表(忽略當前不同)。
實施
我不知道,可能需要在將來增加哪些新類設備的方式,所以我必須要限制包含在超/家長的屬性我100%肯定會對所有人來說都是共同的(或者允許我認爲是空值);爲了提高靈活性並避免長期維護,希望在許多子表中避免重複。這非常重要,因爲我們不會爲這個項目提供專業的IT支持。
變化真的必須自動化。所以我喜歡存儲過程的想法。並且CreateBike
的例子聽起來很熟悉(原則上,如果不是在語法上)用Java創建一個類的實例。
很多想法和教我自己!如果您有任何其他意見,建議等,他們會受到歡迎。而且,你能否讓我知道你用什麼軟件來創建你的UML圖。它的造型比我用過的更好。
乾杯!
嗨默認。在將來作出迴應時,請務必對回覆者帖子發表評論。這樣他們得到通知。作爲迴應,我已經對我的帖子進行了編輯。見下文。乾杯! – ElliotSchmelliot
@ElliotSchmelliot嗨艾略特。其實我在寫完我的回覆後寫了一條評論(以引起你的注意),但後來我看到我的評論從屏幕上消失了。當時我想也許它已被主持人刪除爲輕浮/多餘的,但也許我沒有通過點擊「添加評論」按鈕來保存它。 – Default300