希望有人能对此有所了解:查找表是否需要自己的ID?
例如,说我有:
Table users: user_id, username
Table categories: category_id, category_name
Table users_categories: user_id, category_id
“users_categories”中的每一行都需要一个额外的ID字段吗?该表的主键是什么?感谢。
答案 0 :(得分:4)
你可以选择。主键可以是:
一个新的,无意义的INTEGER专栏。
由user_id和category_id组成的密钥。
我更喜欢第一种解决方案,但我认为你会发现大多数程序员喜欢第二种解决方案。
答案 1 :(得分:2)
您可以创建使用两个键的复合键
通常,如果在表格中找不到合适的密钥,您想要创建一个由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表中创建一个新的主键,那么这是一个选项。只知道它并不总是必要的。
答案 2 :(得分:1)
如果您的users_categories
表格上的唯一主键超过(user_id, category_id)
,那么 - 不,不一定。
只有你
user_id, category_id
组合您可以从单独的ID字段中受益。
答案 3 :(得分:0)
无论如何,每个表都需要SQL中的主键和唯一ID。只需将其设为users_categories_id,您在技术上永远不必使用它,但它必须在那里。