2013-03-26 17 views
2

首先,我對設計數據庫相對來說比較陌生,在與他們合作時只有有限的經驗。換句話說....請讓我容易與我:)初學者試圖設計和實現數據庫

我目前正在開發數據庫的設計的初步階段,我很快意識到,我的設計知識是非常有限的。但是我明白這個過程將會是多麼重要。

時間是一個問題,雖然我很欣賞任何迴應,'你應該讀這本書來幫助你......',我真的沒有時間這樣做;這是一項在正常工作時間以外幫助退伍軍人的志願者工作,這有希望解釋我缺乏經驗。

這裏是我的困境: 我目前概述了大約150個字段,需要在數據庫中輸入,但我很難決定如何將字段拆分成有效的表格鏈接在一起,規範化規則。

只給你的,我收集一兵一卒的信息片段:

  • 個人信息(姓名,部隊番號,宗教,出生地,近親等)
  • 家族成員(父母,子女,兄弟姐妹)
  • 教育史(歲的時候離開學校,檔次最高水平達到,大專/大學,貿易/ apprenticehip,語言口語/寫等)
  • 職業史(以前的工作經驗,僱主名稱,特定職務(病歷,年齡,眼睛/頭髮顏色,身高,體重,膚色,疤痕,視力,聽力等)
  • 身體檢查(骨折的病史,頭部受傷脊髓麻煩破裂結核哮喘,血壓,許多其他條件等)
  • 的團史(入伍之日起,團裏舉行入伍的時候,其他軍團加入,最高等級等)
  • 位置的士兵(戰士從出生,入伍,訓練,戰場,死亡的所有重要地點的清單)
    • 埋葬信息(死亡日期,死亡地點,墓地,墓地等)

顯然,有一噸的信息,需要對單個士兵被收集。我的問題是試圖決定如何以可管理和高效的方法拆分表格,以及需要爲每個表格列出的主鍵/外鍵。

  1. 想想每個行都會成爲一名士兵的話,這似乎是不合邏輯的。
  2. 從邏輯上講,也許我應該把數據庫分解成上面列出的表格,但是我不知道如何使用主鍵,因爲它將大致相同的每行的士兵ID - 然後連接表在一起(這對我來說看起來並不正確,因爲它與#1不一樣嗎?)
  3. 將數據庫分解爲非常簡單的表格(即每個表格有幾列),這些表格指向彼此。示例:Language_Table具有可能使用唯一ID進行口述/書寫的所有語言的列表。這似乎是最有意義的,但會創建大量的表格。

請幫我設計。我將永遠在你的債務:)

該計劃也是在Azure上託管數據庫,最終將提供給Windows Phone應用程序。

非常感謝您提供的任何幫助/方向。

+2

您不必強制數據進入關係數據庫。另一種方法是有一個單一字段「SoldierInformation」,其中包含一個XML或JSON字符串,其中包含上述所有信息。或者,更好的是,你可以看看一個NoSQL數據庫,比如MongoDB,它非常適合這類數據。 – 2013-03-26 16:03:57

回答

1

你想要做的是normalize士兵的信息。正如我可以提供的,閱讀我鏈接的維基百科文章就是一個簡潔的解釋。通過標準化數據項的關係,可以將此信息存儲在關係數據庫中。

讓我們從士兵表開始吧。通常,表名是單數,並以大寫字母開頭。你會把這個表中的每個物品放在這個表中,士兵只有這個項目的一個出現

符合這一標準將某些項目:姓名,出生地,出生日期,死亡日期,死亡地點,墓地等

這個表可以有儘可能多的項目(列)如你所需。唯一的標準是每個項目發生一次。

那麼,一個士兵會發生什麼不止一件事?

讓我們以家庭成員爲例。 FamilyMember表可能如下所示:

FamilyMember 
------------ 
FamilyMemberID 
SoldierID 
FamilyMemberType 
FamilyMemberName 
... 

FamilyMemberID是FamilyMember表的主要(集羣)鍵。它是一個自動遞增整數或長整數,爲表提供唯一鍵。

SoldierID是一個返回士兵表的外鍵。

FamilyMemberType描述家庭成員和士兵之間的關係。一些例子是父母,兄弟,姐妹等等。通常,你會保存一個代碼(P代表父母,B代表兄弟,S代表姐妹),而不是文本。

其餘列描述了家庭成員。這些列代表家庭成員中唯一一次出現

您可以對要保存在關係數據庫中的所有數據項執行此操作。

對於每個項目,你問自己,士兵和這個項目之間的關係是什麼?

再舉一個例子,我們來看一個團。士兵和團隊之間的關係是什麼?一名士兵可以屬於一個或多個團。

因此,您的軍團表的結構與FamilyMember表類似。

祝你好運,並隨時提出堆棧溢出的具體問題。

1

不想扔太多的曲線球,但你有沒有考慮過使用文檔數據庫,像RavenDb?它可以讓你很容易地把所有這些信息都放在一個單一的文件中,因爲它都涉及到一名士兵,所以試圖將其分成相關的表格是相當隨意的。這是所有與軍人有關的元數據,因此將它們存儲在一起以對抗單兵記錄。

作爲第一步,我將專注於設計您的領域模型,以準確地映射您希望記錄的關於solider的數據,詳見您的問題。完成之後,請考慮如何將其映射到選定的數據存儲區。

0

我可以給你一個小費......給出的評論對你來說可能不是那麼糟糕,但你可以決定創建一個真正的數據庫。你的問題是,這些信息特別關注士兵......但是如果你能看到自給自足的信息(比如當你試圖找到可能從閱讀規範發展而來的對象時),你就可以切斷信息。

在數據庫中會有相當多的referentiel表...我給你的​​例子:

與所有已知的這天,宗教宗教表,從該表到士兵表的鏈接。 (好事是,在你的士兵表基督教始終是基督徒,而不是一次基督教,克里斯蒂安·克里斯蒂安或..)

然後,你必須要找到這個paticular對象: 例如:WORK

你可以添加一個與員工的姓名工作臺,開始日期,結束日期....

或醫療檔案: 協商日期,醫院(順便說一下參考),身高,體重,....

東西像那樣