如何解决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,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
这就是您知道哪一个指的是哪一个的方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。