我正在使用SQL Server Management Studio刷新我的T-SQL,并且有一个我无法找到答案的问题。我正在使用AdventureWorks2017
数据库并且这个INNER JOIN
语句完美地运行:
SELECT
FirstName, LastName, AddressLine1 Address, City,
StateProvinceCode, State, CountryRegionCode
FROM
Person.Person p
INNER JOIN
Person.BusinessEntityAddress a ON p.BusinessEntityID = a.BusinessEntityID
INNER JOIN
Person.Address ON Address.AddressID a = a.AddressID
INNER JOIN
Person.StateProvince s ON s.StateProvinceID = a.StateProvinceID
WHERE
CountryRegionCode = 'US'
但是这里的交易是:p.BusinessEntityID
和a.BusinessEntityID
与外键无关,即使两个BusinessEntityID
列都相同,但两者都不是另一个的外键。这两个表之间有一个名为BusinessEntity
的联结表。
显然,这里有一些我不明白的东西。可能有一个我不知道的简单解释。如果有人可以启发我,我将不胜感激。
外键的目的是强制数据的引用完整性。如果父表中不存在指定的键,则强制您不能在子表中输入行。
在这种情况下,Person和BusinessEntityAddress表之间没有完整性,因此没有提供外键。完整性在BusinessEntity和BusinessEntityAddress之间 - 即如果BusinessEntity不存在,您就不能拥有BusinessEntityAddress。