使用两个表,如一个表

时间:2014-07-19 11:16:12

标签: php mysql sql database join

我有两个不同类型的用户表。其中一个是注册用户的普通用户表。另一个是未注册用户。 我需要将这两个表与其他表一起使用。例如;

registered_users:用户ID,用户名,密码,姓名,性别,电子邮件,IP

unregistered_users:用户ID,姓名,性别,IP

some_table: id,title,content,userid

如何将some_table加入用户表?

我有一些意见,但没有一个感觉不对。

  1. 将所有表regUser列和unRegUser列与空值一起使用 并加入两个表等。这种方式不适合因为所有表 有很多空单元格。
  2. 如果像some_table这样的所有表都添加了一列userType和每个查询 有“如果”。但这种方式很长,并且花费资源。
  3. 如果userid列类型为string(r13,u32 -r:registered, u:unregistered)并使用“substring”和“if”,但这更多 难
  4. 创建一个类似“id,type,userid”的连接表并使用此ID 而不是用户ID。但也需要“如果”
  5. 使用null创建类似“id,regUser,unRegUser”的连接表 值。
  6. 或创建另一个用户表以组合两个用户表。当然,我们再次使用空列。

    您认为哪种方式最好?或者任何人都有不同的意见。

1 个答案:

答案 0 :(得分:2)

当内容相同时,为什么要尝试通过创建两个表来复制它,而不是创建一个名为users的表

create table users
(
user_id int not null auto_increment primary key
username varchar(500),
password varchar(500),
email  varchar(400),
ip     varchar(800),
reg_status enum(0,1),
);

然后您可以使用此user_id并将其引用到您的辅助表中。

您可以在reg_status上建立查询

0 - Unregisterd
1 - Registered

如果您想要更多规范化的表格

然后你可以使用两个表

create table users
(
user_id int not null auto_increment primary key
email  varchar(400),
ip     varchar(800),
reg_status enum(0,1),
);


create table registered_users
(
login_id int not null auto_increment primary key
username varchar(500),
password varchar(500),
user_id - F.k (Foreign Key)
);