Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как вы хорошо знаете SQL / 25 сообщений из 31, страница 1 из 2
22.04.2010, 18:37
    #36593156
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
Добрый день.
Я новенькая на сайте, и только учусь, но буду очень признательна, если мне кто-то поможет?


Вопросики.

1 Что с этой табличкой не так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
[color=orange]
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 55 
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 07  AM	 4 / 13 / 2007 	 55 
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 08  AM	 4 / 13 / 2007 	 55 [/color]
 22224 	EEEE	 4 	K	 5 / 13 / 10   8 : 06  AM	 4 / 15 / 2007 	 60 
 22224 	AD	 2 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 80 
 22224 	AD	 1 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 66 


Я так понимаю она избыточная?
То есть из этой таблички можно было бы сделать несколько табличек?

2.Оранжевым виделены 3 дублирующие строчки.
Какой нужно выполнить запрос, чтобы найти дублирующие записи?

3.МОжет ли в подобной табличке быть композитный ключ?Какие бы колонки вы бы выбрали за для композитного ключа?

4.Какой нужно сделать запрос , чтобы последнюю строчку и удалить дублирующие записи?


Буду очень признательна )))
...
Рейтинг: 0 / 0
22.04.2010, 19:51
    #36593329
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lillyДобрый день.
Я новенькая на сайте, и только учусь, но буду очень признательна, если мне кто-то поможет?


Вопросики.

1 Что с этой табличкой не так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 55 
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 07  AM	 4 / 13 / 2007 	 55 
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 08  AM	 4 / 13 / 2007 	 55 
 22224 	EEEE	 4 	K	 5 / 13 / 10   8 : 06  AM	 4 / 15 / 2007 	 60 
 22224 	AD	 2 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 80 
 22224 	AD	 1 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 66 

Я так понимаю она избыточная?
То есть из этой таблички можно было бы сделать несколько табличек?

2.Оранжевым виделены 3 дублирующие строчки.
Какой нужно выполнить запрос, чтобы найти дублирующие записи?

3.МОжет ли в подобной табличке быть композитный ключ?Какие бы колонки вы бы выбрали за для композитного ключа?

4.Какой нужно сделать запрос , чтобы последнюю строчку и удалить дублирующие записи?

Буду очень признательна )))

1. Нужно знать что описывают данные, хранящиеся в таблице.
То есть какие атрибуты что означают.

2. Почему это они "дублирующие"? У них же время разное.

3. Может. Но см. ответ по п.1

4. Это вопрос по конкретному диалекту SQL - нужно знать на какой СУБД вы собираетесь работать.
...
Рейтинг: 0 / 0
22.04.2010, 19:57
    #36593343
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
SQL*Plus,

автор1. Нужно знать что описывают данные, хранящиеся в таблице.
То есть какие атрибуты что означают.

Может быть названия полей намекнут на тип данных?

авторID, NAMELEVEL,DATEBEGIN,COUNTSS,SALARY,TRUEFALSE,DATAINSERT

автор3. Может. Но см. ответ по п.1

а можно привести пример?

Код: plaintext
Это вопрос по конкретному диалекту SQL - нужно знать на какой СУБД вы собираетесь работать.

можно ли пример на Oracle / MSSQL?
...
Рейтинг: 0 / 0
22.04.2010, 19:59
    #36593352
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lilly,

название полей я привела для этого результата

автор
1000874 EEER 4/13/2010 100 452.32 B 4/13/10 5:06 AM
1000874 EEER 4/13/2010 100 452.32 B 4/13/10 5:07 AM
1000874 EEER 4/15/2010 60 452.32 S 4/13/10 8:06 AM
1000874 EEER 4/13/2010 100 452.32 B 4/13/10 5:08 AM
1000874 EES 4/13/2010 80 125.4 B 4/13/10 5:06 AM
1000874 EES 4/13/2010 450 126.8 B 4/13/10 5:06 AM
...
Рейтинг: 0 / 0
22.04.2010, 20:15
    #36593378
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
автор
ID NAMELEVEL SALARY TRUEFALSE DATEINSERT DATEBEGIN COUNTSS
224 EEEE 4 A 5/13/10 5:06 AM 4/13/2007 55
22224 EEEE 4 A 5/13/10 5:07 AM 4/13/2007 55
22224 EEEE 4 A 5/13/10 5:08 AM 4/13/2007 55
22224 EEEE 4 K 5/13/10 8:06 AM 4/15/2007 60
22224 AD 2 A 5/13/10 5:06 AM 4/13/2007 80
22224 AD 1 A 5/13/10 5:06 AM 4/13/2007 66
...
Рейтинг: 0 / 0
22.04.2010, 22:23
    #36593525
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lillyДобрый день.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
[color=orange]
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 55 
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 07  AM	 4 / 13 / 2007 	 55 
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 08  AM	 4 / 13 / 2007 	 55 [/color]
 22224 	EEEE	 4 	K	 5 / 13 / 10   8 : 06  AM	 4 / 15 / 2007 	 60 
 22224 	AD	 2 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 80 
 22224 	AD	 1 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 66 


