SQL表,两个表引用第三个表中的一列

时间:2016-12-19 14:52:29

标签: sql sql-server database relational-database

enter image description here

我有两种用户:人和公司。

我想将密码保存在一个表格中。

如何使用密码连接这两个表?使用sql server(MSSQL)?

或者还有其他方法可以做到这一点?

我不想在人员或公司表中保留hashedPass,因为我希望保留用户所做的任何密码更改。

5 个答案:

答案 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表子类。

编辑:如果您需要第三种类型的用户(比如应用程序 - 对于需要登录的软件应用程序),请为该用户类型添加另一个表作为第三个子类。

enter image description here

答案 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