我有两个不同类型的用户表。其中一个是普通用户表,用于注册用户。另一个是针对未注册用户的。我需要把这两张桌子和其他桌子一起使用。例如,
registered_users: userid,用户名,密码,姓名,性别,电子邮件,ip
unregistered_users: userid, name, gender, ip
some_table: id, title, content, userid
如何连接some_table与用户表?
我有一些意见,但没有一个是不对的。
- 使用所有表的regUser列和unRegUser列的空值并联接两张表等。这种方式不适合因为所有的表有很多空单元格。
- 如果所有表像some_table添加列userType和每个查询"如果"。但是这种方式既长又耗资源。
- 如果userid列类型为string (r13, u32 - r:registered)U:未注册),并使用"substring"answers"if",但这更多困难
- 创建一个类似"id, type, userid"的连接表,并使用这个id而不是userid。但也需要"if"
- 创建一个"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)
);