Я так понимаю она избыточная?


Для избыточности должны быть как минимум две ф-ии зависимомсти:
транзитиваня зависимость.
Какие видны:
третья колонка ф-но не зависит от второй из-за последних двух записей. Будь там две 2-ки или 1-ци, можно было бы надеяться.
четвертая не зависит от второй из-за значения К. По этой же причине и четвертая не завистит от третьей.
Остальные тоже не зависят от второй. От третьей и четвертой тем более.

Есть завимости всех колонок от первой, и есть зависимость второй, третьей и четвертой от последней. И есть зависимость второй от третьей
Поскоку перая не завист от последней и от третьей, то возможны две транзитивные зависмости.
Т.е. в данном состоянии таблы они есть, но нуно быть уверенным, что и в будующем останутся.
Последняя, это какой-то Count.
Т.е. скорей всего эта зависимость нарушится.
Достотачно, например, чтобы появилась, запись в которой вторая AD, а посленей 55.
Остается второй от третьей.
Однако, как Вам сказали нуно знать про зависмости между данными в реале, чтобы быть уверенными, что зависимости сохраняться во всех состояниях таблы в будующем.
Т.е. если счас разбить на две таблы, а потом зависимость нарушится, то таблы будут не адекватны реалу: в них незя буит занести инфу, которая нарушает зависимость.
Чтобы нарушилась зависимость второй от третьей досстаточно появиться записи, хде
в третье 4 а во второй AD.
Ну так примерно, если нигде ниче не упустил.
...
Рейтинг: 0 / 0
22.04.2010, 23:00
    #36593553
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
Я все же не могу найти ответы на эти вопросы... ((

2.Оранжевым виделены 3 дублирующие строчки.(Может здесь есть подковырка?)
Какой нужно выполнить запрос, чтобы найти дублирующие записи?

3.МОжет ли в подобной табличке быть композитный ключ?Какие бы колонки вы бы выбрали за для композитного ключа?

4.Какой нужно сделать запрос , чтобы последнюю строчку и удалить дублирующие записи?
...
Рейтинг: 0 / 0
23.04.2010, 01:11
    #36593683
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lillyДобрый день.
Я новенькая на сайте, и только учусь, но буду очень признательна, если мне кто-то поможет?


Вопросики.

1 Что с этой табличкой не так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
[color=orange]
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 55 
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 07  AM	 4 / 13 / 2007 	 55 
 22224 	EEEE	 4 	A	 5 / 13 / 10   5 : 08  AM	 4 / 13 / 2007 	 55 [/color]
 22224 	EEEE	 4 	K	 5 / 13 / 10   8 : 06  AM	 4 / 15 / 2007 	 60 
 22224 	AD	 2 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 80 
 22224 	AD	 1 	A	 5 / 13 / 10   5 : 06  AM	 4 / 13 / 2007 	 66 


Я так понимаю она избыточная?
То есть из этой таблички можно было бы сделать несколько табличек?

2.Оранжевым виделены 3 дублирующие строчки.
Какой нужно выполнить запрос, чтобы найти дублирующие записи?

3.МОжет ли в подобной табличке быть композитный ключ?Какие бы колонки вы бы выбрали за для композитного ключа?

4.Какой нужно сделать запрос , чтобы последнюю строчку и удалить дублирующие записи?


Буду очень признательна )))
Так все-таки , что не так с табличкой? мне кажеться, что это таблица-фактов в Датаварехаусе..
...
Рейтинг: 0 / 0
23.04.2010, 11:51
    #36594274
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lilly пишет:

> 1 Что с этой табличкой не так?
>
>
> *22224* EEEE *4* A *5*/*13*/*10* *5*:*06* AM *4*/*13*/*2007* *55*
> *22224* EEEE *4* A *5*/*13*/*10* *5*:*07* AM *4*/*13*/*2007* *55*
> *22224* EEEE *4* A *5*/*13*/*10* *5*:*08* AM *4*/*13*/*2007* *55*
> *22224* EEEE *4* K *5*/*13*/*10* *8*:*06* AM *4*/*15*/*2007* *60*
> *22224* AD *2* A *5*/*13*/*10* *5*:*06* AM *4*/*13*/*2007* *80*
> *22224* AD *1* A *5*/*13*/*10* *5*:*06* AM *4*/*13*/*2007* *66*
>
>
> Я так понимаю она избыточная?

