我們的數據庫包含5+表最佳實踐:找到多個錶行的唯一ID
user
----------
user_id (PK) int NOT NULL
name varchar(50) NOT NULL
photo
--------
photo_id (PK) int NOT NULL
user_id (FK) int NOT NULL
title varchar(50) NOT NULL
comment
-------
comment_id (PK) int NOT NULL
photo_id int NOT NULL
user_id int NOT NULL
message varchar(50) NOT NULL
所有主鍵ID是唯一的ID。
所有數據都與http://domain.com/ {} primary_key_id
用戶訪問後使用ID鏈接,這是所有表中的唯一。
我應該如何實現這個id屬於哪個表?
溶液1
select user_id from user where user_id = {primary_key_id}
// if not found, then move next
select photo_id from photo where photo_id = {primary_key_id}
... continue on, until we find which table this primary key belongs to.
溶液2
- 創建對象表來容納所有的uniqe ID和有數據類型
- 上創建觸發器的所有AFTER INSERT的表,在obj中創建行ect表及其數據類型,將其插入選定的表
- (如果需要),然後執行select語句以查找id所屬的表名。
第二種解決方案是雙插入。 1插入用於行與完整數據實際的表2和插入件用於插入唯一id和表名在對象表,這是我們對第1步中
select type from object_table where id = {primary_key_id}
溶液3
- 前置表中創建名稱+ ID =編碼成新的獨特的整數 - 使用PHP
- 解碼ID並獲得與表名的原始ID(即使它只是爲數字型)
我不知道如何在PHP中實現這一點,但這個解決方案聽起來更好!你有什麼建議?
您的解決方案都可以使用。問題更多的是您需要多長時間才能進行相關操作。解決方案2可能更快,但需要額外的表格,插入時也需要更多的費用。解決方案1更簡單,但需要多達5條選擇語句。順便說一句:你有沒有想過使用獨特的ID與「發言」號碼?然後你可以從編號中知道原始表格。 – luksch 2013-04-23 18:22:14
你如何創建鏈接?讓你的鏈接像'http://domain.com/page.html?pk= {id}&table = {table}'(當'echo'鏈接添加表格作爲ID這樣的屬性時)。稍後,您可以解析url並在查詢中使用table屬性作爲變量。表ID在整個DB中不需要是唯一的。如果我正確理解你,你正在浪費大量可用的ID號碼。 – 2013-04-23 18:30:35
@luksch即時通訊使用UUID_SHORT()爲所有表創建唯一的ID。我更喜歡解決方案3,但不知道如何實現編碼/解碼。你怎麼看? – Basit 2013-04-23 18:33:38