Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Вниз

Модификация через сетку табл. без ключей   Найти похожие ветки 

 
Juice ©   (2005-09-21 17:07) [0]

Не приходит в голову никаких решений: как модифицировать записи в таблице, в которой нет ни одного ключа ? Все ее поля можно изменять как угодно. Что ж получается, в where ничего не напишешь! Может вы что-то подскажите?
p.s. Таблицы такие не я проектировал :)


 
}{ander ©   (2005-09-21 17:08) [1]

А слабо суррогатный первичный ключ сделать?


 
Sergey13 ©   (2005-09-21 17:11) [2]

Интересно назначение такой таблицы.


 
msguns ©   (2005-09-21 17:12) [3]

Гиблое дело искать черную кошку в темной комнате.
Таблица без ключей как улица без названия.


 
Digitman ©   (2005-09-21 17:14) [4]

что-то ты какую-то околесицу несешь ..

что значит "как модифицировать записи" ? да обычно же ! UPDATE ..
причем здесь WHERE ? как писал ты этот clause, так и пиши его ! Ничего не изменилось ..

Другой вопрос, КАК предусмотреть подбор и последующую модификацию именно НУЖНЫХ записей, в пределах более чем одной из состава одинаковых по содержимому интересующих полей ... ты ЭТОТ вопрос хотел задать или где ?)


 
ANB ©   (2005-09-21 17:16) [5]

На чем таблица ?


 
Reindeer Moss Eater ©   (2005-09-21 17:20) [6]

UpdateMode := upWhereAll


 
ANB ©   (2005-09-21 17:22) [7]


> Reindeer Moss Eater ©   (21.09.05 17:20) [6]
- даже в этом режиме можно нарваться на грабли, если есть дубли строк.


 
Juice ©   (2005-09-21 17:25) [8]

> что значит "как модифицировать записи" ? да обычно же !
> UPDATE ..
> причем здесь WHERE ? как писал ты этот clause, так и пиши
> его ! Ничего не изменилось ..

Пример: таблица table, пусть всего из двух полей, пофиг каких, field1 и field2, юзер может в сетке редактировать оба поля. Приведите плз. пример ModifySQL.

> А слабо суррогатный первичный ключ сделать?


Я с аналогичным успехом могу и обычный первичный ключ сделать, что скорее всего и произойдет. Вопрос не по необходимости а чисто из интереса.
> На чем таблица ?

Firebird


 
Feos   (2005-09-21 17:25) [9]

Я бы написал запрос, а проблема с дублями неразрешима


 
Reindeer Moss Eater ©   (2005-09-21 17:29) [10]

- даже в этом режиме можно нарваться на грабли, если есть дубли строк.

Никаких граблей.
Все заапдейтится в полном соответствии с where.


 
Desdechado ©   (2005-09-21 19:04) [11]

> Пример: таблица table, пусть всего из двух полей, пофиг каких, field1 и field2, юзер может в сетке редактировать оба поля.
> Приведите плз. пример ModifySQL.
По старым значениям этих полей строим WHERE в команде UPDATE


 
AlexWlad ©   (2005-09-21 21:03) [12]

1. проектировщику - по шапке (если возможно)
2. добавь свое поле и забей в него значения, потом сделай автоинкремент...


 
sniknik ©   (2005-09-22 01:58) [13]

> Пример: таблица table, пусть всего из двух полей, пофиг каких, field1 и field2, юзер может в сетке редактировать оба поля.

пример к примеру :)
делаем подобную таблицу из 2х полей
CREATE TABLE Table1 (Field1 Int, Field2 Int)
заполняем однородными данными несколько записей (чтобы невозможно было идентифицировать запись по значению полей...)
INSERT INTO TABLE1 (FIELD1,FIELD2) VALUES (1,1)
выполнить запрос пару раз хотябы (чтобы 2 записи одинаковых минимум было).
теперь подключаем таблицу к "сетке" и редактируем в ней одно поле (Field1 первой записи меняем на 2, к примеру), при вызове Post (записи в базу) в этом случае что по твоему произойдет (должно)? смена значения одного поля? (как будто бы логичное)

