![](/img/trans.png)
[英]i want to create a mysql trigger to create primary key as varchar autoincrement
[英]cakephp mysql ,autoincrement id or varchar as primary key
我正在用cakephp 2.4構建一個Web應用程序,並且首先用一個整數自動遞增的id設計了我的用戶表,而由於我的URL的結構為: http://mywebsite/users/view/username
我意識到,與其使用一個整數自動增量,使用用戶名(VARCHAR 100)作為我的主鍵可能對性能更好。現在我很好奇這種方法在數據庫增長時將如何影響站點性能。
不要使用varchars作為主鍵。 這對性能來說太可怕了,您需要顯式檢查您是否沒有重復的密鑰,這不是常規的,外鍵則需要為varchar,路由器將無法正確處理它。
如果您擔心SEO,則可以閱讀CakePHP路由器如何處理此問題 。
在我的應用程序中,我動態生成一個帶有seo url的路由文件,該文件與我要顯示的事物的ID相匹配。 在您的情況下,該文件將具有以下條目:
Router::connect('/users/view/johndoe', array(
'controller' => 'users',
'action' => 'view',
13));
該解決方案對我來說效果很好,並且seo部分由附加到模型的SEO行為處理。 它也適用於反向路由,因此當您進行如下鏈接時:
<?php echo $this->Html->link(__('View'), array('action' => 'view', $user['User']['id'])); ?>
它將自動創建一個類似於/ users / view / johndoe的鏈接。 如果您決定稍后更改此結構,或擁有一個具有特殊路徑的特殊用戶(例如http://mywebsite.com/user-john-connor ),則這會將指向該用戶視圖的所有鏈接自動更改為新URL。 。
根據其他答案,請為您的PK使用一個整數。 根據您期望的記錄數量來選擇正確的int大小。 不對Cake使用整數PK可能會導致一些問題。 如果您使用的是框架,請遵循其約定-這就是框架的優勢!
不要在您的routes.php中為每個用戶動態生成唯一的路由。 這與具有通用路由的整個觀點背道而馳。 一種方法應該解決這個問題,您可以在相關控制器中進行處理。
例如,如果您指定所有實際控制器/動作:
Router::connect('/:controller', array('controller' => 'user|anotherController|etc'));
Router::connect('/:action', array('controller' => 'something'), array('action' => 'allowed|actions|etc'));
Router::connect('/:action', array('controller' => 'else'), array('action' => 'allowed|actions|etc'));
然后,您可以將其他所有內容(例如site.com/username)發送到特定位置。
Router::connect('/:username', array('controller' => 'users'), array('action' => 'view'), array('pass'=>array('username'), 'username' => 'regex'));
並在視圖函數中接受“ username”變量,並使用該變量從數據庫中查找正確的用戶。 另外請注意,如果
創建varchar2作為主鍵不是很好,我認為最好將它與int一起使用,並且可以在cakephp中使用路由: http : //book.cakephp.org/2.0/en/development/routing.html
成為:http: //yourwebsite.com/ : username
祝好運
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.