我一直在研究不间断,只能设法找出 - 如何检查SQL中的一对多关系。我想知道是否有人可以帮助我找出如何检查SQL代码中的多对多关系。数据库中的表格使用正常的格式。用于检查多对多关系的SQL代码
我的方案是:
- 用户将选择从数据库中的三个表。
- 一旦选定了三个表格,我需要检查这些表格是否具有多对多关系。
- 因此,我需要检查用户选择的三个表是否与主键关联,并且交叉表具有指向另外两个表的两个引用键。
SELECT K_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (SELECT i1.TABLE_NAME,
i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY') PT
ON PT.TABLE_NAME = PK.TABLE_NAME
WHERE PK.TABLE_NAME = '" + ActionM2M.Table2 + "' AND
FK.TABLE_NAME = '" + ActionM2M.ITableNames1 + "' AND
exists (SELECT K_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY') PT
ON PT.TABLE_NAME = PK.TABLE_NAME
WHERE PK.TABLE_NAME = '" + ActionM2M.Table1 + "' AND
FK.TABLE_NAME = '" + ActionM2M.ITableNames1 + "')
你能解释一下你有什么吗?你有没有一张桌子,你正试图分析它,看它是否处于正确的正常形式?或者你有多个表,你试图看看是否有一个关联表(或联结表)与主键包含两个引用其他表?试图找到多对多关系的目的是什么? – 2012-01-10 05:40:39
这个答案应该是有帮助的:http://stackoverflow.com/questions/786918/many-to-many-relationship-use-associative-table-or-delimited-values-in-a-column – 2012-01-10 05:48:50
数据库处于正常的正常形式。我的情况是:用户将从数据库中选择三个表,一旦选择了三个表,我需要检查这些表是否具有多对多关系。所以我需要检查用户选择的这三个表是否与主键关联,并且交叉表具有指向另外两个表的两个引用键。我希望我已经解释得够多了。 – SpaceApple 2012-01-10 05:58:23