【问题标题】:Inserting data into two different tables with SQL Server 2008?使用 SQL Server 2008 将数据插入两个不同的表?
【发布时间】:2018-09-16 16:50:19
【问题描述】:

我的数据库中有三个表:Contacts(主表)、UsersStaffContacts 表有一个主键,它作为UsersStaff 表的外键引用。

联系人

ContactID (Primary Key)
First Name
Last Name 
Email 

用户

ContactID (Foreign Key) 
Username 
Password 

员工

ContactID (Foreign Key) 
Position 
Comments

使用INNER JOIN 从这些表中提取数据相当简单,这取决于您需要从UsersStaff 表中获取哪些数据。更新和插入新记录是我不确定采用哪种方法的事情。

由于Contacts 表是我的主表并拥有唯一ID,但同时在UsersStaff 之间共享,我不确定这种情况。

假设我想输入新的用户记录。我需要在Contacts 表中输入名字、姓氏和电子邮件,在Users 表中输入用户名和密码。同时,我必须检查 Contacts 表中是否已经存在 First、Last name 和 email,因为之前可能已经为 Staff 记录输入了这条 Contact 记录。

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

拥有三个表的全部意义在于防止出现冗余数据,因为 User 可能是 Staff,但如果有意义的话,Staff 可能不是 User。如果有人可以帮助我选择最好的方法,请告诉我。谢谢

【问题讨论】:

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

标签: sql sql-server database sql-server-2008 database-design


【解决方案1】:

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

那么如果你要INSERT,你必须先INSERT到Contacts中,得到新插入的ID,然后再INSERT到另外两个表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多