【发布时间】:2011-11-16 04:11:29
【问题描述】:
我正在尝试创建一个用户可以注册和创建配置文件的站点,因此我在数据库中使用了两个 MySQL 表,例如users 和 user_profile。
users 表有一个名为 auto increment primary key 的 user_id。
user_profile 表具有相同的 primary key,称为 user_id,但它不是 auto increment。
*请参阅注释,了解为什么我有多个表。
当用户注册时,将注册表中的数据插入到用户中,然后将last_insert_id() 输入到user_profile 表的user_id 字段中。我使用事务来确保这种情况总是发生。
我的问题是,这是不好的做法吗?
我是否应该为user_profile 表提供unique auto increment primary key,即使一个用户只能拥有一个个人资料?
也许创建这样的数据库还有其他缺点?
如果有人能解释为什么这是一个问题,或者如果没问题,我将不胜感激,我想确保我的数据库尽可能高效。
注意:我为 user 和 user_profile 使用单独的表,因为 user_profile 包含可能为 null 的字段,并且由于数据显示在 public个人资料。
也许这也是一种不好的做法,应该把它们放在一张桌子上?
【问题讨论】:
-
不明确声明主键是一个非常糟糕的主意。它禁用了 MySQL 必须加快速度的几乎所有优化。它强制 MySQL 创建隐藏的主键(你无法访问)。永远不要这样做。
-
@Johan:我将 user_id 声明为 user_profile 中的主键,只是它不会自动递增。
-
哦,好吧,因为你很酷。请注意,MySQL 会将单个 SQL 语句包装在它自己的事务中,您只需要在 2 个或更多 SQL 语句的链中使用事务。
-
您是否考虑过使用单个表格和几个视图?如果您的目标是效率,这一定是最佳解决方案。