Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.027 c
2-1195002111
evn
2007-11-14 04:01
2007.12.09
Как написать программу:Замена символов на другие символы


2-1195298138
datorn
2007-11-17 14:15
2007.12.09
wm_gettext (part2)


4-1179934533
BFG9k
2007-05-23 19:35
2007.12.09
Как определить, активна ли задача ?


2-1195119506
авыф
2007-11-15 12:38
2007.12.09
Как в рантайме у DataSource поменять DataSet


3-1186562935
zmalqop
2007-08-08 12:48
2007.12.09
Связь 2-х таблиц по нескольким полям.