Can phone number be used as a primary key in a database: Difference between revisions

From LemonWiki共筆
Jump to navigation Jump to search
 
(6 intermediate revisions by the same user not shown)
Line 12: Line 12:
* 以手機號碼為例,如果是個人聯絡用還 OK,因為經驗上個人不會時常換門號。
* 以手機號碼為例,如果是個人聯絡用還 OK,因為經驗上個人不會時常換門號。
* 但是如果是客戶公司業務的手機,則會需要考慮到日後業務換人的話,要怎麼處理資料異動。
* 但是如果是客戶公司業務的手機,則會需要考慮到日後業務換人的話,要怎麼處理資料異動。
* 如果作為「銷售紀錄、保固維修服務間的主鍵」是否代表該位客戶只會有一筆銷售紀錄、只有一筆保固維修服務紀錄?但可以作為 LEFT JOIN 查詢的索引條件。


'''維護「參照完整性」規則'''
'''維護「參照完整性」規則'''
Line 17: Line 18:
* 當客戶的手機遺失需要更換手機號碼,原本在相關的銷售紀錄、保固維修資料表的舊有資料參照的主鍵,也要隨之異動。<ref>[https://stackoverflow.com/questions/38612677/can-we-use-any-other-unique-constraint-as-primary-key-in-database-like-a-phone-n mysql - Can we use any other unique constraint as primary key in database like a phone number, or national Id - Stack Overflow]</ref>
* 當客戶的手機遺失需要更換手機號碼,原本在相關的銷售紀錄、保固維修資料表的舊有資料參照的主鍵,也要隨之異動。<ref>[https://stackoverflow.com/questions/38612677/can-we-use-any-other-unique-constraint-as-primary-key-in-database-like-a-phone-n mysql - Can we use any other unique constraint as primary key in database like a phone number, or national Id - Stack Overflow]</ref>


== 建議 ==
'''效能議題'''
* 主鍵使用手機號碼的話,第一碼需要補零,導致欄位資料型態是「文字」,但是使用整數可以有較好的查詢效能,


主鍵的設計會考慮資料本身有沒有獨特不重複的屬性,並且不可是 {{kbd | key=NULL}} 值,如果沒有獨特不重複的屬性,則使用資料庫本身內建的自動增加的流水號。(參考資料:MySQL 文件<ref>[https://dev.mysql.com/doc/refman/8.0/en/primary-key-optimization.html MySQL :: MySQL 8.0 Reference Manual :: 8.3.2 Primary Key Optimization]</ref>)
== 結論建議 ==


* 思考客戶資料本身有沒有獨特不重複的屬性
特定狀況雖然'''可以'''使用手機號碼當作主鍵,但是基於上述理由,'''不應該'''使用手機號碼當作主鍵。
* 使用資料庫引擎支援的自動增加的流水號 (auto-increment values)
 
主鍵的設計會 (1) 考慮資料本身有沒有獨特不重複的屬性,並且不可是 {{kbd | key=NULL}} 值, (2) 如果沒有獨特不重複的屬性,則使用資料庫本身內建的自動增加的流水號 (auto-increment values)。(參考資料:MySQL 文件<ref>[https://dev.mysql.com/doc/refman/8.0/en/primary-key-optimization.html MySQL :: MySQL 8.0 Reference Manual :: 8.3.2 Primary Key Optimization]</ref>)


== 參考資料 ==
== 參考資料 ==
Line 30: Line 33:
== Further reading ==
== Further reading ==
* [https://www.quora.com/Can-phone-number-be-used-as-a-primary-key-in-a-database-MS-Access-while-normalising Can phone number be used as a primary key in a database (MS Access) while normalising? - Quora]
* [https://www.quora.com/Can-phone-number-be-used-as-a-primary-key-in-a-database-MS-Access-while-normalising Can phone number be used as a primary key in a database (MS Access) while normalising? - Quora]
* [http://m.blueshop.com.tw/Thread.aspx?tbfumsubcde=BRD201410282213354RA 討論區內容 - 藍色小舖 blueshop - 手機版]
* [https://social.technet.microsoft.com/forums/zh-TW/52c45cf0-78d6-4ce3-9bb5-6a663dcf4129/-guid-pk?forum=sqlservermanagementzhcht 以 GUID 當做主鍵(PK)對於效率的影響]


[[Category:MySQL]]
[[Category:MySQL]]

Latest revision as of 01:08, 23 May 2022

可以使用手機號碼或者是電話號碼,當作資料表的主鍵 (primary key) 嗎?

問題[edit]

透過識別碼可以串聯不同資料,那麼可以將客戶手機號碼當作不同資料表,例如銷售紀錄、保固維修服務間的主鍵嗎?

技術思考[edit]

獨特不重複

  • 以手機號碼為例,如果是個人聯絡用還 OK,因為經驗上個人不會時常換門號。
  • 但是如果是客戶公司業務的手機,則會需要考慮到日後業務換人的話,要怎麼處理資料異動。
  • 如果作為「銷售紀錄、保固維修服務間的主鍵」是否代表該位客戶只會有一筆銷售紀錄、只有一筆保固維修服務紀錄?但可以作為 LEFT JOIN 查詢的索引條件。

維護「參照完整性」規則

  • 參照完整性指「指在兩個資料表中,次要資料表的外鍵(FK)的資料欄位值,一定要存在於主要資料表的主鍵(PK)中的資料欄位值。」[1][2]
  • 當客戶的手機遺失需要更換手機號碼,原本在相關的銷售紀錄、保固維修資料表的舊有資料參照的主鍵,也要隨之異動。[3]

效能議題

  • 主鍵使用手機號碼的話,第一碼需要補零,導致欄位資料型態是「文字」,但是使用整數可以有較好的查詢效能,

結論建議[edit]

特定狀況雖然可以使用手機號碼當作主鍵,但是基於上述理由,不應該使用手機號碼當作主鍵。

主鍵的設計會 (1) 考慮資料本身有沒有獨特不重複的屬性,並且不可是 NULL 值, (2) 如果沒有獨特不重複的屬性,則使用資料庫本身內建的自動增加的流水號 (auto-increment values)。(參考資料:MySQL 文件[4]

參考資料[edit]


Further reading[edit]