SQL信息模式-读取COMPOSITE外键

| 我正在开发一个通用应用程序,该应用程序使用一组预先选择的数据库表(及其关系)来生成用于管理这些表中数据的用户界面。基本上,我只是从信息架构中查找内容,获取所有主键和外键,并基于此生成输入字段和指向其他对话框的链接。因为它应该是通用的解决方案,所以它应该与彼此之间具有有意义关系的任何表集一起使用。 我遇到的一件事是外键,特别是-在一个约束下的COMPOSITE外键。例如,如果我有下表: 公司
CompanyID, CompanyName, CompanyID
--companyID is the primary key which identifies the company. 
DivisionID, CompanyID, DivisionName, DivisionID+CompanyID
--DivisionID+CompanyID is a composite primary key for a division, because it\'s a one-to-many relationship and division is DEPENDENT on Company. 
球队
TeamID, DivisionID, CompanyID, TeamName, TeamID+DivisionID+CompanyID
--same as above - a Team is dependent on Division, which has a composite primary key.
现在,按照所有定义,此数据库模型是一个有效的模型(SQL Server允许使用)-但我遇到了一个问题。 例如,在信息模式中,DivisionID和CompanyID都被“分配”到相同的CONSTRAINT。因此,当我加入正确的表时,我遇到了问题。无法知道一个表中的哪一列是另一表中的哪一列。在上面的示例中,列名相同(CompanyID是与公司ID相关的每一列的名称-在COMPANY表或TEAM表中,等等),但是,没有规定列名称必须相同的规则,因此我对如何真正使程序知道哪一列不知所措。
TABLE1    COLUMN1        CONSTRAINT         TABLE2     COLUMN2
TEAM      CompID      TEAM_HAS_DIVISION    DIVISION   CompanyID
TEAM      DivID       TEAM_HAS_DIVISION    DIVISION   DivisionID
计算机是否有办法知道表TEAM中的CompID引用了CompanyID,而不是DIVISION表中的DivisionID? 我从INFORMATION_SCHEMA视图中的数据中找不到任何方法来执行此操作。 是的,人们可以很容易地弄清楚CompID = CompanyID,等等...但是正如我之前提到的那样-我正在尝试提出一种通用解决方案,该解决方案不需要人们去研究并做出决定和犯错:=)     
已邀请:
您必须按列顺序将它们匹配。 REFERENTIAL_CONSTRAINTS告诉您TEAM_HAS_DIVISION约束具有PK_Division作为主键 KEY_COLUMN_USAGE告诉您TEAM_HAS_DIVISION具有按顺序排列的DivID和CompID,由ORDINAL_POSITION列指定 KEY_COLUMN_USAGE还会告诉您PK_Division按ORDINAL_POSITION列指定的顺序具有DivisionID和CompanyID 这就是您知道哪一个指的是哪一个的方式。     

要回复问题请先登录注册