我有两种用户:人和公司。
我想将密码保存在一个表格中。
如何使用密码连接这两个表?使用sql server(MSSQL)?
或者还有其他方法可以做到这一点?
我不想在人员或公司表中保留hashedPass,因为我希望保留用户所做的任何密码更改。
答案 0 :(得分:1)
我认为你的方向是错误的。在每个需要密码的表中放置一个PasswordId
:
create table Person (
. . .
PasswordId int references Passwords(PasswordId)
);
. . .
create table Passwords (
PasswordId int identity(1, 1) primary key,
. . .
);
然后从userId
表中删除Passwords
。
答案 1 :(得分:1)
嗯,这可能不是唯一的解决方案,但我会考虑使用USER_ID创建一个USER表,以及PERSON和COMPANY共有的任何列;然后将PERSON表和COMPANY表视为USER的扩展表。这解决了几个问题:
1)您可以从PASSWORD表到USER表创建一个简单的FK 2)您不必担心公司记录和PERSON记录重复ID值
答案 2 :(得分:1)
为所有用户创建一个超类表,并将密码放在那里(以及所有用户共享的任何其他属性)。然后创建用户表的Person和Company表子类。
编辑:如果您需要第三种类型的用户(比如应用程序 - 对于需要登录的软件应用程序),请为该用户类型添加另一个表作为第三个子类。
答案 3 :(得分:0)
这听起来像一个非常直接的外键:
ALTER TABLE person
ADD CONSTRAINT person_fk FOREIGN KEY(id)
REFERENCES passowrd(user_id);
ALTER TABLE company
ADD CONSTRAINT company_fk FOREIGN KEY(id)
REFERENCES passowrd(user_id);
答案 4 :(得分:0)
添加另一张表:
Entity
------
id
Entitytype [company/person]
ExternalID [either person.id or company.id]
将Password.user_id链接到Entity.id