表关系,SQL 2005

时间:2010-09-22 17:52:53

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

好的我有一个问题,这可能很容易,但我找不到解决方案。

我有3个表加上一个主要的tbl。

tbl_1 - tbl_1Name_id 
tbl_2- tbl_2Name_id 
tbl_3 - tbl_3Name_id

我想将Name_id字段连接到下面的主要tbl字段。

main_tbl 
___________ 
tbl_1Name_id 
tbl_2Name_id 
tbl_3Name_id

主tbl具有这些字段的唯一键,而在另一个表中,字段是普通字段NOT NULL。

我想要做的是,无论何时在tbl_1,tbl_2或tbl_3中输入记录,主表中的值都会以该字段或其他方式显示。 我也有多对一的关系,其中一个当然是主要的。

我觉得这应该很简单但不能让它起作用。

2 个答案:

答案 0 :(得分:1)

看看SQL Server triggers。这将允许您在将记录插入任何一个表时执行操作。

如果您提供更多信息,请执行以下操作:

  • 插入的示例
  • 您想要的结果 看作是插入的结果

我可以尝试给你更多细节。

<强>更新

根据您的新评论,我怀疑您正在使用非规范化数据库架构。以下是我建议您在所讨论的Employee-Medical访问场景中构建表格的方法:

Employee
--------
EmployeeId
fName
lName

EmployeeMedicalVisit
--------------------
VisitId
EmployeeId
Date
Cost

一些重要的事情:

  1. 请注意,我没有进入 员工姓名进入 EmployeeMedicalVisit表,只是EmployeeId 。这个 有助于维护数据完整性 符合First Normal Form
  2. 您应该阅读1st2nd3rd正常形式。 Database normalization非常重要 主题,它将使你的生活 如果你能掌握它们会更容易。
  3. 通过上述结构,当员工访问医疗办公室时,您将在EmployeeMedicalVisit中插入记录。要为员工选择所有医疗访问,您可以使用以下查询:

    SELECT e.fName, e.lName
    FROM Employee e
    INNER JOIN EmployeeMedicalVisit as emv
    ON e.EployeeId = emv.EmployeeId
    

    希望这有帮助!

答案 1 :(得分:0)

这是一个示例触发器,可能显示您需要:

Create trigger mytabletrigger ON mytable
For INSERT 
AS

INSERT MYOTHERTABLE (MytableId, insertdate)
select mytableid, getdate() from inserted

在触发器中,您有两个可用的插件,已插入和删除。 insert表会压缩插入到触发器的表中的数据,包括任何自动生成的id。假设您不需要同时使用其他数据,那么就是将数据传输到另一个表的方法。你可以从系统存储的procuders或连接到其他表中获取其他数据,但不能从应用程序中的表单获取。

如果确实需要触发器中没有的其他数据(例如表单中的其他值,那么您需要编写一个sttored过程来插入到一个表并通过输出子句或使用返回id值scope_identity()然后使用该数据为下一个表构建插入。