2010-02-17 3 views
0

Je tente de désosser une base de données dans Oracle. J'ai été capable de trouver les clés principales et les règles d'intégrité référentielle qui correspondent aux clés étrangères mais ne peuvent pas localiser où les règles de modalité/cardinalité sont stockées.Comment vérifier la modalité/cardinalité d'une relation dans Oracle

Toute aide concernant la table à regarder ou un exemple de requête serait grandement appréciée.

Répondre

1

Je pense que vous devrez vérifier les colonnes faisant référence étant nullable:

SELECT column_name, nullable 
FROM user_tab_cols 
WHERE table_name = '<TABLE_NAME>' 

et indices uniques sur des colonnes référence:

SELECT idx.index_name, col.column_name 
FROM user_indexes idx 
JOIN user_ind_columns col ON (col.index_name = idx.index_name) 
WHERE idx.uniqueness = 'UNIQUE' 
    AND idx.table_name = '<TABLE_NAME>' 
2

Que voulez-vous dire par des règles modalité/cardinalité?

Les relations FK sont toujours 1: N en ce qui concerne Oracle. Je suppose que l'on pourrait imposer un ratio de 1: 1 en ayant deux relations FK sur les mêmes champs mais dans des directions opposées. La seule autre 'règle' concernant la cardinalité sont les clés uniques, mais je pense que vous les avez déjà. Dans le cas contraire, cela pourrait aider:

http://www.eveandersson.com/writing/data-model-reverse-engineering#constraints

En fonction de la configuration de la base de données que vous pourriez aussi trouver heuristiques sur le cardinalité des valeurs dans les colonnes:

select * from user_tab_col_statistics 

Surtout la valeur « NUM_DISTINCT 'pourrait avoir une certaine valeur.

Si vous cherchez plus d'informations dans le dictionnaire de données, je recommande cette sélection pour commencer

select * from dict 
where lower(comments|| '@' || table_name) like '%whatareyoulookingfor%' 
Questions connexes