iT邦幫忙

0

資料庫資料表關聯圖

有一個資料表關聯圖的問題想請問各位大大
近期小弟在幫公司整理資料庫
需儲存的資料有「公司資料」、「客戶資料」
目前輸入資料的方式為先輸入「公司資料」
再將「客戶資料」輸入到此「公司資料」下面
所以此兩張表為一對多的關係

欄位公司編號為流水號
欄位公司統編設定為不可重複
但遇到的問題是
在「公司資料」的每筆資料中
可能會有某間公司有分A廠、B廠、C廠....等
各分廠有各自的資本資料
但是統編皆為同一個(因為還是屬於同一間公司)
客戶資料須建立於各分廠下面
想請問各位大大要如何更改關聯圖
可以使資料正確的儲存下來

看更多先前的討論...收起先前的討論...
W 大那個應該不太對的

基本上要開個廠別資料表
廠別資料表要雙索引用 所屬公司統編 + 廠別 作索引
這樣就行了
客戶資料統編是唯一性 而廠別 + 所屬公司統編 也是唯一性
如果還要開廠的聯絡人資料表 一樣 廠別 + 所屬公司統編 + 聯絡人編號 是唯一性

這樣資料表就不亂了,在設計資料表的時候 雙鍵 甚至 三鍵 是很常用的設計
wiseguy iT邦超人 1 級 ‧ 2015-08-17 23:23:55 檢舉
你這叫《理論派》,我那叫《實戰派》。都能運行。
理論派講究正規理論,該用複合鍵代表唯一性就堅持要用複合鍵。因為書上教的。
實戰派講究簡單、快速。可以用 auto_increment 當關聯,就沒必要用複合鍵浪費時間、空間。因為 DB 用到最後不是這個結構漂不漂亮的問題,而是硬體效能問題。
丹尼爾 iT邦研究生 2 級 ‧ 2015-08-18 09:47:07 檢舉
有時後是會有集團式的公司, 總公司有自己的統編、連絡人等等
底下的子公司有的會有自己的統編,有的沒有統編,有的甚至還會有孫公司。

所以這樣的關聯方式不會有問題嗎?
wiseguy iT邦超人 1 級 ‧ 2015-08-18 11:59:04 檢舉
你列的需求並不是樓主的需求。
基本上啦,不用複合鍵也行,我三個表都有公司編號,廠別跟聯絡人不設主鍵
然後 廠別跟聯絡人的公司編號跟 客戶資料的公司編號是一對多的關連
這樣比較正確,你的客戶資料根本就不需要設分公司編號這個欄位
那個沒有意義,我說的錯誤是這個,參考鍵的資料來源通常是別的資料表的欄位資料
不用複合鍵對 SELECT 語法也不會有太大的差異,我只是考量題主看起來剛接觸資料庫
好歹也要了解一下資料庫正規化的概念,真的在實作的時候,多一欄少一欄對效能是有絕對的影響的
那就在分公司加上分公司統編的欄位就好,這個對資料表如何規畫沒什麼影響的
如果還要考量到 子公司的子公司,那就有點多層次的概念
SELECT 語法會稍微複雜點,但也是能做到的
資料庫作正規化之後還有一個叫做 逆正規
目的就是在解除過度正規化帶來的效能損失
這也是正規化的一種,這個書上也都會講的

1 個回答

14
wiseguy
iT邦超人 1 級 ‧ 2015-08-17 12:58:01
最佳解答

改成這樣:

我要發表回答

立即登入回答