Re: [討論] Key跟Foreign key的關聯性

作者: godead236 (科科彬)   2014-12-16 23:09:10
前文恕刪
※ 引述《vity (逍遙盃-佛得)》之銘言:
: ※ 引述《drcgs (我心中尚未崩壞的地方)》之銘言:
: : Q3:什麻情況下才考慮欄位自動產生流水號?
: : 感謝大家教導
: 如果ptt沒ID只有真實姓名, 就需要流水號才能辨認誰是誰, 因為會有同名同姓
: 如果ID可以不唯一, 例如可以有兩個drcgs, 那也要流水號才能分別出兩個drcgs
: 流水號 作者ID
: 1 drcgs
: 2 drcgs
: 資料已經有可以辨認誰是誰的就不需要流水號了, 反之就需要
: 一點淺見
建議primary key最好是使用流水號,不要讓pk與商務邏輯有關係,這麼做有兩個原因:
1.避免商務邏輯變動影響到pk, 例如:你使用身分證字號當作pk,萬一有人身分證字號修改
了,你的pk也會跟著異動。由於大部份的資料庫系統都是使用pk當作cluster index,
cluster index決定資料在硬碟的實際儲存順序,所以如果你的pk異動的話,資料的儲存
順序也會跟著異動
2.primary key會是index,使用流水號的話,資料型態是integer,效能會比較好
作者: bohei (run and fall)   2014-12-17 03:34:00
使用流水號的話,當資料有刪出、新增,流水號的連續就很難維持了吧?
作者: talenttb (CC)   2014-12-17 08:12:00
一樓的case 連續流水號自己手動編 系統的變key
作者: GoalBased (Artificail Intelligence)   2014-12-17 09:09:00
不連續會怎麼樣嗎? 影響還好吧
作者: gname ((′口‵)↗︴<><...<><)   2014-12-17 09:17:00
推~
作者: bohei (run and fall)   2014-12-17 10:01:00
不連續的話..會有爆炸的一天~也不是這樣講,是爆掉的機率比較大,如果刪除新增很頻繁的話
作者: GoalBased (Artificail Intelligence)   2014-12-17 12:58:00
怕爆掉就考慮用bigint約 10^20筆
作者: LINGZ (肥兔小欽)   2014-12-17 13:03:00
流水號必須連續的堅持實在沒必要,這是技術key而非業務key.怕資料量過多爆掉,GoalBased的方法可用.
作者: bohei (run and fall)   2014-12-17 14:54:00
受教了!!

Links booklink

Contact Us: admin [ a t ] ucptt.com