![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| slang |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 455 Регистрация: 7.3.2004 Репутация: 1 Всего: 0 |
Есть таблица: TB с тремя полями tb_1, tb_2, tb_3. Необходимо сделать такой запрос создания этой таблицы, при котором будет не возможно добавлять новые записи, в которых комбинация tb_2 и tb_3 уже встречались. Например, строка
NULL, 1,1 - добавлена NULL, 1,2 - добавлена NULL, 1,1 - отказ (см. первую строку) -------------------- Запчасти на иномарки www.avtograd55.ru. Если есть время - зайдите и посоветуйте что исправить и что доработать. |
|||
|
||||
| Bikutoru |
|
||||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
или
Во втором варианте поле обязано быть NOT NULL -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
||||
|
|||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
Делаешь SELECT перед вставкой, с GROUP BY tb2 , tb3
|
|||
|
||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
Mal Hack, и это я слышу от тебя??? Никогда бы не поверил... GROUP BY - "тормозная" операция гораздо проще (и быстрее) поставить уникальный индекс / первичный ключ, который и будет обеспечивать требуемую уникальность без всяких дополнительных запросов. При попытке добавления неуникальной по данным полям записей произойдет ошибка, которую можно легко отловить через mysql_error() / mysql_errno() Это сообщение отредактировал(а) Bikutoru - 15.8.2005, 13:07 -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
В данном случае я руководствуюсь тем, что ошибка она и есть ошибка, а следовательно, субъективно это нехорошо и фиг знает как она повлиять могла. И еще я привык на ошибки откладывать только то, что говорит о том, что запрос не был выполнен. |
|||
|
||||
| slang |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 455 Регистрация: 7.3.2004 Репутация: 1 Всего: 0 |
Bikutoru
Ведь в этом случае не возможно будет сделать следующие запросы:
, а должно быть
Суть: в данном контексте field_1 - id строки field_2 - id user field_3 - id группы Пользователь может принадлежать нескольким группам, но не может принадлежать одной группе дважды (в целях экономии места БД, да и просто чистоты). Реализовать это на PHP - можно и не сложно, однако, если операции с базой будет контролировать SQL - это гораздо удобнее, безопаснее и т.д. При относительно "большом" проекте, можно вполне где-то напутать с запросами, как мне кажется. -------------------- Запчасти на иномарки www.avtograd55.ru. Если есть время - зайдите и посоветуйте что исправить и что доработать. |
||||||
|
|||||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
slang, задам вопрос: "А ты проверял?" И сразу отвечу: "Нет". Ибо они нормально работают. А уникальность проверяется не по отдельным столбцам, а по их совокупности. Не веришь - проверь. Mal Hack, по-моему, если есть возможность обеспечить целостность данных средствами СУБД, то лучше сделать это, а не прибегать к собственным ухищрениям, на которые другой программист, который будет работать с тем же проектом, может и наплевать... -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
| slang |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 455 Регистрация: 7.3.2004 Репутация: 1 Всего: 0 |
Bikutoru
Извини, ты прав!!! Сделал вывод используя не практическую проверку, а информацию из литературы и был НЕ прав. Спасибо. -------------------- Запчасти на иномарки www.avtograd55.ru. Если есть время - зайдите и посоветуйте что исправить и что доработать. |
|||
|
||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
slang, пожалуйста, но в следующий раз проверяй прежде чем возражать, если не уверен
-------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
Ошибка не есть целостность данных. |
|||
|
||||
| Bikutoru |
|
||||||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
А когда человек несумевший или незахотевший достаточно разобраться в твоем скрипте "забудет" об ограничении науникальность?.. Что тогда? К тому же ошибка, возникающая при попытке добавления неуникального значения в поле unique, вполне узнаваема ("Duplicate entry '...' for key ...", код 1062). К тому же, основываясь на одной логике, можно прийти к выводу, что попытка добавить неуникальное значение в уникальное поле - это ошибка в работе приложения и она тоже должна быть как-то обработана. Так что этот аргумент
отпадает. Дальше
Это тоже не аргумент, т.к. запрос и не выполняется P.S. Не хотел спорить, а заставляют... Добавлено @ 14:50 К тому же контроль целостности на уровне сервера БД упрощает скрипт и разгружает сервер приложений. (Правда они могут быть и одним сервером, но это же частный случай -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
||||||
|
|||||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
Bikutoru тебе что выгоднее... Если упадет Апач или сервер БД?
|
|||
|
||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
Мне выгоднее, когда ничего не будет падать.
Но если нужно выбирать, то скорее сервер БД, ибо страницы я могу и закешировать ибрать из кеша, когда база лежит. А вот закешировать скрипты и брать их из базы... как-то слабо в это верится... А как это относится в теме дискуссии? P.S. В "Религиозные войнЫ" тему!.. Добавлено @ 15:06 или в "Общие вопросы по БД" -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
Вообще на проектах всегда самое страшное когда БД упадет, т.к. в таком случае могут потеряться данные. А если упадет сервер приложений, то данные не потеряются. исключительные ситуация конечно могут быть, но это уже маловероятно. |
|||
|
||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
Я думал, "упадет" в данном случае означает "временно откажется работать". Можно же хранить информацию сразу на нескольких жестких (вроде бы, RAID-массив называется) тогда вероятность отказа из за неисправности HDD невелика, UPS и т.п. сводят такую вероятность к достаточно небольшому значению. Плюс регулярное копирование информации... К тому же, при перегрузке СУБД (тот же MySQL) просто перестает обрабатывать вновь поступающие запросы... Все-таки, по-моему, обеспечивать целостность скриптом, если можно базой не нужно... -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |