2016-09-27 5 views
1

У меня есть таблица в денормализованной форме, как показано ниже:Определение зависимостей Разногласия между colums в таблице

Col1    Col2  Col3   Col4 Col5 
Paris    France Europe   1  4 
Paris    France Europe   2  5 
Paris    France Europe   3  6 
Washington D.C. USA  North America 8  9 
Washington D.C. USA  North America 7  7 
... 
many more rows 
... 

Для того, чтобы нормализовать его мне нужно понять структуру данных.

Предположительно, существует логическая зависимость от Col3 до Col2 и от Col2 до Col1. Париж - столица Франции, а Франция - страна в Европе.

Как я могу доказать это с помощью SQL-запроса? В принципе мне нужно доказать, что существуют такие комбинации, как «Париж - Франция - Европа», «Вашингтон - США - Северная Америка» и т. Д., Но никогда не «Париж - США - Европа» или «Вашингтон - США - Европа» для пример. Собственно, запрос также должен быть прав, если я найду что-то вроде «Берлин - Германия - Африка» в моей БД, пока я не нахожу «Берлин - Германия - Европа».

+0

Можете ли вы обновить свой вопрос, чтобы использовать реальные данные? Пять столбцов, содержащих числа и буквы, немного абстрактны. –

+0

Привет @TimBiegeleisen, я обновил вопрос – Paul

ответ

1

Вы можете использовать агрегирование:

select col3, count(*), count(distinct col2) 
from t 
group by col3; 

Ожидается, что второй столбец будет иметь значение «1». Вы можете получить все примеры с несколькими значениями в col2 с помощью having count(distinct col2) > 1.

Конечно, города имеют одно и то же имя. Париж, например, довольно хорошо известен city in Texas.

+0

Спасибо, похоже, что в вашем ответе есть точка с запятой слишком много. – Paul

+0

@Paul. , , Спасибо. –

2

Вы не можете.

SQL запросы могут disprove зависимости, так как вам нужен только один пример счетчика. Но доказательство наличия зависимостей показывает, что никогда не будет быть сломанным, а текущее содержимое БД представляет только один пример.

Смежные вопросы