【发布时间】:2014-07-25 14:44:42
【问题描述】:
首先我需要指出我阅读了Database columns type prefix,但这不是同一个问题。
很久以前,和我一起工作的人告诉我,在我参与的项目中,所有列都需要有唯一的前缀。
例如对于users 表,我使用前缀u_,因此所有列都命名为u_id、u_name 等等。与所有其他表相同,例如 products 它将是 p_ 前缀。
这样做的原因是 SQL JOINS 更容易 - 如果要连接 2 个或更多表,则所有列都将具有唯一的名称。老实说,到目前为止我一直在使用这个建议,但实际上我不知道它是否被很多人使用,或者它真的很有用。
您对此有何看法?您是否使用这样的列命名,或者您认为这完全没有必要并且浪费时间? (显示数据时,如果不使用函数或 foreach 删除,则需要使用前缀)
编辑
以防万一更多解释
假设我们有带有字段 id、name 的 users 表和带有字段 id、name、user_id 的地址表
如果使用此方法,如果我们想获取所有可以做的字段:
SELECT *
FROM users u
LEFT JOIN address a on u.u_id = a.a_user_id
如果我们不为列使用前缀,我们应该使用:
SELECT u.id AS `u_id`,
u.name AS `u_name`,
a.id AS `a_id`,
a.name AS `a_name`,
a.user_id
FROM users u
LEFT JOIN address a on u.id = a.user_id
当然假设我们想使用列作为名称而不是数字索引 0,1 等等(例如在 PHP 中)
EDIT2
似乎我没有充分解释问题出在哪里 - 当然在 MySQL 中,在这两种情况下一切正常,这不是问题。
但问题是当我想在编程语言中使用数据时,例如 PHP。如果我使用:
<?php
$db = new mysqli('localhost','root','','test_prefix');
$result = $db->query("SELECT * FROM `user` u LEFT JOIN `address` a ON u.id = a.user_id ");
while ($data = $result->fetch_array()) {
var_dump($data);
}
我明白了:
array(8) { [0]=> string(1) "1" ["id"]=> string(1) "1" 1=> string(5) "Frank" ["name"]=> string(3) "USA" [2]=> string(1) "1" [3]=> string(3) “美国”[4]=>字符串(1)“1”[“user_id”]=>字符串(1)“1”}数组(8){ [0]=>字符串(1)“2”[“id”]=>字符串(1)“2”1=>字符串(4)“约翰” ["name"]=> string(6) "加拿大" [2]=> string(1) "2" [3]=> string(6) "加拿大" [4]=> 字符串(1) "2" ["user_id"]=> 字符串(1) "2" }
而该查询的 PhpMyAdmin 结果如下所示:
在 PHP 中获取所有数据,但我可以使用数字索引访问数据:$data[0]、$data[1],这不是很方便。我不能使用用户名,因为在$data['name'] 中只有地址名称,在 id 中相同。如果我同时使用以下任何一种:列的别名或列的前缀,我将能够使用字符串索引来访问数据,例如 $data['user_name'] 访问用户名和 $data['address_name'] 访问地址名称。
【问题讨论】:
标签: mysql sql database database-schema prefix