希望有人可以解释一下:查找表是否需要自己的ID?MySQL查找表和ID /密钥
例如,说我有:
Table users: user_id, username
Table categories: category_id, category_name
Table users_categories: user_id, category_id
会在 “users_categories” 每一行需要一个额外的ID字段?该表的主键是什么?谢谢。
希望有人可以解释一下:查找表是否需要自己的ID?MySQL查找表和ID /密钥
例如,说我有:
Table users: user_id, username
Table categories: category_id, category_name
Table users_categories: user_id, category_id
会在 “users_categories” 每一行需要一个额外的ID字段?该表的主键是什么?谢谢。
您有选择。主键可以是:
一个新的,否则无意义的INTEGER列。
由user_id和category_id组成的密钥。
我更喜欢第一个解决方案,但我想你会发现大部分程序员在这里更喜欢第二个。
你可以创建一个使用这两个按键
复合键通常情况下,如果在你想要创建一个无论是复合键,由2个或多个字段的表无法找到合适的关键,
例如:
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表中创建一个新的主键是一个选项。只要知道它并不总是必要的。
无论如何,每个表都需要SQL中的主键和唯一ID。只需将其设为users_categories_id,您从技术上来说永远不必使用它,但它必须在那里。
如果您的users_categories
表具有超过(user_id, category_id)
的唯一主键,则 - 不,不一定。
只有当你
user_id, category_id
组合,你可以从一个独立的ID字段中受益。
我太喜欢第一个解决方案,自动增量整数只是保证唯一性 – Leslie 2010-03-11 18:01:43