Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL Server 2008将数据插入两个不同的表?_Sql_Sql Server_Database_Sql Server 2008_Database Design - Fatal编程技术网

使用SQL Server 2008将数据插入两个不同的表?

使用SQL Server 2008将数据插入两个不同的表?,sql,sql-server,database,sql-server-2008,database-design,Sql,Sql Server,Database,Sql Server 2008,Database Design,我的数据库中有三个表:Contacts(主表)、Users和Staff。Contacts表有一个主键,该主键作为Users和Staff表中的外键引用 联系人 ContactID (Primary Key) First Name Last Name Email 用户: ContactID (Foreign Key) Username Password ContactID (Foreign Key) Position Comments 员工: ContactID (Foreign

我的数据库中有三个表:
Contacts
(主表)、
Users
Staff
Contacts
表有一个主键,该主键作为
Users
Staff
表中的外键引用

联系人

ContactID (Primary Key)
First Name
Last Name 
Email 
用户

ContactID (Foreign Key) 
Username 
Password 
ContactID (Foreign Key) 
Position 
Comments
员工

ContactID (Foreign Key) 
Username 
Password 
ContactID (Foreign Key) 
Position 
Comments
使用
内部联接
从这些表中提取数据相当简单,这取决于您需要从
用户
员工
表中获取哪些数据。更新和插入新记录是一件我不确定该怎么做的事情

由于
联系人
表是我的主表,它拥有唯一的ID,但同时在
用户
员工
之间共享,因此我不确定这种情况

假设我想输入新的用户记录。我需要在
联系人
表中输入姓名和电子邮件,在
用户
表中输入用户名和密码。同时,我必须检查
联系人
表中是否已经存在First、Last name和email,因为可能该
联系人
记录之前已输入
员工
记录

我不确定如何防止重复,但同时可能有同名的用户或员工。如果联系人表中已经存在电子邮件,我是否应该限制/过滤电子邮件,不让他们输入记录?还是有更好的方法来处理这个问题


拥有三个表的全部目的是防止冗余数据,因为
用户
可能是
职员
,但
职员
可能不是
用户
,如果这有意义的话。如果有人能帮我选择最好的方法,请让我知道。谢谢

首先,您必须使用SELECT查询和您想要测试的任何业务规则来决定是执行INSERT,还是更新现有记录


然后,如果要插入,必须先插入联系人,获取新插入的ID,然后插入其他两个表。

通过阅读您的帖子,我不能完全确定是否需要3个表。事实上,实际上可能只有一个表可用。联系人、用户和员工之间的关系是否为1:1?如果联系人可以是员工,但不是用户,那么为什么不允许用户特定列为空,反之亦然?(假设工作人员也可以是用户)相关问题:@Larnu如果我理解您的评论,您建议将所有数据存储在一个表中。然后有一个字段来标记用户是否是员工。正确吗?如果我的理解是正确的,这是一个选项。@DaveCullum这是一个相关但不同的主题,因为我问的是设计,这里有更多如何处理Insert/Update语句。