我在SQL Server 2008数据库中有一个数据库。我的数据库模型形成一个带有四个表的菱形图案。这四个表定义如下:
Table1
- ID
- Name
- AddedBy
Table2
- ID
- Table1ID
- Name
- Type
Table3
- ID
- Table1ID
- Name
Table4
- ID
- Table2ID
- Table3ID
- Age
我目前通过使用AddedBy字段获取特定用户的所有Table1记录。此查询如下所示:
SELECT
*
FROM
[Table1] t1
WHERE
t1.[AddedBy]=@someuser
现在,我需要从第一个与Table1相关联的Table4记录中获取Age值。我该怎么做呢?我一直对这个问题感到困惑。
感谢您提供任何帮助!
答案 0 :(得分:2)
答案 1 :(得分:2)
这是复合主键如何让您更准确地表达您希望数据库执行操作的经典说明。
鉴于您拥有的模型,Table2
和Table3
似乎由Table1
直接定义;也就是说,没有父Table2
条记录的Table1
记录没有意义。同样,当{em> Table4
和Table2
存在时,Table3
似乎才有意义。如果是这样,那么Table2
,Table3
和Table4
应该在这些行中包含复合主键:
Table2
-------------
Table1ID -- consider renaming this in Table1 so that the same name is used
throughout
RecordNumber -- unique within a given Table1ID; this is only needed if one of
your other two columns cannot serve as a unique value within
Table1ID, which I'm guessing one of them can
然后你会为Table3
做类似的事情。然后,对于Table4
,您将拥有:
Table4
-------------
Table1ID
Table2RecordNumber
Table3RecordNumber
作为主键,然后设置两个外键,一个到Table2
上(Table1ID, Table2RecordNumber
),一个到Table3
上(Table1ID, Table3RecordNumber
)。这样,您就可以确保Table4
条记录始终链接到Table2
和Table3
个Table1ID
的记录,并简化原始查询中的联接,以便它不会不必通过Table2
或Table3
查找Table4
中的有效记录。