乙個經典的建模問題

2021-08-22 12:46:08 字數 1067 閱讀 6865

我們在建模時最常見的關係是one-to-one,one-to-many,many-to-one等,最近我注意到乙個問題,就是兩個實體同時存在one-to-many與one-to-one關係,而且這種兩種關係也是有聯絡的,那會產生什麼樣的問題呢?這就是我寫這篇文章的目的

考慮這種乙個場景:部門與員工的關係,乙個部門有多個員工,乙個員工屬於乙個部門,這是雙向one-to-many關係;同時部門中有個員工為主管,且乙個員工只能為乙個部門的主管。這是one-to-one關係,而且這個one-to-one關係是以前面那個one-to-many為基礎的。

這裡我提供幾種建模方式作為討論:

第一種,最簡單的方式,建立隱式的one-to-one的關係,這種方式的缺點,不好做o-r對映,至少,我目前還想不到怎麼用hibernate  annotation來實現。

第二種,通過乙個中間表來建立one-to-one關係,與第一種比,這個好寫o-r對映檔案,不過,從資料建模的角度看,沒有體現出one-to-one的關係是建立在one-to-many基礎之上,這只能由程式設計師在程式設計**中來實現,尤其是,若想獲得某個部門的所有員工時,就要查詢兩張表

第三種,與第二種相似,就是把部門主管表改為部門員工表,第二種方式以已部門為中心,這種方式以員工為中心,而且這種方式與第二種比較會有較大效能損失,尤其在部門員工數比較多的時候

第四種,就是在部門中建乙個指向員工表的外來鍵(「主管」),這種方式有個缺點,就是在生成資料庫時,會產生「雞生蛋」與「蛋生雞」的問題。而且,我一直認為這種問題在資料建模時,應該嚴格避免的

我自己目前採用第二種方式,大家可以討論哪種方式比較好

乙個經典的多執行緒同步問題

本篇文章參考了 程式描述 主線程啟動10個子執行緒並將表示子線程式號的變數位址作為引數傳遞給子執行緒。子執行緒接收引數 sleep 50 全域性變數 sleep 0 輸出引數和全域性變數。要求 1 子執行緒輸出的線程式號不能重複。2 全域性變數的輸出必須遞增。下面畫了個簡單的示意圖 分析下這個問題的...

乙個sql語句的經典問題,求解!

表depart id parentid name 1 0 a 2 1 b 3 2 c 4 3 d 5 4 e 6 5 f 7 6 g 8 7 h 9 8 i 以上是表的資訊,要求寫出一條select語句,把parentid為1的 子孫 都查處來。在orcale裡實現了,語句如下 select id,...

乙個經典錯誤

今天,在學習qt tutorial 8的時候,犯了乙個經典錯誤,在建構函式裡面覆蓋了 應該是這樣稱呼這種行為的吧 私有成員變數,導致私有成員變數沒有初始化,引起懸空指標,導致程式崩潰。出錯 如下 lcdrange.h ifndef lcdrange h define lcdrange h inclu...