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

Вниз

UpDate. Как изменить одну запись, если их несколько одинаковых?   Найти похожие ветки 

 
DmitrichJ   (2007-08-02 14:18) [0]

Допустим в базе есть несколько абсолютно одинаковых записей в 2-х полях:

  | name  | code |
1. | "Вася" |  0    |
2. | "Вася" |  0    |
3. | "Вася" |  0    |

и мне нужно одной, любой из этих записей изменить значение code.

Или всё же нужно создовать идентифицирующее поле np?


 
Kolan ©   (2007-08-02 14:21) [1]

> Или всё же нужно создовать идентифицирующее поле

Ну а как ты хотел? Ессно создай ID. Ты его в примере даже сделал:
1. | «Вася» |  0    |
2. | «Вася» |  0    |
3. | «Вася» |  0    |


 
DmitrichJ   (2007-08-02 14:28) [2]

Просто думал мало ли есть способ. А то в моей задаче там ID трудновато будет реализовать


 
clickmaker ©   (2007-08-02 14:30) [3]


> моей задаче там ID трудновато будет реализовать

почему?


 
DmitrichJ   (2007-08-02 14:32) [4]

черезчур много таблиц и генераторов. Но, видимо, придётся всё же делать...


 
StriderMan ©   (2007-08-02 14:36) [5]


> и генераторов

а генераторы для чего используются?


 
Sergey13 ©   (2007-08-02 14:40) [6]

> [4] DmitrichJ   (02.08.07 14:32)
> черезчур много таблиц и генераторов

Через чур много - это как? Если лишние поудаляй - ты же хозяин/разработчик.
Судя по "базе есть несколько абсолютно одинаковых записей" надо еще немало поработать над структурой. И

> Или всё же нужно создовать идентифицирующее поле np?

только убеждает в этом.


 
Desdechado ©   (2007-08-02 19:51) [7]

> несколько абсолютно одинаковых записей в 2-х полях:
записи в полях не бывают
бывают наоборот
а нужны ли вообще эти дубли?
что-нибудь кроме этих полей есть в записи, что их может отличать?


 
TMegaMaster(Lamer)   (2007-08-02 19:56) [8]

Совет на будущее - создавай поле ID ВСЕГДА. Даже если кажется что оно вроде и не нужно. Ну и по сбжу - добавь такие поля в таблицах, где их нет, потому как в противном случае ты будешь каждый день подобные вопросы задвать


 
Кщд ©   (2007-08-03 14:48) [9]

>TMegaMaster(Lamer)   (02.08.07 19:56) [8]
мозги не пудрили бы бодаванам юным догмой религиозной))


 
Sergey13 ©   (2007-08-03 15:05) [10]

> [9] Кщд ©   (03.08.07 14:48)

Это не вредная догма.8-)


 
Anatoly Podgoretsky ©   (2007-08-03 15:14) [11]

А база то есть?


 
sdts   (2007-08-03 15:31) [12]


> любой из этих записей изменить значение code

собственно а почему не всем, если не имеет значение какой?
update table set code=1 where name="Вася"
:)


 
TMegaMaster(Lamer)   (2007-08-03 18:08) [13]


> Кщд ©   (03.08.07 14:48) [9]
> >TMegaMaster(Lamer)   (02.08.07 19:56) [8]
> мозги не пудрили бы бодаванам юным догмой религиозной))


Всего лишь хочу помочь обойти грабли на которые сам наступал неоднократно. Извечный спор про естественные ПК против искусственных - мимо.  Углубляться не буду, но выполнение упомянутого принципа нетрудоемко, но позволяет в дальнейшем только радоваться полному контролю над системой.


 
Кщд ©   (2007-08-06 08:57) [14]

>Sergey13 ©   (03.08.07 15:05) [10]
естественные против суррогатных, принципиальная необходимость первичных или наоборот и т.д. - это специфика задачи и богатство опыта))
а "создавай поле ID ВСЕГДА тчк" - это религия, не находите?)


 
Sergey13 ©   (2007-08-06 09:08) [15]

> [14] Кщд ©   (06.08.07 08:57)

Это как чистить зубы - полезная привычка, которая, как минимум, не вредит. 8-)


 
MsGuns ©   (2007-08-06 09:43) [16]

>Кщд ©   (06.08.07 08:57) [14]
>а "создавай поле ID ВСЕГДА тчк" - это религия, не находите?)

Один мой друг, автомобилист, когда едет, всегда поглядывает в зеркало заднего обзора. Даже если шоссе пустынно.
Он религиозный фанат ?


 
Anatoly Podgoretsky ©   (2007-08-06 10:04) [17]

Может и вредить, например излишностью.


 
Кщд ©   (2007-08-06 10:07) [18]

>Sergey13 ©   (06.08.07 09:08) [15]
лично мне ближе позиция монаха уильяма))

>MsGuns ©   (06.08.07 09:43) [16]
перед тем, как перейти дорогу: смотрю налево, смотрю направо
даже если дорога пуста
казалось бы, какое это имеет отношение к проектированию баз данных?))

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


 
Sergey13 ©   (2007-08-06 10:10) [19]

