像使用一张表一样使用两张表


to use two tables like a one table

我有两个不同类型的用户表。其中一个是普通用户表,用于注册用户。另一个是针对未注册用户的。我需要把这两张桌子和其他桌子一起使用。例如,

registered_users: userid,用户名,密码,姓名,性别,电子邮件,ip

unregistered_users: userid, name, gender, ip

some_table: id, title, content, userid

如何连接some_table与用户表?

我有一些意见,但没有一个是不对的。

  1. 使用所有表的regUser列和unRegUser列的空值并联接两张表等。这种方式不适合因为所有的表有很多空单元格。
  2. 如果所有表像some_table添加列userType和每个查询"如果"。但是这种方式既长又耗资源。
  3. 如果userid列类型为string (r13, u32 - r:registered)U:未注册),并使用"substring"answers"if",但这更多困难
  4. 创建一个类似"id, type, userid"的连接表,并使用这个id而不是userid。但也需要"if"
  5. 创建一个"id, regUser, unRegUser"为空的连接表值。

或者创建一个不同的用户表来组合两个用户表。当然我们又有空列

你认为哪条路最好?或者任何人都有不同的意见

当内容相同时,为什么要尝试通过创建两个表来复制它,而不是创建一个名为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)
);