MySQL查找表和id /键

时间:2010-03-11 16:40:56

标签: sql mysql database

希望有人能对此有所了解:查找表是否需要自己的ID?

例如,说我有:

Table users: user_id, username

Table categories: category_id, category_name

Table users_categories: user_id, category_id

“users_categories”中的每一行都需要一个额外的ID字段吗?该表的主键是什么?感谢。

4 个答案:

答案 0 :(得分:4)

你可以选择。主键可以是:

  1. 一个新的,无意义的INTEGER专栏。

  2. 由user_id和category_id组成的密钥。

  3. 我更喜欢第一种解决方案,但我认为你会发现大多数程序员喜欢第二种解决方案。

答案 1 :(得分:2)

您可以创建使用两个键的复合键

通常,如果在表格中找不到合适的密钥,您想要创建一个由2个或更多字段组成的复合密钥,

例如:

Code below found here

  CREATE TABLE topic_replies (
topic_id int unsigned not null,
id int unsigned not null auto_increment,
user_id int unsigned not null,
message text not null,
PRIMARY KEY(topic_id, id)); 
为此,您可以添加执行以下操作的代码:

  

ALTER TABLE users_categories ADD PRIMARY KEY(user_id,category_id);

因此,一旦你想要引用某个字段,你只需要从你的另一个表传递两个PK,但是为了链接它们,它们需要每个都被编码为外键。

  

ALTER TABLE users_categories ADD CONSTRAINT fk_1 FOREIGN KEY(category_id)REFERENCES categories(category_id);

但是如果您想在users_categories表中创建一个新的主键,那么这是一个选项。只知道它并不总是必要的。

答案 2 :(得分:1)

如果您的users_categories表格上的唯一主键超过(user_id, category_id),那么 - 不,不一定。

只有你

  • 想要从其他地方轻松引用该表的单行
  • 有多个相等的user_id, category_id组合

您可以从单独的ID字段中受益。

答案 3 :(得分:0)

无论如何,每个表都需要SQL中的主键和唯一ID。只需将其设为users_categories_id,您在技术上永远不必使用它,但它必须在那里。