有一个父表,并与像外键子表时,我在想:SQL查询加入建议
users
id | username | password |
users_blog
id | id_user | blog_title
是确定使用id作为自动增量也连接表(users_blog),否则我将有查询速度问题?
另外我想知道哪些字段添加为PRIMARY,哪些作为索引在users_blog表中?
希望的问题是明确的,对不起我的英文不好:P
有一个父表,并与像外键子表时,我在想:SQL查询加入建议
users
id | username | password |
users_blog
id | id_user | blog_title
是确定使用id作为自动增量也连接表(users_blog),否则我将有查询速度问题?
另外我想知道哪些字段添加为PRIMARY,哪些作为索引在users_blog表中?
希望的问题是明确的,对不起我的英文不好:P
我不认为你实际上需要users_blog表中的id列。我会让id_user成为该表的主索引,除非您有另外的理由这样做(也许users_blog表实际上有更多列,而您只是没有向我们展示它)。
就性能而言,在users_blog表中具有id列不应该影响性能本身,但您的查询永远不会使用此索引,因为您很可能不会选择基于该列的数据。将id_user列作为主索引实际上对您有利,并且会加速您的连接和选择。
我在users_blog
上看不到有自动增量id
列的问题。
主键可以是id_user, id
。至于索引,这很大程度上取决于您的使用情况。
我怀疑你会与博客引擎有任何数据库相关的性能问题,所以索引或不索引没有太大的区别。
您不必在users_blog表中使用id
列,您可以将id_user与users表一起加入。也自动增量是不是性能问题
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,
...
);
“这是一个好主意,它有一个标识符列...保证一种唯一标识行的方式(如果所有其他列对于两行都是相同的)” - 因此两个不同的用户可以使用相同的“用户名'和'密码'组合,当他们中的一个登录时,他们可以访问其他人的账户?这并不意味着我是个好主意。 – onedaywhen
如果您的要求是其他列集也是*唯一的,那么在它们上定义一个唯一的索引。我在谈论更多有关两次发生的相同数据,这不是问题 - 例如,您只想选择要删除的数据。 – Bohemian
正在讨论的案例有列'username'和'password':什么时候在这个表中复制'username'是一个好主意?我说永远不会,因此建议在此表中使用'username'作为唯一的关键。 – onedaywhen
是确定使用ID作为自动递增也在连接表(users_blog) 或我会有问题的查询速度?
字段是否自动递增不会影响您检索数据库中已有数据的速度。
也是我想知道哪些字段添加为主要和其在users_blog表 INDEX?
PRIMARY KEY(和其他约束)的目的是强制数据的正确性。索引对于性能而言“仅仅”。
所以场将在PRIMARY KEY什么取决于你希望与您的数据模型来表达:
users_blog
行标识单独的id
(即有一个“非身份”这两个表之间的关系),将id
单独放在PRIMARY KEY中。id_user
和id
(又名“识别”关系)的组合来识别它,那么您将在PK中将这两个字段放在一起。作为索引,这取决于您将如何访问您的数据。例如,如果您执行多个JOIN,则可以使用或考虑id_user
上的索引。
索引性能产生很好的教程,可以发现:
@guys什么我忘了告诉大约是id_user为1对多的关系(所以在需要时与用户ID我将加盟),并且我还会指定user_blog表中的id auto_increment用于仅分页user_blog表。 – sbaaaang