[英]UML Diagram and Multiplicity with weak entities
嗨,我開始嘗試使用 SQL 和數據庫設計。 我了解事物的 SQL 方面,但嘗試繪制圖表有點令人困惑。
考慮以下業務規則:
如果實習生一次只能做一個項目,但業務規則規定隨着時間的推移,他們可能會做多個項目。 以前的項目將如何保留?
有人可以向我展示多樣性嗎?
編輯:抱歉,我以為它添加了我的屏幕截圖:
一個實習生最多同時屬於一個實習生項目
這可以通過一個約束來表明,對於給定的受訓者來說,項目的日期永遠不會重疊。
在 OCL 中,約束可以寫成:
context Trainee inv:
self.ProjectHistory->forAll(h1,h2 |
h1<>h2 implies (h1.dateCompleted < h2.dateStarted) or
(h1.dateStarted > h2.dateCompleted))
也有:
context ProjectHistory inv:
self.dateStarted <= self.dateCompleted
假設dateCompleted設置為項目正在進行時的當前日期,並且我們知道項目正在通過其他方式進行。
如果項目正在進行時dateCompleted值為 0:
context ProjectHistory inv:
(self.dateStarted > 0) and
((self.dateCompleted = 0) or (self.dateStarted <= self.dateCompleted))
context Trainee inv:
self.ProjectHistory->select(dateCompleted = 0)->size() <= 1
context Trainee inv:
self.ProjectHistory
->forAll(h1,h2 |
h1<>h2 implies
if h1.dateCompleted = 0 then
h1.dateStarted > h2.dateCompleted
else
if h2.dateCompleted = 0 then
h2.dateStarted > h1.dateCompleted
else
(h1.dateCompleted < h2.dateStarted) or
(h1.dateStarted > h2.dateCompleted)
endif
endif
)
其中使用關聯類是正確的方法。
隨着時間的推移,受訓者可能接受多個項目。
所以任何數字,重數0..1
必須是0..*
或快捷方式*
。
如果該規則和之前的規則被(隨着時間的推移)最多屬於 1 個受訓項目的實習生取代,則乘數必須為0..1
一個部分可以運行多個項目。
所以任何數字,多重性1..*
必須是0..*
或快捷方式*
一個項目可以有可能受訓者
may顯然很多,所以高數不是 1。
只是有a project have many trainees
可能意味着最小數量是 ,1 但can have
最小數量是 0 而不是 1。
所以最后多重性是0..*
或快捷方式*
,而不是1..1
以前的項目將如何保留?
他們多虧了多重性0..*
而不是0..1
,如果存在的話,受訓者不僅與正在進行的項目有關系
總結一下:
對象圖示例:
你可以檢查所有的規則都被遵守了。
在某些情況下,您的屬性名稱包含類的名稱,例如projectName e 和traineeId ,這是無用的,我建議您刪除屬性名稱中的類名稱。
一個沒有 ocl 的解決方案,可以直觀地描述所需的語義:
每個Trainee-Project
關聯都有一個開始日期,但只有Completed Trainee-Project
關聯才有結束日期。 這是直截了當的,將是我們每天用英語表達的方式。 那么為什么不在類圖中這樣做呢? 然后很容易表達,每個Trainee
最多可以有一個當前項目。 通過派生其端點,我們可以說,關聯的類型定義了端點的顯示位置 - 在current project
或completed projects
。
隨着時間的推移,鏈接必須將其 AssociationClass 從current Trainee-Project
更改為completed Trainee-Project
。 如果這對您來說聽起來很奇怪,您可能會從編程語言的角度思考。 它們中的大多數不支持動態重分類。 但事實上這就是現實。 實習生有一天會成為一名雇員。 他們正在改變的課程,正如一位偉大的詩人曾經說過的那樣(據我所知;-)
你可能會說,SQL 不支持這個。 嗯,是的,但它也不支持 n:m 關系。 因此,無論如何您都需要將域模型映射到 SQL。 因此,讓你的領域模型盡可能接近你的需求,稍后再考慮映射到 SQL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.