> [17] Anatoly Podgoretsky ©   (06.08.07 10:04)

Излишность в данном конкретном случае, ИМХО, можно обозвать, например, дополнительной степенью защиты от человеческого фактора. 8-)


 
Jeer ©   (2007-08-06 10:34) [20]

Действительно, оставим в стороне вопрос о ПК и ЕК, излишествах..

Но, если в таблице одно поле NAME и нет unique индекса, то отличать одну запись от другой при совпадении значений в NAME можно будет только по физическому номеру записи, что уже полный бред.


 
Anatoly Podgoretsky ©   (2007-08-06 10:42) [21]


> Sergey13 ©   (06.08.07 10:10) [19]

Как раз наоборот, никакой это защиты не дает.
Все должно быть в меру.
Одно не вызывает сомнения, что должен быть первичный ключ. А какой дело или религии или конкретной задачи. У ЕК и ИК ключей есть свои достоинства и недостатки. Я использую оба типа ключей. Там где на задачу нормально накладывается ЕК то используется он.


 
Sergey13 ©   (2007-08-06 10:52) [22]

> [21] Anatoly Podgoretsky ©   (06.08.07 10:42)
> никакой это защиты не дает.

Ну, защитой это конечно можно назвать только со смайликом, но все таки. ИК обычно генерится без участия человека, а ЕК наоборот обычно вводится оператором. Введя корректный, но неправильный ЕК, можно теоретически огрести немного неприятностей.
Я всегда вставляю ИК, даже при наличии стойкого ЕК. При этом ЕК очень удобно юзать для поиска, а ИК для связей.

Я не спорю, что это дело вкуса и иногда напоминает религиозность. Я хотел сказать, что это не приности явного вреда, на мой взгляд. А выгода - хотя бы чувство уверенности в завтрашнем дне. 8-)


 
MsGuns ©   (2007-08-06 12:02) [23]

За редким исключением рекомендую использовать в качестве ПК уникальный идентификатор (автоинремент,генератор, последовательность..) - преимуществ масса: от скорости выборок до мобильности данных в таблицах (независимость ХРАНЕНИЯ данных от их СОДЕРЖАНИЯ)


 
Anatoly Podgoretsky ©   (2007-08-06 12:27) [24]

Sergey13 ©   (06.08.07 10:52) [22]
По приведеному тобой примеру обретешь теже самые проблемы, просто это будет не в первичном ключе, а в поле, к тому же избыточность, второе поле тоже придется делать уникальным и оно по сути будет дублировать ключ, отличаясь только информацией в поле.
А вот что дополнительно неприятного получишь, так это что тебе придется самому поддерживать каскадную целостность при апдейте, либо запросом, либо триггерами, но придется. А в случае выбора в качестве кандидата на первичной ключ, этой работой мог бы заниматься сервер, гарантируя целостность базы. Естественно относится только к тем сервервам, которые поддерживают Cascade Update/

Ну а преимущества ИК указаны в MsGuns ©   (06.08.07 12:02) [23]


 
Jeer ©   (2007-08-06 12:28) [25]


> За редким исключением


У меня даже исключений для применения ЕК не находилось до сих пор.


 
Anatoly Podgoretsky ©   (2007-08-06 12:32) [26]

> Jeer  (06.08.2007 12:28:25)  [25]

По статистике, более 99% ключей искуственные, и где надо и где не надо.


 
Sergey13 ©   (2007-08-06 13:05) [27]

> [24] Anatoly Podgoretsky ©   (06.08.07 12:27)
> А вот что дополнительно неприятного получишь, так это что
> тебе придется самому поддерживать каскадную целостность
> при апдейте

Я ж говорю, что для связей использую только ИК (для них собственно он у меня избыточно и вводится). Так что как раз тут все нормально. Вот если для связей использован ЕК, тогда да, там где каскадного апдейта нет - придется покорпеть в случае замены в ПК.


 
MsGuns ©   (2007-08-06 14:17) [28]

>Jeer ©   (06.08.07 12:28) [25]
>У меня даже исключений для применения ЕК не находилось до сих пор.

"Перекрестные" справочники для поддержки отношений "многие-ко-многим", которые содержат во всех полях ссылки на другие таблицы. Дублирование записей исключено по определению.
Хотя, конечно, можно и туда запихать ИК, но он там будет явно лишний, т.к. поиска по нему не будет


 
TMegaMaster(Lamer)   (2007-08-06 16:16) [29]

Все вы говорите верно, есть еще и фактор удобства для программирования. Когда вы знаете, что в любой таблице ПК - это поле ID, Вам гораздо проще сделать универсальный механизм доступа к данным. Про построение распределенной БД говорить даже не надо - там даже исключение, описанное
> MsGuns ©   (06.08.07 14:17) [28]

работать не будет.


 
Fredy314 ©   (2007-08-07 00:08) [30]

LIMIT 1; попробуй в конце добавить


 
Виталий Панасенко(дом)   (2007-08-07 01:12) [31]


> Fredy314 ©   (07.08.07 00:08) [30]
>
> LIMIT 1; попробуй в конце добавить
>

и при этом установить MySQL?...:-\


 
Игорь Шевченко ©   (2007-08-07 11:32) [32]

Sergey13 ©   (06.08.07 10:52) [22]


> ИК обычно генерится без участия человека, а ЕК наоборот
> обычно вводится оператором. Введя корректный, но неправильный
> ЕК, можно теоретически огрести немного неприятностей.
> Я всегда вставляю ИК, даже при наличии стойкого ЕК. При
> этом ЕК очень удобно юзать для поиска, а ИК для связей.


Ты мазохист

MsGuns ©   (06.08.07 12:02) [23]


> За редким исключением рекомендую использовать в качестве
> ПК уникальный идентификатор (автоинремент,генератор, последовательность.
> .) - преимуществ масса: от скорости выборок до мобильности
> данных в таблицах (независимость ХРАНЕНИЯ данных от их СОДЕРЖАНИЯ)


А вот Joe Celko не рекомендует. Кому из вас верить ?

Насчет скорости выборок - давай не надо. Я тебе могу поведать печальную сагу о разработчике, использующем ID везде, в результате, чтобы получить приемлемую выборку, ему часто приходится соединять 8-10 таблиц в запросе.


 
Игорь Шевченко ©   (2007-08-07 11:35) [33]


> Все вы говорите верно, есть еще и фактор удобства для программирования.


Фактор удобства программирования - это отмазка лентяев.


 
Sergey13 ©   (2007-08-07 11:37) [34]

> [32] Игорь Шевченко ©   (07.08.07 11:32)
> Я тебе могу поведать печальную сагу

У многих тут есть примеры печальных саг.


 
Игорь Шевченко ©   (2007-08-07 11:41) [35]

Sergey13 ©   (07.08.07 11:37) [34]

Всех, кто делает ID при наличествующем неавтоинкрементном уникальном поле, необходимо выводить в чистое поле, ставить лбом к стенке и пускать пулю в лоб тремя очередями.


 
Sergey13 ©   (2007-08-07 11:47) [36]

> [35] Игорь Шевченко ©   (07.08.07 11:41)

Какой ты добрый сегодня. Съел чего?
Сегодня неавтоинкрементное уникальное поле наличествует, завтра не наличествует, послезавтра наличествует неуникальное.

ЗЫ: Вообще надоели уже эти споры ЕК vs ИК.


 
Игорь Шевченко ©   (2007-08-07 11:53) [37]


> Сегодня неавтоинкрементное уникальное поле наличествует,
>  завтра не наличествует, послезавтра наличествует неуникальное.
>


Видишь ли, регулярно встречал объявления

CREATE TABLE foo (
 ID NUMBER PRIMARY KEY,
 NAME VARCHAR2(32) UNIQUE,
....
);

Как ты понимаешь, сегодня-завтра в такой таблице рояли не играет.


 
Sergey13 ©   (2007-08-07 11:56) [38]

> [37] Игорь Шевченко ©   (07.08.07 11:53)
> сегодня-завтра в такой таблице рояли не играет

Почему? Завтра может стать
NAME VARCHAR2(64) UNIQUE
а после завтра просто
NAME VARCHAR2(32)

Какую конкретно из 10 заповедей нарушает ID NUMBER PRIMARY KEY в этой таблице? Кому от этого плохо?


 
Игорь Шевченко ©   (2007-08-07 12:08) [39]

Sergey13 ©   (07.08.07 11:56) [38]


> Какую конкретно из 10 заповедей нарушает ID NUMBER PRIMARY
> KEY в этой таблице?


Седьмую, разумеется :)

Я не понимаю, а нафига это поле ?

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


 
Sergey13 ©   (2007-08-07 12:47) [40]

> [39] Игорь Шевченко ©   (07.08.07 12:08)
> Седьмую, разумеется :)
Седьмая - это искусственный ключ. Пользуйся естественным. 8-)

> Я не понимаю, а нафига это поле ?
Средство от гемороя. Пусть это и кажется тебе навязчивой идеей, граничащей с манией преследования. Ввести одно поле за свое спокойствие - нормальная цена, ИМХО, особенно если нервные клетки не восстанавливаются.

> храни все данные в 4-х таблицах
Ты только эти варианты приемлешь?



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

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

Наверх





Память: 0.56 MB
Время: 0.054 c
15-1194548396
@!!ex
2007-11-08 21:59
2007.12.09
Закон и Linux


5-1163317682
alextorin
2006-11-12 10:48
2007.12.09
Пакет с собственными формами (наследование + IDE)


15-1193856158
Petr V. Abramov
2007-10-31 21:42
2007.12.09
Про википедию


2-1195026948
Sergl
2007-11-14 10:55
2007.12.09
Как заставить клиента ждать ответа с сервера(Сокеты)


15-1194706734
Kick
2007-11-10 17:58
2007.12.09
Невизуальные классы delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский