我一直在研究不間斷,只能設法找出 - 如何檢查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