看板 Database 關於我們 聯絡資訊
資料關聯圖: 客戶(1)<=(n)訂單(1)<=(n)訂單明細(n)=>(1)產品 以階層表示法再畫一遍 :9 (n)+=>(1)產品 訂單明細--+ (n)+=>(1)訂單(n)+ +=>(1)客戶 1. 一個客戶可以下多張訂單, 而一張訂單同時僅能屬於一個客戶, 所以客戶對訂單的數量關係是1對n, 而且訂單必須一定要有客戶, 所以以 客戶<=訂單 代表'完全依附'的關聯. 2. 一張訂單可以包括多筆訂單明細, 而一筆訂單明細同時僅能屬於一張訂單, 所以訂單對明細的數量關係是1對n, 而且明細必須一定要有訂單, 所以以 訂單<=訂單明細 代表'完全依附'的關聯. 3. 一筆訂單明細就只記錄一個產品, 而一個產品可以被多筆訂單明細所記錄, 所以明細對產品的數量關係是n對1, 而且明細必須一定要記錄產品, 所以以 訂單明細=>產品 代表'完全依附'的關聯. data schema: 客戶: ClientID,Name,etc.. ^主 +---------+ |外 訂單: OrderID,OwnerID,OrderDate,OrderNum,etc.. ^主 +-----------+ |外 訂單明細: ItemID, OrderID, Idx, ProdID, Qty, Price,etc.. |外 +------------------------+ v主 產品: ProductID, Name, etc.. 訂單明細的Idx代表訂單項次, 另外, 應該要有單價比較合理, 所以補上Price. 至於文中的'主鍵'不該只有一個, 不太確定是指什麼意思, 不過'主鍵' 跟'外鍵'的觀念要分清楚. 一般是'外鍵'聯結'主鍵'才有意義. ※ 引述《kucom (kucom)》之銘言: : 今天面試 一題寫錯 想請問大家解題... : 一張訂單可以訂很多產品,以下有這些資訊,如何規畫資料表及主鍵 : 訂單編號,訂單項次,產品編號,訂購數量,訂購人,訂購日期 : 我是寫: : TABLE A TABLE B : OrderID OrderNum OrderOwner OrderDate OrderNum ProdID Qty : ------- -------- -------- : 主鍵 |____________________________________| 主鍵 : 相關連 這裏補充一下: 如果TABLE B是訂單明細的話, 那麼必須 OrderNum(訂單編號),ProdID(產品id),Idx(訂單明細項次) 三者同時呈列才能夠用來識別一筆訂單明細, 這才能夠拿來當做訂單明細的主鍵. 你在文中在TABLE B的OrderNum標示為主鍵是錯誤的. 它是'外鍵', 用來與訂單 的主鍵OrderNum連結. : 面試的主管說我寫錯了,主鍵不該只有一個 : 請問這題如何寫才正確,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.84.3 ※ 編輯: bobju 來自: 211.74.84.3 (02/25 00:16)
kucom:懂了,受益良多! 謝謝! 02/25 09:20