Конечно, избыточная. Вот зачем в первой колонке например столько двоек ?
Хватит одной. Или пишите тогда

22...4

> 2.Оранжевым виделены 3 дублирующие строчки.
> Какой нужно выполнить запрос, чтобы найти дублирующие записи?

SELECT DUPLICATED * from MyTable

> 3.МОжет ли в подобной табличке быть композитный ключ?Какие бы колонки вы
> бы выбрали за для композитного ключа?

Я бы выбрал колонку, где записано значение "AM".

> 4.Какой нужно сделать запрос , чтобы последнюю строчку и удалить
> дублирующие записи?

Не понял, что последнюю строчку ?

А так
DELETE ALL DUPLICATING ROWS from MyTable
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.04.2010, 11:54
    #36594288
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
vadiminfo пишет:

> Для избыточности должны быть как минимум две ф-ии зависимомсти:
> транзитиваня зависимость.
> Какие видны:
> третья колонка ф-но не зависит от второй из-за последних двух записей.


Коллега, ну что вы вводите девушку в заблуждение ...

Я вот вижу чёткую функциональную зависимость третьей колонки от второй.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.04.2010, 12:11
    #36594349
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
MasterZiv,


Немного уточню насчет вопроса 4:
нужно сделать запрос , чтобы оставить самую свежую (последнюю внесенную запись) строчку и удалить дублирующие ее (более старые) записи?

Очень вам спасибки большое :)
...
Рейтинг: 0 / 0
23.04.2010, 12:30
    #36594409
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
MasterZiv
little_lilly пишет:

SELECT DUPLICATED * from MyTable

DELETE ALL DUPLICATING ROWS from MyTable


у меня MSSQL 2000 - не понимает он слов DUPLICATED,DUPLICATING

Server: Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'from'.

Server: Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'ALL'.
...
Рейтинг: 0 / 0
23.04.2010, 12:53
    #36594488
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lilly,

Естественно не понимает, т.к. это не T-SQL.
Впрочем вы же сами писали, что работаете с SQL*Plus?


фотка в профиле повысит ваши шансы получить быстрый ответ ))
...
Рейтинг: 0 / 0
23.04.2010, 13:10
    #36594542
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lilly пишет:

> у меня MSSQL 2000 - не понимает он слов DUPLICATED,DUPLICATING

Да что ты говоришь ?
Дело в том, что эту строчку надо отдать программисту, который возмёт структуру
даных, спецификацию на систему, и напишет запрос на языке SQL, который сделает
то, что нужно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.04.2010, 13:11
    #36594547
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lilly пишет:
> Очень вам спасибки большое :)

Не благодари меня ...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.04.2010, 13:11
    #36594549
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
Критикlittle_lilly,

Естественно не понимает, т.к. это не T-SQL.
Впрочем вы же сами писали, что работаете с SQL*Plus?


фотка в профиле повысит ваши шансы получить быстрый ответ ))

ну сорри, что не указала...mssql 2000
...
Рейтинг: 0 / 0
23.04.2010, 13:23
    #36594599
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
Ранние дубликаты можно найти например так:
Код: plaintext
1.
2.
select 
from таблица
where exists (выбрать по (условно)"ключу" те записи, где дата меньше даты записи из основного запроса)

на T-SQL переведите сами, все же учиться надо самой
)
...
Рейтинг: 0 / 0
23.04.2010, 18:34
    #36595637
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
MasterZiv
vadiminfo пишет:

Я вот вижу чёткую функциональную зависимость третьей колонки от второй.

В предпоследней записи значение второй колнки AD а третьей 2
а впоследне записи соотвественно AD и 1.
Это нарушает зависмость третьей колонки от второй. Имея во второй значение AD незя сказать что в третьей 1 или 2.
Потому зависмости нет все же.
Вот вторая от третьей в приведенном состоянии дает надежду на ФЗ.
...
Рейтинг: 0 / 0
23.04.2010, 20:40
    #36595783
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
Критик,

Where здесь не самое лучшее решение.
Решение должно быть универсальным.

5/13/10 5:06
5/13/10 5:07
5/13/10 5:08

Эти поля повторяются

select * from #t
where Insert_Tms>='4/13/10 5:08 AM'

удалит и это поле

5/13/10 8:06 AM

Between и т.д. (жестко прописывать условие по значением) здесь не самый лучший вариант.
Можно ли как-то выбрать оранжевые поля по одинаковому признаку (может быть selfjoin?) и потом применить where по времени?
...
Рейтинг: 0 / 0
24.04.2010, 01:57
    #36596010
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
Вот в чем ошибся я так в том, что от первого все зависит, потому что отложилось, что это ID. Но от него ничего не зависит: значение то у него одно и то же. Рефлеск Павлова на ID выработался. Он, наоборот, зависит от любой колонки, в данном состоянии таблы. Либо по ошибке он одинаковый. А на самом деле как и положено ID, должен быть уникальным. Потому если вторая зависит от третьей, то первая транзативно зависит от третьей. (Однако, по прежнему третья не зависит от второй, как думает MasterZiv).


Если что-то не должно повторяться, но повторяется по ошибке, то это, скорее, луче считать не избыточностью, а нарушением логических правил (нарушением целостности данных), которым должны соответсвовать данные. Потому шо это хуже избыточности: последняя тока создает проблемы контроля избыточности и риски потери информации, а первая уже искажение информации: объект один, но воспринимается как несколько разных. Это решается с помощью навязывания ОЦ отношения: ключей, обеспечивающих уникальность.
...
Рейтинг: 0 / 0
24.04.2010, 12:40
    #36596126
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
vadiminfoВот в чем ошибся я так в том, что от первого все зависит, потому что отложилось, что это ID. Но от него ничего не зависит: значение то у него одно и то же. Рефлеск Павлова на ID выработался. Он, наоборот, зависит от любой колонки, в данном состоянии таблы. Либо по ошибке он одинаковый. А на самом деле как и положено ID, должен быть уникальным. Потому если вторая зависит от третьей, то первая транзативно зависит от третьей. (Однако, по прежнему третья не зависит от второй, как думает MasterZiv).


Если что-то не должно повторяться, но повторяется по ошибке, то это, скорее, луче считать не избыточностью, а нарушением логических правил (нарушением целостности данных), которым должны соответсвовать данные. Потому шо это хуже избыточности: последняя тока создает проблемы контроля избыточности и риски потери информации, а первая уже искажение информации: объект один, но воспринимается как несколько разных. Это решается с помощью навязывания ОЦ отношения: ключей, обеспечивающих уникальность.

Спасибо, немного приоткрыли глаза. Я думала еще насчет таблицы фактов в DWH, ей такой набор данных свойственен?
...
Рейтинг: 0 / 0
24.04.2010, 14:55
    #36596223
little_lilly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
А какая нормальная форма соответствует этой табличке?
...
Рейтинг: 0 / 0
24.04.2010, 22:17
    #36596504
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lilly,

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

ЗЫ. MasterZiv, выдыхай ))
...
Рейтинг: 0 / 0
24.04.2010, 22:40
    #36596524
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
little_lillyА какая нормальная форма соответствует этой табличке?

Чтобы реално говорить об этом нужно знать предметную область, выявить функциональные зависимости (ФЗ). По текущему состоянию данных БД в табличке, если данные адекватны предметной области, можно тока сказать каких ФЗ уже точно нет. Поскоку те ФЗ что есть в данном состоянии БД могут нарушиться при добавлении новых данных.

Но на скока я понял, возможно, данные не правильные: нарушена целостность данных. Вы там собрались шо-то удалять.
Если данные не адекватны, то речь идет о рассуждениях в условиях неопределенности.

Вообще то, Вы пытаетесь решить обратную задачу (ОЗ): идете не от предметной области (ПО) к табличкам, а наоборот. А ОЗ обычно не корректно поставлены. Если данные в табличке не адекватно отображают предметную область, нарушены ОЦ, которые там должны быть, то даже об отсувующих ФЗ судить сложно.

Если данные меняться не будут, и они правильные, то чисто только по этим данным (без знания про их смысл, ПО) моно сказать в какой форме.
Но поскоку их мало и меняться не будут, то практический эффект от нормализации, скорее всего слишком мал, чтобы на это тратить усилия.

Если данные меняться будут и счас они правильные, то ранее я написал каких ФЗ точно нет, а какие могут быть. Но при добалении данных они могут пропасть. Т.е. есть неопределенность.
Просто незя еще тока по этим данным сказать, что она находится в 3 или даже Бойса Кодда. На 4 и 5 анализировать ломно, но ить обчно далее 3 не идут в силу нескольких причин (возможной неполноты, сложности)
Оптимизация выше третье может содержать неопределенность, либо процесс оптимизации завышенную сложность.

Если данные не правильны, то их луче сначала исправить.

Но лучшее из лучшего пойти от ПО к табличкам. А потом уже смотреть на адеватность, оптимальность.
...
Рейтинг: 0 / 0
24.04.2010, 23:39
    #36596560
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы хорошо знаете SQL
tanglirЗЫ. MasterZiv, выдыхай ))
на самом деле, наиболее правильно ответил.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как вы хорошо знаете SQL / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]