Can phone number be used as a primary key in a database: Difference between revisions
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> | ||
'''效能議題''' | |||
* 主鍵使用手機號碼的話,第一碼需要補零,導致欄位資料型態是「文字」,但是使用整數可以有較好的查詢效能, | |||
== 結論建議 == | |||
特定狀況雖然'''可以'''使用手機號碼當作主鍵,但是基於上述理由,'''不應該'''使用手機號碼當作主鍵。 | |||
主鍵的設計會 (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]
- ↑ 資料庫的完整性規則 - MySQL Taiwan
- ↑ Chapter 9 Integrity Rules and Constraints – Database Design – 2nd Edition
- ↑ mysql - Can we use any other unique constraint as primary key in database like a phone number, or national Id - Stack Overflow
- ↑ MySQL :: MySQL 8.0 Reference Manual :: 8.3.2 Primary Key Optimization