нет, произойдет ошибка "обновление влияет на слишком большое количество записей" и смена значений всех записей в столбце Field1. вернее в зависимости от компонент доступа ошибку будет не у всех, но записи поменяют все. потому как они общаются с SQL серверами посредством запросов (даже TxxxTable...) а запрос (условие) на одну запись, меняли значение то только в одной, не по чему строить, значения всех одинаковы...

вообщето для  файребирда (и еще некоторых серверов) можно запрос на обновление одной записи и в этом случае построить, там есть чтото вроде "номера записи" (rdb$db_key, в других другие), но стандартные  компоненты врядли его используют, а используют то им же и хуже, нет гарантий что в процессе работы его значение в базе не изменится.... (потом начнется песня про "станные" ошибки сервера ...;) "всегда работает, а в пятницу тринадцатого валится. чудо!!!" (а то админ базы "сборку мусора" "запускает" в любимый день ;), или что другое вроде бы независящее)


 
}{ander ©   (2005-09-22 10:41) [14]

Я вот немного подумал и пришел к следующим мыслям:

1. В соответствии с реляционной моделью все кортежи в переменной-отношении (т.е. все записи в таблице) должны быть уникальными. Т.е. наличие таблицы с одинаковыми строками противоречит реляционной модели. Если проанализировать это с точки зрения здравого смысла, то столкнемся с вопросом: а зачем, собственно, в таблице 123274 совершенно одинаковые строки? Прихоит только один ответ:

2. Сбор информации, которая накапливается со временем. В этом случае, глядя на структуру таблицы, можно придумать только один вид запроса к такой таблице, который будет иметь смысл (с некоторыми вариациями):

select field1, field2, count(*)
from table
group by 1,2


т.е. мы определяем количество кортежей определенного вида. Но в этом случае лучше ввести в таблицу еще одно поле field3, создать первичный ключ по полям field1, field2 (во-первых, чтобы исключить повторение записей, во-вторых для однозначной идентификации записи) и хранить в поле field3 количество записей такого вида.

3. Последнее: наличие проблем обновления - признак того, что нужно заняться нормализацией.


 
Juice ©   (2005-09-22 11:17) [15]

PK я подабавлял около 17:15 :) Интересовало что-то наподобие :

> вообщето для  файребирда (и еще некоторых серверов) можно
> запрос на обновление одной записи и в этом случае построить,
>  там есть чтото вроде "номера записи" (rdb$db_key, в других
> другие), но стандартные  компоненты врядли его используют,
>  а используют то им же и хуже, нет гарантий что в процессе
> работы его значение в базе не изменится.... (потом начнется
> песня про "станные" ошибки сервера ...;) "всегда работает,
>  а в пятницу тринадцатого валится. чудо!!!" (а то админ
> базы "сборку мусора" "запускает" в любимый день ;), или
> что другое вроде бы независящее)


 
evvcom ©   (2005-09-22 13:56) [16]


> Интересовало что-то наподобие

че за база-то? Или я это где-то пропустил?


 
atruhin ©   (2005-09-22 18:55) [17]

>> Интересовало что-то наподобие :
А что в данном совете то не устраивает?
rdb$db_key - уникальный номер записи, генерируемый сервером.


 
Juice ©   (2005-09-22 19:33) [18]


> А что в данном совете то не устраивает?
> rdb$db_key - уникальный номер записи, генерируемый сервером.
>

Совет заключается в том, чтобы не использовать этот совет, однако этот совет и есть ответ на мой вопрос.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.038 c
9-1118639956
Xenon
2005-06-13 09:19
2005.11.06
Проблемы с FPS


14-1129522649
Rentgen
2005-10-17 08:17
2005.11.06
Компонент ввиде терминального окошка


6-1122368604
shade_
2005-07-26 13:03
2005.11.06
"новое удалённое подключение к сети"(RAS) программно...?


1-1129207393
Квэнди
2005-10-13 16:43
2005.11.06
Цвета в StringGrid


2-1128867307
quadronik
2005-10-09 18:15
2005.11.06
Сортировка записей через SQL-запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский