2010-03-11 51 views
1

希望有人可以解释一下:查找表是否需要自己的ID?MySQL查找表和ID /密钥

例如,说我有:

Table users: user_id, username 

Table categories: category_id, category_name 

Table users_categories: user_id, category_id 

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

回答

4

您有选择。主键可以是:

  1. 一个新的,否则无意义的INTEGER列。

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

我更喜欢第一个解决方案,但我想你会发现大部分程序员在这里更喜欢第二个。

+1

我太喜欢第一个解决方案,自动增量整数只是保证唯一性 – Leslie 2010-03-11 18:01:43

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表中创建一个新的主键是一个选项。只要知道它并不总是必要的。

0

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

1

如果您的users_categories表具有超过(user_id, category_id)的唯一主键,则 - 不,不一定。

只有当你

  • 想从某个地方指的是表的单行否则容易
  • 有不止一个等于user_id, category_id组合

,你可以从一个独立的ID字段中受益。