2015-10-20 47 views
0

因此,我正在構建現有數據庫中的一組表,並遇到了一個奇怪的問題。第一SQL表設計問題

第一件事,有問題的表稱爲組織應用,並PostOrganizationsApplicants

組織是已經在關於填充了大量的數據,其已經以另一種形式填寫了另一個門戶網站組織的信息預先存在的表。編輯:我不能編輯這張表。
應用程序是記錄用戶在網站應用程序表單中輸入的所有信息的表格。這是一張新桌子。
郵政組織申請人基本上是組織的副本。這也是一個新表格。

過程雲:
1.前往網站和兩個不同的網絡形式之間選擇,A型涉及到公司誰在組織表,表格B涉及到公司誰是在該表中不是
2a。如果選擇表單A,則應用程序中的很多字段將由於之前的提交而自動填充。
2b。如果選擇表格B,公司必須從頭開始,並從頭開始填寫整個申請表。
3.任何表格B申請人必須進入郵政組織申請人表。

現在我非常新的SQL和數據庫管理,所以我可能聽起來很愚蠢,但是當我鏈接組織PostOrganizationsApplicants表到應用表,FK的對於OrganizationsID列和PostOrganizationsApplicantsID列將會有很多空的空間。
這是一個很好的做法嗎?有沒有更好的方法來組織我的桌子?我一直在絞盡腦汁,無法找到更好的方法。

回答

0

感謝大家,我想我找到了最有效的方式來做它啓發你的答案。

下面我的解決辦法,如果任何人有類似的問題...

首先,我會做出PostOrganizationsApplicants的PK 組織的FK通過進行「鏈接」表。 然後,我將在PostOrganizationsApplicants中添加一列,這將對是否從其他門戶網站完成表單獲得真/假值。然後我會在表格中提問一個問題,他們是否已經完成了表格的其他版本。如果布爾值爲真,那麼我會將這些行指向組織表以自動填充表單。

再次感謝!

0

爲什麼不直接在組織表中添加一列表明組織是「Post」類型的組織並將其設置爲表格B類型的申請人? - 然後,你所有的組織都在一張桌子上 - 用一個屬性來表明它們來自哪裏。

+0

對不起,遺漏了詳細信息,我無法編輯*** Organizations ***表中的列。讓我編輯那裏... – aishaq11

+0

還有很多其他領域的組織表沒有考慮到我在PostOrganizationsApplicants表中需要的。 – aishaq11

1

不,對於外鍵列允許NULL值不一定是錯誤的做法。

如果一個實體的實例與另一個實體的實例沒有關係,那麼在外鍵列中存儲一個NULL是規範實踐。

從你的用例的描述中,「A型」 Applications不會在Organizations行或在PostOrganizationsApplicants行有關。


獲得正確的基數是重要的。一個給定的Applications可以與多少個Organizations相關?零?一?超過一個?反之亦然。

如果關係是多對多的,那麼通常的模式是引入第三個關係表。

不常見的是,當與另一個實體的關係是一個例外而非規則時,我們還將爲非常稀疏的關係實現關係表。


我假設OrganizationsID列你指的是在PostOrganizationsApplicants表(這將意味着一個PostOrganizationsApplicants可關聯(最多)一個Organizations

我也假設PostOrganizationsApplicantsID列是Applications表,這意味着Applications一個實例可以用至多一個PostOrganizationsApplicants相關聯。

底線,具有「零或-一對多」的關係是有效的,只要因爲它支持業務模型的合適表示。

+0

謝謝你的及時答覆。應用程序表與組織作爲一對一以及作爲一對一的組織關聯應用程序。我想你可以粗略地說,PostOrganizationsApplicants是組織的延續,除了我沒有對組織表的寫入權限並且正在捕獲其他數據。 – aishaq11

+1

將關係有效爲「可選」,即通過允許將NULL值存儲在外鍵列中來實現「0,1對多」關係。如果這種關係是強制性的,那麼數據庫可以幫助強制在列上使用NOT NULL約束。 – spencer7593

0

如果你可以添加一個新的記錄組織(我希望你能)剛剛從 組織PostOrganizationsApplicants PK創建FK。所以 如果組織有相應的記錄郵政組織申請 - 這是「發佈」!

+0

組織和PostOrganizationApplicants之間的區別在於組織擁有已被接受的申請人,而PostOrganizationsApplicants保留提交記錄(包括預期接受),但目前未被接受的申請人。 所以我想避免將它們加在一起,否則我可以將這些表合併在一起。 – aishaq11

+0

然而,你的回答只是給了我一個答案的想法。非常感謝。 – aishaq11