我想知道什么时候有一个父表和一个带有外键的子表,如:
users
id | username | password |
users_blog
id | id_user | blog_title
是否可以在连接表(users_blog)上使用id作为自动增量,或者我是否会遇到查询速度问题?
我还想知道哪些字段要添加为PRIMARY,哪些字段作为INDEX在users_blog表中?
希望问题很清楚,抱歉我的英语不好:P
答案 0 :(得分:2)
用户和user_blog之间的基数是什么?如果它是1:1,为什么在user_blog表中需要id
字段?
答案 1 :(得分:2)
我认为您实际上不需要users_blog表中的id列。我会将id_user作为该表的主索引,除非你有另一个原因(也许users_blog表实际上有更多列而你只是没有向我们显示它?)。
就性能而言,在users_blog表中使用id列不应该单独影响性能,但是您的查询永远不会使用此索引,因为您不太可能根据该列选择数据。将id_user列作为主索引实际上对您有利,并且会加快您的连接和选择。
答案 2 :(得分:2)
是否可以在连接表(users_blog)上使用id作为自动增量 或者我的查询速度有问题吗?
字段是否自动增加不会影响您检索数据库中已有数据的速度。
我也想知道哪些字段要添加为PRIMARY,哪些字段为 users_blog表中的INDEX?
PRIMARY KEY(和其他约束)的目的是强制数据的正确性。索引“只是”表现。
那么PRIMARY KEY中的字段取决于您希望用数据模型表达的内容:
users_blog
标识id
行(即这两个表之间存在“非标识”关系),则将id
单独放在PRIMARY KEY中。 id_user
和id
(又称“识别”关系)的组合识别出来的,那么您将在PK中将这两个字段放在一起。从索引开始,这取决于您将如何访问数据。例如,如果您执行了许多JOIN,则可以考虑id_user
上的索引。
有关索引性能的优秀教程可在以下网址找到:
答案 3 :(得分:1)
id
上的自动增量users_blog
列没有任何问题。
主键可以是id_user, id
。至于索引,这在很大程度上取决于您的使用情况。
我怀疑你的博客引擎会遇到任何与数据库相关的性能问题,所以索引与否并没有太大的区别。
答案 4 :(得分:1)
您不必在users_blog表中使用id
列,您可以将id_user与users表一起加入。自动增量也不是性能问题
答案 5 :(得分:-1)
id
是所有表键的好名称,它是标准的<table>_id
是外键的标准名称 - 在您的情况下使用user_id
(不是id_user
)user
而不是users
你应该看起来像SQL:
create table user (
id int not null auto_increment primary key,
...
);
create table user_blog (
id int not null auto_increment primary key,
id_user int not null references user,
...
);