|
|
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
softwarer Даже. Потому что альтернатива - добавляя необходимое поле в подзапрос, не забыть отмотать текст на пару страниц вниз и посмотреть, не участвует ли этот запрос в natural join, после чего отмотать на страницу вверх и посмотреть, нет ли случайно одноименного поля в другом подзапросе. И это необходимо делать каждый раз из-за того, что его автор поленился один раз набрать несколько дополнительных символов. Ну а тем временем другой программист, решив, что во втором подзапросе использован не очень удачный алиас, переименовывает его и таки ломает natural join. Какой-то сложный процесс программирования. Непонятно када и что они там делают с этим запросом. Была речь про изменения, которые повлияют на NATURAL JOIN, но не повлияли бы на запятые. Вот присмеры проясните траблу, про которую говорите Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. Естественное соединение - классика. А второй что? - Декартово соединение с выборкой из него? Да и то что это соединение даже декартово не написано явно. Просто список таблов. Ну не знаю даже - как-то из Обнинска через Калугу в Москву. Теперь грите про подвохи. Мож я не заметил? softwarer Да бросьте. Добавление нового поля в таблицу или в запрос - если и не самая частая операция мелкой доработки, то точно одна из таковых. Я имел в виду, что это добавление влияет или нет одинаково на оба синтаксиса. Вот пример написан в предыдущем абзаце. Добавьте поля в таблы. Какая разница? А если ID переименуете, то оба запроса плетят. Кстати? а если без под запроса и id в двух переименуете или добавите в обе одинаковые поля по которым действительно должны быть соединение вместо старого, так NATURAL JOIN менять не придется, а с запятыми придется. Так что формально можно найти случаи када он устойчивей к измениям. softwarer Стандарт на перебегание улицы перед идущим автотранспортом вовсе не убедит меня рисковать своей жизнью. Вас убедит? Речь была о качестве. Для него стандарты имеют значение. На западе стандарты демократичны и отражают по мере сил точки зрения всех заинтересованных сторон и производителей и потребителей. softwarer Простите, демагогия. Не думаю. Качество предполагает соответсвие стандартам. Это должно давать много пользы. Например, такой запрос быстрей поймут проггеры разных СУБД. Это относится к качеству. softwarer Сравните, не возражаю. Собственно классический вопрос - Вам шашечки или ехать? Мне - ехать, то есть хорошо работающую, качественную программу. Вам.... Мне то же. плюс стиль упрощающий сопровождение и разработку. softwarer Чтобы обосновать Ваше утверждение, Вам придется доказать, что использование нестандартизованной фичи есть нарушение стандарта ANSI SQL, нарушение стандарта ANSI SQL эквивалентно работе "без стандартов вообще", а работа "без стандартов вообще" неизбежно ведет к некачественному коду. Сумеете? Как минимум второй пункт вызывает у меня большие сомнения. JOIN введен начиная с SQL2 и выше. Тока первом внешних соединений не было, а для внутренних запятая. У качественного кода, наверное, несколько критериев. Один из них соответствие стандартам. Это позволяет легче воспринимать разным проггерам. Это влияет на сопровождение и разработку. В том числе даже допускает перенос на другую РСУБД. Тем более, что многие, например, фокспрошники работают сразу с несколькими СУБД. Чеж тут еще обосновывать то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2006, 22:37 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
softwarerЕсли неоднозначно в конкретном примере - значит, конкретный пример a/0 точно так же дискредитирует запись вида a/b. Еще раз повторяю - выражение a/b однозначто определяет результат операции, в отличае от *=. softwarerЕсли именно неоднозначность так пугает и является основным показанием к введению нового синтаксиса, возникает вопрос: а почему, собственно, не сделали совершенно тривиального действия и не разрешили эту неоднозначность точно так же, как она разрешается в join-ах? Не совсем понял, о чём Вы говорите... softwarerЯ абсолютно уверен, что у любого достаточно опытного человека технические действия выполняются на автомате, без явного мыслительного процесса. Дык нет же. Ладно когда с нуля пишешь, а когда исправляешь запрос, да еще не тобой написанный и нужно вставить *=. Нужно найти и проверить все условия в WHERE, чтобы убедиться, что уже не используется полусоединение. softwarer, в то время как меня неизменно удивляет, какие шутники назвали операцию "присоединение справа" LEFT JOIN-ом. Очень просто - это операция при соединении оставляет "висящие" кортежи слева. softwarerто первое позиционируете как основание для кардинальной переделки существующего. Это где такое я говорил? softwarerПотому что на предыдущей странице я обосновал (во всяком случае, возражений не последовало), что имено в WHERE существует свобода записи, позволяющая расписать условия именно исходя из максимальной логичности, понятности записи. А потому и не последовало, что это уже типичный вопрос религии. Вы сперва формализуйте понятия "максимальной логичности", "понятности" а потом я возражать буду. Мне вот логичнее и понятнее это во FROM писать. softwarer во-первых я полагаю более практичным использовать значимые с точки зрения роли в конкретном запросе алиасы и сокращать ими запись, фокусируя внимание на собственно сути запроса. Это когда вы пишите, может и быстрее сократить, а через год будете вспоминать, чего там насокращали и скакать туда-сюда по подзапросу в поисках операции переименования. softwarerво-вторых, этот подход становится неприменимым при нескольких подключениях в запрос одной и той же таблицы В этом случае неприменим (я же оговорился про это), но можно, например, приписывать суффикс к отношению. А то понапишут всяких огрызков типа st.a = or.b и потом сиди разбирай какое отношение с каким связывается. vadiminfoКстати? а если без под запроса и id в двух переименуете или добавите в обе одинаковые поля по которым действительно должны быть соединение вместо старого, так NATURAL JOIN менять не придется, а с запятыми придется. Так что формально можно найти случаи када он устойчивей к измениям. А вот здесь я с softwarer согласен. По мне, так уж лучше я явно должен буду добавлять условие соединения в запросе, чем сервер мне надобавляет их автоматом там, где не нужно всего лишь из-за того, что совпали названия атрибутов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2006, 00:35 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
Локшин Марк А вот здесь я с softwarer согласен. По мне, так уж лучше я явно должен буду добавлять условие соединения в запросе, чем сервер мне надобавляет их автоматом там, где не нужно всего лишь из-за того, что совпали названия атрибутов. Вы, наверное, не совсем поняли смысл фразы. Там было сказано слово "формально". Формально нельзя сказать, что даже в том опасном применении NATURAL JOIN всегда менее устойчив к изменениям. И на самом деле сервер автоматом не надобавляет, а просто выполнит то что написано -а надобавляли руками парни в БД. Причем второе одинаковое поле, но не имея в виду соединение. Не уверен, что это хорошие парни. Но у нас так делают иногда некоторые - добавляли када апгрэйдили, что-то там заливали наспех. А потом забыли удалить, хотя оно не нужно. Ничего о том, что так использовать NATURAL JOIN лучшее из лучшего сказано не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2006, 01:04 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
NATURAL JOIN как мне кажется не сильно хорош тем, что тупо связывает по одинаковым именам полей. В этом плане KEY JOIN гораздо приятнее, так как для связи таблиц оптимизатор использует поля, указанные в FK, типа того: Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2006, 10:43 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
vadiminfoКакой-то сложный процесс программирования. Именно что. vadiminfoНепонятно када и что они там делают с этим запросом. Была речь про изменения, которые повлияют на NATURAL JOIN, но не повлияли бы на запятые. Вот присмеры проясните траблу, про которую говорите Ставлю задачу: брать из таблицы aj еще и поле b (использовать в расчетах, вывести в интерфейсе или что-нибудь в том же духе). vadiminfoНо то, что первый семантичнее на первый взляд ведь видно? Я не понимаю, что Вы называете "семантичнее", но в целом ничего особенно привлекательного в первом запросе я не вижу. vadiminfoЕстественное соединение - классика. Угу. Примерно такая же классика, как на дельфе - лезть к серверу компонентом TTable, выбирая нужную запись свойством Filter. vadiminfoНу не знаю даже - как-то из Обнинска через Калугу в Москву. Это относится скорее к "явно прописываемому join-ами порядку". В where-синтаксисе запрос будет "дайте мне пожалуйста оптимальный маршрут, проходящий через Калугу, Москву и Обнинск". vadiminfoТеперь грите про подвохи. Мож я не заметил? Если не хотите замечать, безусловно не заметите. vadiminfoЯ имел в виду, что это добавление влияет или нет одинаково на оба синтаксиса. Вот пример написан в предыдущем абзаце. Выше я показал пример "неодинакового влияния". Поскольку пример тривиален, мне трудно поверить, что Вы его не видели. vadiminfoКстати? а если без под запроса и id в двух переименуете или добавите в обе одинаковые поля по которым действительно должны быть соединение вместо старого, так NATURAL JOIN менять не придется, а с запятыми придется. Так что формально можно найти случаи када он устойчивей к измениям. Это еще более замечательный случай, поскольку в нем WHERE-запрос отвалится с "invalid field name" в то время как NATURAL JOIN плавно и незаметно станет работать как CROSS JOIN, и более толковым коллегам этого замечательного программиста придется провести несколько веселых выходных за починкой данных. vadiminfoРечь была о качестве. Для него стандарты имеют значение. Вы размахиваете словом "стандарты" без учета, что это за стандарты. Да и словом "качество" тоже. К примеру, можно программировать на строгом ANSI SQL и тем сделать программу понятнее для "любого БД-программиста". Но качественной такую программу сочтут... далеко не все. Хотя есть люди, которые сочтут. vadiminfoНа западе стандарты демократичны и отражают по мере сил точки зрения всех заинтересованных сторон и производителей и потребителей. И? От того, что моя программа наполовину нагнута под интересы производителя СУБД, причем на 40% - производителя не моей СУБД, она станет качественнее? Сомневаюсь.... vadiminfoНе думаю. Качество предполагает соответсвие стандартам. Это должно давать много пользы. Хм. Тут уместна поговорка про обучение религиозным обрядам. vadiminfoМне то же. плюс стиль упрощающий сопровождение и разработку. В данном случае стиль может быть и упрощает разработку, но за счет усложнения сопровождения. Во всяком случае, ни я, ни (похоже) кто-либо еще из участников беседы не воспылал желанием перейти на такой стиль. vadiminfoЧеж тут еще обосновывать то? Хм. Обычно это звучит, когда обосновать не удается :) Что ж. Итак, Вы четко заняли позицию "СУБД-независимого кода" как главного критерия качества. Предлагаю здесь это не обсуждать а вновь поднять один из вечных топиков типа "давайте программировать не зная конкретную СУБД". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2006, 12:07 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
softwarer Именно что. Вопрос методик, процедур разработки. softwarer Ставлю задачу: брать из таблицы aj еще и поле b (использовать в расчетах, вывести в интерфейсе или что-нибудь в том же духе). И в чем преимущество запятых? Его менять не придется? Это b должно участвавоть в соединениях ? Нет? Тогда в обоих оно не появится, а чтобы вывести в этох запросах придется в обоих дописать - в первом а подзапросе b с алиасом например b1, втором aj.b. Или нет? softwarer Я не понимаю, что Вы называете "семантичнее", но в целом ничего особенно привлекательного в первом запросе я не вижу. Большую осмысленность - соединения явно прописано, а не расшифровывается из запятых. Он просто перечисление в плане привычого своего назначения. softwarer Вы не поняли. Наверное не хотите. Если бы в первом примере вы добавили b с целю соединения, то естественное соединение "в еще более замечательном случе" не пришлось бы менять а запрос с запятыми начал работать не правильно. Это отрицание всеобщности во фразе о преимуществах запятых. softwarer Выше я показал пример "неодинакового влияния". Поскольку пример тривиален, мне трудно поверить, что Вы его не видели. К сожалению не видел. Но в моем примере есть или нет это влияние? softwarer Вы размахиваете словом "стандарты" без учета, что это за стандарты. Отмеячаю эмоциональность слова "размахиваете". Учет - очевиден - по умолчанию стандарты SQL - мы же на каком форуме? softwarer Да и словом "качество" тоже. Разве не Вы первый этим словом не паросто размихавали, а хотели выбить естественное соединение раз и на всегда. Я всего лишь пошел по Вашему пути. softwarer К примеру, можно программировать на строгом ANSI SQL и тем сделать программу понятнее для "любого БД-программиста". Но качественной такую программу сочтут... далеко не все. Хотя есть люди, которые сочтут. Тем более тада не понятен Ваш ответ mir про невозможнось качественного программирования с естественным соединением. Кто как сочтет. softwarer И? От того, что моя программа наполовину нагнута под интересы производителя СУБД, причем на 40% - производителя не моей СУБД, она станет качественнее? Сомневаюсь.... Начет нагнута не в курсах. Я не про нагнутость писал. softwarer Хм. Тут уместна поговорка про обучение религиозным обрядам. Не знаю. Может и уместна. Вы не видите в стандартах ничего, что способствует улучшению качества? softwarer В данном случае стиль может быть и упрощает разработку, но за счет усложнения сопровождения. Уверен в робратном. Мож разработку он и не упрощает - налабал как попало вот и быстрей разроаботал. А вот читать про (+) потом и другим людямвовремя сопровождиния - це да. Еще то удовольствие. softwarer Во всяком случае, ни я, ни (похоже) кто-либо еще из участников беседы не воспылал желанием перейти на такой стиль. Я давно воспылал. Но не перейти, а использовать, если он лучше в данном случае чем другие. Любые JOIN, но тока не запяты и тем более (+). softwarer Хм. Обычно это звучит, когда обосновать не удается :) Или када очевидно. softwarer Что ж. Итак, Вы четко заняли позицию "СУБД-независимого кода" как главного критерия качества. Где я писал про главный критекрий? Где писал про "СУБД-независимого кода"? Вы любите крайности - либо либо другое, но никада по середине? А ведь есть еще оптимальность. softwarer Предлагаю здесь это не обсуждать а вновь поднять один из вечных топиков типа "давайте программировать не зная конкретную СУБД". Если Вы про меня, то я могу сказать - программируйте тока на Оракле. Но чем больше стандартов при прочих равных равных условиях, тем лучше. Вы все-таки сторнник крайностей - раз не удается полностью все делать в соотвествии со, то откажемся от них ваще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2006, 13:08 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
Локшин МаркЕще раз повторяю - выражение a/b однозначто определяет результат операции, Чему равен результат операции 5/0? Локшин Маркв отличае от *= То есть результат select * from a, b where a.id *= b.id определен неоднозначно? Локшин МаркНе совсем понял, о чём Вы говорите... В случае join-синтаксиса есть определенные правила, согласно которым высчитывается требуемый порядок соединений, и по Вашим словам, он в отличие от, строго однозначен. Вопрос: кто мешает использовать аналогичную логику в where-синтаксисе, если это кому-то было бы нужно? Локшин Марк softwarerЯ абсолютно уверен, что у любого достаточно опытного человека технические действия выполняются на автомате, без явного мыслительного процесса. Дык нет же. Ладно когда с нуля пишешь, а когда исправляешь запрос, да еще не тобой написанный и нужно вставить *=. Нужно найти и проверить все условия в WHERE, чтобы убедиться, что уже не используется полусоединение. То есть Вы говорите о том, что исправляете запрос прежде чем поняли его? Типа "посмотрел на код, увидел, куда вроде как можно впендюрить изменение и впендюрил"? Имхо это опасная практика. Я еще понимаю, если не уделяется внимание тонкостям вычислений, подзапросам, смысл которых понятен без детального анализа итп - но править запрос, не понимая логики соединения таблиц, я бы не рискнул. Вот над этим как раз подумать не жалко. Локшин Марк softwarer, в то время как меня неизменно удивляет, какие шутники назвали операцию "присоединение справа" LEFT JOIN-ом. Очень просто - это операция при соединении оставляет "висящие" кортежи слева. Хм. Да я в общем-то не к тому, что в этом есть что-то особенно плохое. Просто как иллюстрацию того, что и особо интуитивно понятное отсутствует. Грубо говоря, если взять некоего прога, не знающего про outer join, и показать ему тот и другой вариант, то: В случае (+) ему нужно будет думать, связываемы ли таблицы требуемым образом без подзапроса, ну а в случае чего компилятор подстрахует. В случае join ему потребуется вспоминать, называется ли нужное ему LEFT или RIGHT JOIN-ом, ну а в случае чего получится некорректный результат запроса. Локшин Марк softwarerто первое позиционируете как основание для кардинальной переделки существующего. Это где такое я говорил? Хм. Полагаю, Вы согласитесь, что введение join-ов - это кардинальная переделка? И вроде как выдвинули именно этот аргумент в пользу их использования, то есть в обоснование их появления. Локшин МаркА потому и не последовало, что это уже типичный вопрос религии. Вы сперва формализуйте понятия "максимальной логичности", "понятности" а потом я возражать буду. У меня складывается ощущение, что Вы очень спешно читали то, о чем сейчас говорите. Ваше: Код: plaintext - безусловно, вопрос религии, согласен. Но у меня Вы такого не найдете. Я сказал, что свобода записи в WHERE позволяет сгруппировать и оформить условия "максимально логично" с персональной точки зрения того, кто пишет запрос. Требуя от меня формализации этой максимальной логичности, Вы профанируете эту свободу; Вы требуете от меня создания некоей "правильной для всех и всегда" точки зрения; как раз того, что сделали создатели join-ов и что мне решительно не нравится. В этом смысле получается примерно так: я пришел к автоконструктору с мотоциклом, а он говорит: "сначала прикрути еще два колеса, а уж тогда я покажу тебе, чем эта конструкция неудачна". Локшин МаркЭто когда вы пишите, может и быстрее сократить, а через год будете вспоминать, Клянетесь? Я бы все же посоветовал не давать столь опрометчивых обещаний относительно меня и используемой мной технологии. Также замечу, что если привыкнете давать толковые имена, а не "быстрее сократить" - скорее всего и у Вас такой проблемы не будет. Локшин МаркВ этом случае неприменим (я же оговорился про это), но можно, например, приписывать суффикс к отношению. Можно. Собственно, этот вопрос - отдельная большая тема, со своими плюсами-минусами в каждом из рассматриваемых случаев. Я собственно в основном хотел уточнить, что Вы имели в виду - этот вариант или еще что-нибудь. А насчет "можно".. если обратите внимание, мы сейчас оказались в позиции, абсолютно симметричной относительно исходного обсуждаемого вопроса. По поводу join-ов: вы говорите, что метод позволяет в большем количестве случаев выдержать единый стиль и не писать лишнего подзапроса, я полагаю, что изредка писать этот "лишний подзапрос" - удачная плата за другие преимущества метода. По поводу именований: я говорю, что метод сокращений среди прочего позволяет выдержать более единый стиль, Вы же (видимо) считаете необходимость изредка добавлять "лишний суффикс" удачной платой за другие преимущества. Локшин МаркА то понапишут всяких огрызков типа st.a = or.b и потом сиди разбирай какое отношение с каким связывается. Хм. Мне захотелось - по материалам далеко не только этой дискуссии - вывесить универсальный баннер: "В любой технологии и в любом подходе можно сделать плохо. Примеры этого "плохо" нисколько не доказывают, что нельзя сделать хорошо и сами по себе не являются аргументами против этой технологии. Надо как минимум показать, что "делать хорошо" - трудно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2006, 13:11 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
vadiminfoВопрос методик, процедур разработки. Это не вопрос методик. Это как раз необходимая методика работы при использовании этой технологии. Если она сложна и неадекватна задаче - это минус технологии. vadiminfo softwarer Ставлю задачу: брать из таблицы aj еще и поле b (использовать в расчетах, вывести в интерфейсе или что-нибудь в том же духе). И в чем преимущество запятых? Его менять не придется? Это b должно участвавоть в соединениях ? Нет? Тогда в обоих оно не появится, а чтобы вывести в этох запросах придется в обоих дописать - в первом а подзапросе b с алиасом например b1, втором aj.b. Или нет? Преимущество запятых в том, что не потребуется заглядывать на пару страниц вниз, дабы определить, используется ли поле "b" во втором подзапросе и соответственно нужно ли переименовывать его в "b1" в первом. Преимущество запятых в том, что если сделать в этой операции ошибку, запрос может быть станет выдавать ошибку (что терпимо), но не станет молча выдавать некорректных данных (что недопустимо). vadiminfoБольшую осмысленность - соединения явно прописано, Хм. То есть встретив natural join, мне нужно отмотать на страницу вверх и посмотреть на тридцать полей в верхнем подзапросе, специально запомнив те из них, которые имеют алиасы, предотвращающие излишнее соединение (например, поля PRICE, QUANTITY, DATE_ACTIVE и так далее). Затем отмотать на страницу вниз и повторить операцию. Далее сопоставить два списка и вычислить из них результат. Простите, но я таки не вижу в этом осмысленности. Предлагаю считать вопросом религии. vadiminfoЕсли бы в первом примере вы добавили b с целю соединения, То мне в любом случае пришлось бы тщательно проверить новый запрос - выдает ли он нужные данные - и заново его оптимизировать. Необходимость написать несколько лишних букв и явно указать желаемое, так, чтобы сопровождающим не пришлось мучительно вычислять, что я имел в виду, на этом фоне выглядит "о очень малым". vadiminfoто естественное соединение "в еще более замечательном случе" не пришлось бы менять а запрос с запятыми начал работать не правильно. Это отрицание всеобщности во фразе о преимуществах запятых. Запрос с запятыми не начал бы работать неправильно. Полагаю, Вам пришлось бы очень долго искать нормального программиста, способного добавить поле с целью соединения, не указав соединения. Также я бы просил Вас явно процитировать, на какую такую "всеобщую фразу о преимуществе запятых" Вы столь упорно отвечаете. Я за собой глобальных фраз не помню; помню лишь слова, что NATURAL JOIN позволяет незаметно внести очень тяжелую ошибку. vadiminfoК сожалению не видел. Но в моем примере есть или нет это влияние? Боюсь, я опять таки не понял, что Вы имеете в виду. Если обсуждаемый пример, данный Вами в прошлом письме, то я показал это влияние. Если пример с добавлением б для соединения, то наверное есть, но это скорее неважно - для опровержения Вашего тезиса об отсутствии влияния достаточно и одного примера. vadiminfoОтмеячаю эмоциональность слова "размахиваете". Есть такое. Я употребил именно это слово, поскольку по-моему именно оно отражает Ваш подход (во всяком случае, соответствует моему восприятию Вашего подхода). vadiminfoУчет - очевиден - по умолчанию стандарты SQL - мы же на каком форуме? Насколько я помню текст стандарта ANSI SQL, там нигде не говорится, что это стандарт качества программного обеспечения. Именно это и есть "без учета" - без учета предназначения стандарта, к которому апеллируете. vadiminfoРазве не Вы первый этим словом не паросто размихавали, а хотели выбить естественное соединение раз и на всегда. Я не хочу его выбить в том плане, что мне достаточно все равно, как Вы программируете. Я сказал, что встретив natural join в боевом коде, испытал бы желание уволить его автора. Нарочито подчеркнув экстремальность такой ситуации. Реально, встретив такое, я бы посмотрел, что это за автор и в какой ситуации он бы его применил. Если это, назовем так, неопытный программист - объяснил бы ему, почему так делать нельзя. При необходимости - приказал бы. Хотя постарался бы не брать в команду тупого и при этом упрямого человека, соответственно вероятность приказа мала. Если программист опытный либо может и хочет обосновать этот подход - устроил бы обсуждение в рамках команды, по итогам которого дополнил бы стандарт разработки одним из следующих вариантов: - не использовать - использовать в некоторых исключительных случаях - использовать по желанию разработчика - везде делать именно так. vadiminfoЯ всего лишь пошел по Вашему пути. Не вижу аналогии, но верю, что Вы ее видите. Надеюсь, Вы не возражаете против моего права так или иначе воспринимать Ваш подход. vadiminfoТем более тада не понятен Ваш ответ mir про невозможнось качественного программирования с естественным соединением. Кто как сочтет. Хм. Я нисколько не возражаю против права "кого-то" считать что бы то ни было, в том числе нечто с моей точки зрения глупое. mir в своем письме сказал, что я возражаю против natural join из религиозных соображений. Я объяснил ему, что возражаю из соображений качества, которые с моей точки зрения к религиозным не относятся. Не относятся - потому что трудноформализуемы, но тем не менее косвенно измеримы. Прошу прощения, сейчас мне пора уходить, так что на оставшуюся часть Вашего письма отвечу позже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2006, 13:41 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
softwarer Преимущество запятых в том, что не потребуется заглядывать на пару страниц вниз, дабы определить, используется ли поле "b" во втором подзапросе и соответственно нужно ли переименовывать его в "b1" в первом. Преимущество запятых в том, что если сделать в этой операции ошибку, запрос может быть станет выдавать ошибку (что терпимо), но не станет молча выдавать некорректных данных (что недопустимо). vadiminfoБольшую осмысленность - соединения явно прописано, Хм. То есть встретив natural join, мне нужно отмотать на страницу вверх и посмотреть на тридцать полей в верхнем подзапросе, специально запомнив те из них, которые имеют алиасы, предотвращающие излишнее соединение (например, поля PRICE, QUANTITY, DATE_ACTIVE и так далее). Затем отмотать на страницу вниз и повторить операцию. Далее сопоставить два списка и вычислить из них результат. Простите, но я таки не вижу в этом осмысленности. Предлагаю считать вопросом религии. vadiminfoЕсли бы в первом примере вы добавили b с целю соединения, То мне в любом случае пришлось бы тщательно проверить новый запрос - выдает ли он нужные данные - и заново его оптимизировать. Необходимость написать несколько лишних букв и явно указать желаемое, так, чтобы сопровождающим не пришлось мучительно вычислять, что я имел в виду, на этом фоне выглядит "о очень малым". 2 softwarer Гм, а можно несколько offtop - вопрос: поддается ли все это автоматизации? Т.е. к примеру, для каждого SQL запроса хранить результаты анализа - откуда какие поля, как какие таблицы соединены при данном виде запроса и текущем состоянии схемы БД. А при каждом изменении структуры таблиц - автоматически проводить повторный анализ этих запросов и сравнение, с генерацией предупреждений об изменении условий соединений и т.п.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2006, 13:55 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
-------------поддается ли все это автоматизации? Т.е. к примеру, ...... В принципе можно. Теоретических препятствий вроде бы нет, но практических уйма - например, надо будет каким-то образом отлавливать изменение запроса в клиенте, причем понимать, что это именно изменение запроса, а не новый запрос, похожий на старый. Главное - я не вижу практического смысла в такой автоматизации; по крайней мере овчинка явно не стоит выделки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 13:18 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
vadiminfoНачет нагнута не в курсах. Я не про нагнутость писал. Хм. Допустим, у нас есть два варианта решить некую задачу: "стандартный" и "нестандартный", и мы их сравниваем. Какие возможны результаты такого сравнения: 1) "Стандартный" - лучше. В этом случае стандартность третьестепенна; главное, что мы выбираем лучшее решение. 2) "Нестандартный" - лучше. В этом случае говорить о плюсах стандарта - значит, агитировать за худшее решение (пусть и имеющее специфические плюсы). Это и есть то, что я назвал "нагибать программу". 3) Они примерно одинаковы, и "стандартность" является решающим плюсом в пользу первого варианта. Собственно единственное имхо, когда этот аргумент весом. vadiminfoНе знаю. Может и уместна. Вы не видите в стандартах ничего, что способствует улучшению качества? С точки зрения качества отдельно взятой программы - вижу, незначительное.Ровно так же вижу, что мольба на стандарты запросто может окончиться качественно разбитым лбом. Отсюда вывод - надо делать качественную программу, и хорошо, если это удастся сочетать со следованием стандарту. Если не удастся - стандарт идет лесом. vadiminfoЯ давно воспылал. Но не перейти, а использовать, если он лучше в данном случае чем другие. Любые JOIN, но тока не запяты и тем более (+). Вадим, пожалуйста не примазывайтесь. Давайте четко разделим две вещи - NATURAL JOIN, о котором идет речь в этой ветке беседы, и все остальные JOIN-ы, которые обсуждались изначально. Если мы продолжаем разговор о NATURAL JOIN - вроде бы никто из убежденных Вами в топике не отметился; напротив, двое сторонников ANSI JOIN-ов отозвались о Вашей методике без энтузиазма. Это, разумеется, никак не показывает, что методика плоха - но привлечь авторитет "ANSI JOIN-ов вообще" для ее обоснования не удастся. Если же Вы хотите вернуться к обсуждению ANSI JOIN-ов - предлагаю начать с того места, где мы остановились. Если мне не изменяет память, это на первой странице. vadiminfo softwarer Хм. Обычно это звучит, когда обосновать не удается :) Или када очевидно. Я очень ценю и часто цитирую фразу, сказанную одним из моих соучеников: Код: plaintext Как минимум, не вижу оснований считать очевидным то, что "очевидно" только одному из участников беседы. vadiminfo softwarer Что ж. Итак, Вы четко заняли позицию "СУБД-независимого кода" как главного критерия качества. Где я писал про главный критекрий? Там, где упорно не указываете никаких других. Вы обосновываете некоторое утверждение (о существенной зависимости качества от стандартности). Вы указали единственный аргумент в пользу этого. Следовательно, его достаточно; его вес таков, что все прочие аргументы за и против не способны изменить оценку. Здесь удобна аналогия с контрольным пакетом; этот аргумент должен быть таким - решающим, либо аргументация неверна. vadiminfoГде писал про "СУБД-независимого кода"? Там, где говорили про фокспрошников и проггеров разных СУБД. Или я Вас неверно понял? vadiminfoВы любите крайности - либо либо другое Не совсем так. Я люблю выдвигать достаточно экстремальные утверждения, верные в своей области определения. Очень часто при этом мои собеседники теряют ту самую область определения и воспринимают сказанное как "глобально экстремальное утверждение". Также я люблю выделять ключевую точку и уделять ей максимальное внимание. Как раз это происходит сейчас и, похоже, вызывает Ваше непонимание. Я полагаю, что если Вы привели единственный аргумент, его значимость - 80-90% от всего, что можно сказать в пользу X. Вы же, видимо, считаете его важность как 5-10%, и удивляетесь, что это я так экстремально обсуждаю малозначащую вещь. vadiminfoЕсли Вы про меня, то я могу сказать - программируйте тока на Оракле. Но чем больше стандартов при прочих равных равных условиях, тем лучше. Глупость, простите. Лично меня бы устроило наличие действительно хороших (с точки зрения решаемых задач) стандартов. Количество же не столь хороших - по барабану. Причем я почти уверен, что и Вам тоже. Во всяком случае я абсолютно уверен, что если по-быстрому сочиню для Вас два-три десятка бредовых стандартов, Ваше "лучше" нисколько не улучшится. vadiminfoВы все-таки сторнник крайностей - раз не удается полностью все делать в соотвествии со, то откажемся от них ваще? Я полагаю, что нельзя быть немножко беременной. Полное соблюдение стандарта - дает некоторые преимущества (пусть, с моей точки зрения в общем случае не перекрывающие недостатков, но дает). Неполное соблюдение стандартов означает: и преимуществ нет, и недостатки тупо соблюдаются. Вывод? Для меня вывод - делать хорошо. И если, совершенно случайно, это "хорошо" совпадет с неким стандартом - еще лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 13:57 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
softwarer mir в своем письме сказал, что я возражаю против natural join из религиозных соображений. Я объяснил ему, что возражаю из соображений качества, которые с моей точки зрения к религиозным не относятся. Не относятся - потому что трудноформализуемы, но тем не менее косвенно измеримыНу-ну. Я не так сказал. Автоцитата: "Это что-то больше психологическое, чем технологическое." То есть технологический аспект данного вопроса я признаю, но считаю его малосущественным по сравнению с огромным количество других, гораздо более важных технологических проблем SQL-программирования, среди коих создание стандарта именования объектов БД, стандарта оформления (форматирования) скриптов и т.д. В этой связи вопрос "как писать JOIN" выглядит мелко для столь категоричных заявлений, как ваше. А поскольку достаточно веско обосновать свою точку зрения вы пока не сумели, то здесь для меня показалось очевидным сильное влияние психологического аспекта, а именно силы привычки, либо воспринятое на веру мнение авторитетного для вас человека. То есть ничего обидного я в виду не имел (а обвинение в религиозном фанатизме в технической сфере считаю обидным, и к вам не отношу). Поскольку вы сами сказали, что обсуждаемые материи трудноформализуемы, подходящим критерием обычно является опыт. Опыта использования NATURAL JOIN у меня нет (ну не поддерживает его SQL Server), поэтому на это тему спорить не берусь, возможно вы правы. Но прав только в том случае, если у вас у самого есть реальный опыт многочисленных шишек от NATURAL JOIN, а не просто мнение по этому вопросу. Однако по поводу использования синтаксиса INNER/OUTER JOIN во FROM опыта у меня предостаточно, и тут я могу с полным правом заявить, что никакого вреда в них окромя пользы за многие годы никогда не видел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 16:56 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
softwarer Хм. Допустим, у нас есть два варианта решить некую задачу: "стандартный" и "нестандартный", и мы их сравниваем. Какие возможны результаты такого сравнения: 1) "Стандартный" - лучше. В этом случае стандартность третьестепенна; главное, что мы выбираем лучшее решение. 2) "Нестандартный" - лучше. В этом случае говорить о плюсах стандарта - значит, агитировать за худшее решение (пусть и имеющее специфические плюсы). Это и есть то, что я назвал "нагибать программу". 3) Они примерно одинаковы, и "стандартность" является решающим плюсом в пользу первого варианта. Собственно единственное имхо, когда этот аргумент весом. Думаете? Вы считаете такие рассуждения примером обоснования (помятуя о том что мне Вы напоминаете про обоснования)? В 1) случае: Почему Вы думаете что для всех стандартность третьестепенна? В каком смысле? Ну хорошо то, что Вы выбрали лучшее решение. Повезло. В плане качества однако у Вас тоже не малый плюс. Поди плохо? Во 2) Причем здесь агитация? Констатация - есть в качестве вот такие то недостатки. Решенее то лучшее, но среди возможных. А качество имеет такие-то и такие некдостатки не смотря на это. Заказчку мож об этом и не стоит говорить, а для себя отметить то можно, а возможно и нужно. 3) ну тем более решающий плюс. Однако, када не решающие плюсы тоже не третьесортны в общем случае. Тем более вопросы о качестве и о выборе не совсем одно и то же. Ну выбрали Вы Волгу, ну лучше она пятерки. Последний ли она писк по качеству? И имеет ли это или нет значение? Тем более в нашем то случае то что (+) лучше ваще пока более чем сомнительно. Т.е. Ваш третий вариант как минимум. А то и первый. softwarer С точки зрения качества отдельно взятой программы - вижу, незначительное.Ровно так же вижу, что мольба на стандарты запросто может окончиться качественно разбитым лбом. Про мольбу на стандарты разделяю Ваши опасения, но насчет незначительности стандартов тоже опасаюсь - это неоправданно беспечное к ним отношение. softwarer Отсюда вывод - надо делать качественную программу, и хорошо, если это удастся сочетать со следованием стандарту. Если не удастся - стандарт идет лесом. Лесом может пойти отчасти и качество. Лучшее из возможного и качественное не всегда одно и тоже. Или Вы думаете всегда? softwarer Вадим, пожалуйста не примазывайтесь. Хорошо. Особенно, если буду знать в каком смысле и куда или к чему. softwarer Давайте четко разделим две вещи - NATURAL JOIN, о котором идет речь в этой ветке беседы, и все остальные JOIN-ы, которые обсуждались изначально. Это зачем же их разделять? NATURAL JOIN частный случай JOIN в плане синтаксиса. Я его привел как дополнительный аргумент в пользу JOIN. Тем более я высказывался что для стиля в боевом коде лучше либо одни JOIN либо одни запятые? Что бы не было тут играть, а где рыбу заворачивали не играть. С этим то Вы согласны? И я все еще думаю что JOIN лучше (первый Ваш вариант). И привожу все доводы. И мне это не для того, чтобы кого-то убедить, сагетировать или доказать свою правоту - я это защищаю, чтобы самому более уверенно применять. Но допускаю, что чего-то упустил. softwarer Если мы продолжаем разговор о NATURAL JOIN - вроде бы никто из убежденных Вами в топике не отметился; напротив, двое сторонников ANSI JOIN-ов отозвались о Вашей методике без энтузиазма. Это, разумеется, никак не показывает, что методика плоха - но привлечь авторитет "ANSI JOIN-ов вообще" для ее обоснования не удастся. И хорошо, что убежденные мною не отметились - я не готов брать на себя груз отвественности. Пусть каждый решает для себя сам и уж точно не из-за того что я сагитировал. Полно литературы. Мы тут просто проверяем эти точки зрения на критикуемость. softwarer Я очень ценю и часто цитирую фразу, сказанную одним из моих соучеников: Если попробовать доказать очевидный факт, зачастую он оказывается вовсе и не очевидным. А иногда - вовсе и не фактом. Как минимум, не вижу оснований считать очевидным то, что "очевидно" только одному из участников беседы. В мире полно хороших фраз и эта тоже. Но пока реально очевидность преодолевали Каперник, Галиллей, ну 10 или 100 мыслителей. Кроме того, в том случае следовало для доказательства использовать какую-то формальную систему? Там были обычные доводы в духе этого топика. Не строгие. Но Вы стали говорить о том, када обчно говорят так то так-то. Ну я привел еще один обычный на мой взляд случай использования той фразы. Т.е. это все способы рассуждений в духе топика. Или все кроме меня доказывают теореемы в духе Вейершрасса? Тока я халявлю? softwarer Там, где упорно не указываете никаких других. Про это говорили и потому не указывал других. Но не упорно. Что главенство зависит от не указывания других? softwarer Вы обосновываете некоторое утверждение (о существенной зависимости качества от стандартности). Вы указали единственный аргумент в пользу этого. Следовательно, его достаточно; его вес таков, что все прочие аргументы за и против не способны изменить оценку. Здесь удобна аналогия с контрольным пакетом; этот аргумент должен быть таким - решающим, либо аргументация неверна. Главный, навеное, это када его достаточно для того, что было качество высшей пробы. А если его отсутсвие оставляет вопросы к качеству - это по-моему не главный, но заметный среди прочих. Могут быть и другие такие с такими же свойствами. Вот кстати и Вы приводите аргументы основанные на удобных аналогиях. Этого достаточно для обоснования? Мне что-то кажется, что нет. softwarer Там, где говорили про фокспрошников и проггеров разных СУБД. Или я Вас неверно понял? Конечно не верно. Это было бы верно, если бы я был рьяный сторнник крайностей. Есть относительная независимость от производителя СУБД, есть абсолютная. Чем больше независмости тем лучше. Но есть глубина управления данными, которая опирается на фичи СУБД. Абсолютная независмость ограничивает возможности использования возможностей СУБД. Т.е. они в противоречии. Исчем оптимум. Однако, есть базовые весчи в РМД. К ним относятся базовые операции SQL. В частности, соединения. Они достачно часто и похожих случаях применяются во многих РСУБД. softwarer Не совсем так. Я люблю выдвигать достаточно экстремальные утверждения, верные в своей области определения. Очень часто при этом мои собеседники теряют ту самую область определения и воспринимают сказанное как "глобально экстремальное утверждение". Также я люблю выделять ключевую точку и уделять ей максимальное внимание. Как раз это происходит сейчас и, похоже, вызывает Ваше непонимание. Я полагаю, что если Вы привели единственный аргумент, его значимость - 80-90% от всего, что можно сказать в пользу X. Вы же, видимо, считаете его важность как 5-10%, и удивляетесь, что это я так экстремально обсуждаю малозначащую вещь. Нет я удивляюсь, что Вы мне приписываете крайности. Не писать же мне длинные тексты каждый раз про золотую середину? Про экстремальные утверждения не въехал - это точки перегиба или макимумы всякие? Если я привел единственный аргумент, то это не обязательно означает что других нет или этот главный. Возможно это первый по ситуации. Здесь и так тексты длинные плохо воспринимаются. Я в первом посте привел несколько, но не задавался целью определить все это или важнейшие. Мы же на форуме, а не докторские пишем. softwarer Глупость, простите. Может и так. А я не тока говорю, я еще и думаю так. softwarer Лично меня бы устроило наличие действительно хороших (с точки зрения решаемых задач) стандартов. Количество же не столь хороших - по барабану. Причем я почти уверен, что и Вам тоже. Во всяком случае я абсолютно уверен, что если по-быстрому сочиню для Вас два-три десятка бредовых стандартов, Ваше "лучше" нисколько не улучшится. Ну они стараются по мере сил, чтобы как можно больше заинтересованных это устроило. Про количество я и не гавару - подразумеваются стандарты SQL, начиная с SQL2. Опасаюсь говорить "очевидно" из-за Вашего соученика. Если же Вы сочините и не по быстрому, и не тока для меня (стандарты имеют значения тока када им многие следуют) и не бредовых, а так чтобы им следовали конкурирующие между собой производители (еще одна задача не допустить чтобы стандарты присходили от одного производителя), то мое лучше може таки улучшиться. Причем, я почти уверен, что Вы тоже так думаете. А как иначе? Ить это все будет кроме всего прочего означать, что Вы придумали что-то стоящее. Знаете скока стандартов понаписано? И что производители вовсе не рвутся им следовать? По своей воле они бы не стали (+) отменять. Этот ж бабок стоит. Но уж если последовали, то стандарты прошли приличные оценки как минимум. А Оракл еще и не рекомендует (+). А Вы говорите - сочиню для Вас бредовые. Спасибо за такую заботу. softwarer Я полагаю, что нельзя быть немножко беременной. Полное соблюдение стандарта - дает некоторые преимущества (пусть, с моей точки зрения в общем случае не перекрывающие недостатков, но дает). Неполное соблюдение стандартов означает: и преимуществ нет, и недостатки тупо соблюдаются. Ну кто может и немножеко беременная - например. студентка на зачете. Почему тока полное? А частичное? Чем больше тем лучше, но и немного тоже хорошо. Ить как минимум там где по стандартом понятнее. Тем более есть базовые вещи, например, базовые операции рел алгебры. Они составляют большую часть всех запросов и их понимание уже большой задел для понимания всего запроса, даже если там есть пока дополнительные специфические конретного СУБД фичи. Вот почему совсем нет преимуществ? Если парни все будут легко понимать JOIN? А аналитческих фунций Оракла пока не будут понимать другие, разве это хуже, если они напроч ниче не понимают в текстах запросов друг друга? softwarer Вывод? Для меня вывод - делать хорошо. И если, совершенно случайно, это "хорошо" совпадет с неким стандартом - еще лучше. Если бы я сделал подобный по стилю вывод, но с большим креном в пользу стандартов, Вы не вспомнили какого-нибудь своего соученика, чтобы раскритиковать меня в пух и прах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 21:47 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
softwarerЧему равен результат операции 5/0? Согласно математическому определению данной операции результат будет равен бесконечности. Кстати, подумайте, что результаом применения операции может быть "неопределено". В отличае от *=, если такие аналогии проводить, то будет равно то-ли 5 то-ли 2, в зависимости от того как звезды на небе расположены. softwarerТо есть результат select * from a, b where a.id *= b.id определен неоднозначно? В этом частном случае однозначно, но в большом количестве других - нет. softwarerВопрос: кто мешает использовать аналогичную логику в where-синтаксисе, если это кому-то было бы нужно? И как Вы себе это представляете? softwarerно править запрос, не понимая логики соединения таблиц, я бы не рискнул. Т.е. чтобы прицепить к конкретному справочнику по left join, допустим подчиненную таблицу при типе связи "один к одному" Вы досканально изучаете весь запрос на 5 экранах вглядываясь во все условия фильтрации? softwarer В случае (+) ему нужно будет думать, связываемы ли таблицы требуемым образом без подзапроса, ну а в случае чего компилятор подстрахует. В случае join ему потребуется вспоминать, называется ли нужное ему LEFT или RIGHT JOIN-ом, ну а в случае чего получится некорректный результат запроса. А с какой стороны (+) написать ему уже думать будет не нужно? softwarerИ вроде как выдвинули именно этот аргумент в пользу их использования, то есть в обоснование их появления. Нет. Я говорил только про неоднозначность синтаксиса с *=. softwarerЯ бы все же посоветовал не давать столь опрометчивых обещаний относительно меня и используемой мной технологии. Также замечу, что если привыкнете давать толковые имена, а не "быстрее сократить" - скорее всего и у Вас такой проблемы не будет. А тогда вопрос напрашивается сам собой - а какого черта нужно было так в схеме называть отношения, чтобы потом их все время сокращать. Причем сокращать ВЕЗДЕ ОДИНАКОВО, иначе у Вас это извините не технология, а форменный бардак будет? softwarerПо поводу именований: я говорю, что метод сокращений среди прочего позволяет выдержать более единый стиль, Непонятно, зачем вводить еще одну систему - сокращений с полной ее реалищацией исключительно силами программиста. От чего здесь стиль будет более единый? У Вас также появятся аналоги суффиксов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 21:57 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
Локшин Марк softwarerЧему равен результат операции 5/0? Согласно математическому определению данной операции результат будет равен бесконечности. А нельзя ли уж процитировать само определение и сказать, откуда Вы его взяли? Кстати, правильно ли я понял, что Вы утверждаете, что 0 * oo = 5? Локшин МаркКстати, подумайте, что результаом применения операции может быть "неопределено". И зачем думать об этом, если это то, о чем я говорю? Локшин МаркВ отличае от *=, если такие аналогии проводить, то будет равно то-ли 5 то-ли 2, в зависимости от того как звезды на небе расположены. Аналогия неверна и отличия нет. В обоих случаях - попытаетесь ли Вы выполнить на сервере "неопределенное" деление либо "неопределенную" связку - сервер выдаст сообщение об ошибке, суть которого именно в неопределенном результате операции. Если бы он этого не сделал, это была бы ошибка реализации сервера. Тем не менее, стоит так же отметить, что "то ли два, то ли пять" - это и есть неопределенность. В школьной математике Вы должны были проходить примерно следующее обоснование деления на ноль: чтобы вычислить результат деления на ноль, составим уравнение C/0 = x, где C - константа. Оно равносильно C = 0 * x, и по определению нуля оно выполняется для любого x (в старших классах, может быть, добавят "меньше бесконечности). И дальше объясняют, что раз любой x является решением исходного уравнения - и два, и пять, и минус пи - то результат неопределен, его нельзя однозначно вычислить. Локшин МаркИ как Вы себе это представляете? Так себе и представляю. Есть определенные правила расстановки приоритетов в join-ах. Применить те же правила для связок, написанных в where в том порядке, в котором они там написаны, ругаясь на непредставимые в терминах join-а комбинации. Локшин Марк softwarerно править запрос, не понимая логики соединения таблиц, я бы не рискнул. Т.е. чтобы прицепить к конкретному справочнику по left join, допустим подчиненную таблицу при типе связи "один к одному" Вы досканально изучаете весь запрос на 5 экранах вглядываясь во все условия фильтрации? Обратите внимания, как грубо Вы передернули от моего "логика соединения таблиц" к "все условия фильтрации". Простите, но по этой причине мне не хочется отвечать на этот вопрос. Локшин МаркА с какой стороны (+) написать ему уже думать будет не нужно? Теоретически, наверное, нужно. Практически - никогда не встречал человека, который бы провозгласил что-то типа "блин! опять не с той стороны написал". Локшин Марк softwarerИ вроде как выдвинули именно этот аргумент в пользу их использования, то есть в обоснование их появления. Нет. Я говорил только про неоднозначность синтаксиса с *=. OK. Давайте окончательно поставим точку в этом вопросе. Выберите, пожалуйста, один из следующих вариантов: 1) "Неоднозначность синтаксиса с *=" является существенным аргументом в пользу ansi join-ов, достаточным, чтобы не приводить других аргументов. 2) "Неоднозначность синтаксиса с *=" является существенным аргументом в пользу ansi join-ов; другие аргументы есть (где?) и в сумме их достаточно. 3) "Неоднозначность синтаксиса с *=" упомянута для полноты коллекции и не является существенным аргументом (а где существенные и о чем идет спор - непонятно). Локшин МаркА тогда вопрос напрашивается сам собой - а какого черта нужно было так в схеме называть отношения, чтобы потом их все время сокращать. Я, кажется, предлагал вынести это в отдельный топик. Для ответа удобно воспользоваться понятием namespace. Проектируя схему, необходимо управлять пространством в несколько тысяч имен, которые нужно достаточно четко разделять - поэтому появляются сущности, например, ITEM$GROUPS, ORG$GROUPS и так далее. Пространство имен в запросе куда уже - порядка десятков, поэтому детализированное разделение как правило необязательно и только замусоривает код. Второй момент, который также влияет на этот процесс - роль таблицы в запросе. Допустим, если мне нужны контрагенты, я предпочту оперировать именно этим алиасом, даже если таблица называется, допустим, Организации. В этом же запросе та же таблица может всплыть под алиасом "банки" - а может и не всплыть, смотря по логике запроса. Наконец, существует момент с подзапросами. Довольно часто с точки зрения восприятия запроса уместно выделение подзапроса (с его фильтрующими условиями) с подстановкой его на то место, где раньше была таблица. То есть Код: plaintext 1. 2. 3. 4. заменить на Код: plaintext 1. 2. 3. 4. При использовании алиасов это довольно естественно; если же везде применять имена таблиц и обозвать подзапрос именем таблицы, это здорово дезориентирует; конечно, можно привыкнуть, но не думаю, что это хорошая практика. Локшин МаркПричем сокращать ВЕЗДЕ ОДИНАКОВО, иначе у Вас это извините не технология, а форменный бардак будет? Думаю, у нас разное понимание ВЕЗДЕ ОДИНАКОВО. Для меня это - используя одинаковую и достаточно прозрачную логику. Для Вас, подозреваю - нечто другое. Локшин МаркНепонятно, зачем вводить еще одну систему - сокращений с полной ее реалищацией исключительно силами программиста. От чего здесь стиль будет более единый? У Вас также появятся аналоги суффиксов. Хм. Вы пытаетесь посмотреть сквозь шоры своей системы. В ней, безусловно, придется делать именно суффиксы. Лично я запрос Код: plaintext 1. 2. 3. полагаю более "единостильным", нежели Код: plaintext 1. 2. 3. 4. и суффиксы вижу только во втором варианте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:32 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
mirНу-ну. Именно что. mirЯ не так сказал. Автоцитата: "Это что-то больше психологическое, чем технологическое." Не спорю. Согласны ли Вы с произведенной мной заменой психологического на религиозное (с учетом того смысла, который придан второму термину в дальнейшем обсуждении), или считаете это неправомерным? mirТо есть технологический аспект данного вопроса я признаю, Но считаете его несущественным (малосущественным), о чем дальше и говорите. Далее идет стандартный математический (и не только) прием - отбрасывание несущественных слагаемых. Далее я не говорю ничего, что делало бы такое отбрасывание некорректным - я говорю об общем смысле Вашего письма ("главным образом нетехнологическое") и противопоставляю ему общий смысл своего письма ("главным образом технологическое"). Если Вы не согласны с этим - прошу объяснить. mirно считаю его малосущественным по сравнению с огромным количество других, гораздо более важных технологических проблем Если не ошибаюсь, мы нигде в этом топике на момент Вашего письма не обсуждали другие проблемы, в том числе более важные, поэтому у Вас нет возможности отнормировать мое отношение к этой проблеме к отношению к каким-то другим. Соответственно, Вы не можете делать выводов из величины этого отношения. mirВ этой связи вопрос "как писать JOIN" выглядит мелко для столь категоричных заявлений, как ваше. Хм. То есть, если Вы видите, что программист-новичок делает мелкую в принципе ошибку, например отсутствие проверки на маловероятную некорректную ситуацию, Вы ни в какой ситуации не станете категорично настаивать на ее исправлении? То есть если он упрется рогом и скажет "не буду делать и все", Вы скажете "ладно, бог с тобой"? Почему я задаю этот вопрос. Если Вы допускаете возможность категоричности в этом случае - разваливается Ваша логика связывания величины ошибки с категоричностью подхода "ошибки надо исправлять". Если же действительно в такой ситуации спустите на тормозах - это будет просто интересным для меня результатом. В таком случае мне придется констатировать, что Вы согласны получить в итоге не столь качественный продукт [как тот, каким он легко мог бы стать]. Я придерживаюсь иной точки зрения, причем не скрываю, что в этом вопросе весьма категоричен. mirА поскольку достаточно веско обосновать свою точку зрения вы пока не сумели, Хм. Если не против, давайте остановимся на этом моменте. К тому моменту, когда Вы написали свою фразу, я ее вообще не обосновывал. Я сказал саму фразу, vadiminfo на нее ответил, и как я собственно и предлагал - "полагаю, можно ставить точку" - на этом эта ветка и заглохла. Далее мы немного поговорили с Марком, и далее Вы написали в том числе и обсуждаемую сейчас фразу. Поэтому, простите, я бы хотел придраться к Вашей передаче событий :) mirто здесь для меня показалось очевидным сильное влияние психологического аспекта, а именно силы привычки, либо воспринятое на веру мнение авторитетного для вас человека. То есть ничего обидного я в виду не имел Хм. Если обратите внимание, я нисколько не обиделся, но в ответном письме к Вам просто прояснил, какие соображения я считаю основными. Мало того, я считаю глупой саму мысль обидеться на "кто-то что-то обо мне подумал, и хуже того, высказал". mir(а обвинение в религиозном фанатизме в технической сфере считаю обидным, и к вам не отношу). Тут следует учесть, что в дальнейшем обсуждении это слово использовалось в переносном смысле, и в моей фразе было употреблено именно в нем же. mirпоэтому на это тему спорить не берусь, возможно вы правы. Но прав только в том случае, если у вас у самого есть реальный опыт многочисленных шишек от NATURAL JOIN, а не просто мнение по этому вопросу. Нет, по этому поводу у меня именно мнение. Основанное, разумеется, на шишках от каких-то других ситуаций, которые я полагаю сходными. Разумеется, прямых аналогий нет, но думаю Вы согласитесь - определенный опыт в "самом разном программировании" позволяет сформировать некие достаточно абстрактные критерии (на уровне универсальности "давать хорошие имена переменным, таблицам....."). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 14:17 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
softwarerА нельзя ли уж процитировать само определение и сказать, откуда Вы его взяли? А на память. Книжку находить - в библиотеку идти. Прогуглите фразу "деление на ноль бесконечность", получите интересные результаты http://www.intuit.ru/department/pl/javapl/4/3.html http://www.uni-vologda.ac.ru/java/jls/15-doc.htm (15.6.2) http://www.codenet.ru/progr/optimize/pentopt/17.php (17.9) Ну и т.д. Справедливости ради нужно отметить, что деление на 0 на расширенном множестве действительных чисел определяют и как неопределенность для любого числа в числителе. И то, что расширять можно либо парой +- бесконечность, либо просто бесконечностью без знака (второе расширение естественным образом обобщается на n-мерные пространства). softwarerКстати, правильно ли я понял, что Вы утверждаете, что 0 * oo = 5? Нет, не верно. Результат данной операции не определен. Бесконечность не является "настоящим числом". Это все равно, что говорить, что из oo/2=oo (с этим то Вы хотя бы согласны?) следует oo/oo=2. softwarerИ зачем думать об этом, если это то, о чем я говорю? Нет не о том, результат "неопределен" - это аналог значения null в РМД. softwarerАналогия неверна и отличия нет. В обоих случаях - попытаетесь ли Вы выполнить на сервере "неопределенное" деление либо "неопределенную" связку - сервер выдаст сообщение об ошибке, суть которого именно в неопределенном результате операции. Если бы он этого не сделал, это была бы ошибка реализации сервера. Я считаю, что аналогия верна, более того, можно сделать чтобы сервер при делении на 0 возвращал null а не ошибку (по крайней мере на некоторых). softwarerТем не менее, стоит так же отметить, что "то ли два, то ли пять" - это и есть неопределенность. Нет. В случае с *= получается, что так посчитаем - два, а так - пять, но не три, не четыре получиться не может. Это не совсем одно и тоже. softwarerПрименить те же правила для связок, написанных в where в том порядке, в котором они там написаны Ага, и сразу лишим оптимизатор использовать, например, свойство коммутативности операции and т.к. условия в WHERE трогать будет нельзя? softwarerОбратите внимания, как грубо Вы передернули от моего "логика соединения таблиц" к "все условия фильтрации". Не вижу ничего такого. У вас все условия в любом случае в одной куче, и мух от котлет Вам каждый раз отделять придется. При этом, поскольку все свалено в одном месте это будет сделать сложнее (IMHO). softwarerOK. Давайте окончательно поставим точку в этом вопросе. Выберите, пожалуйста, один из следующих вариантов: Объективно - первый, субъективно - второй, т.к. пойдут слабо формализуемые аргументы типа "так запрос семантичнее выглядит", поэтому я говорить об этом и не хочу. softwarerДумаю, у нас разное понимание ВЕЗДЕ ОДИНАКОВО. Для меня это - используя одинаковую и достаточно прозрачную логику. А для меня, чтобы когда я встретил в тексте head или manager я не думал, какое исходное отношение в БД было переименовано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2006, 13:23 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
Локшин МаркСправедливости ради нужно отметить, что деление на 0 на расширенном множестве действительных чисел определяют и как неопределенность для любого числа в числителе.Вы бы все-таки почитали более серьезную математическую литературу, прежде чем вот так просто начинать на ноль делить. Ну или хотя бы в википедию сходили. В кратце можно сформулировать так - для того, чтобы избежать неопределенности с делением на ноль вы безумно усложнили всю аксиоматику. До этого аксиоматизирована было всего одина неопределенность. А в вашем же расширенном множестве (кстати а не потрудитесь ли полноценно сформулировать?) таких аксиоматизированных неопределенностей просто море. В некоторых серьезных математических теориях действительно расширяют множество "бесконечными элементами", но эти конструкции уже достаточно сложны и используются отнюдь не для того, чтобы "можно было делить на ноль". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2011, 10:29 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
Вы бы все-таки почитали более серьезную математическую литературуВы бы все-таки посмотрели на дату топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2011, 11:47 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
LSVВы бы все-таки посмотрели на дату топика. На дату я действительно не посмотрел - из-за глюка форума сообщение было помечено у меня как новое. Соответственно к нему я ответ и написал. Ну а когда дату увидел - удалить сообщение было уже нельзя, а модераторы этого делать, видимо, не будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2011, 13:34 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
Ну, учитывая, что модераторы таки удалили сообщение, которое подняло топик (и пометило его новым для Андрея) может и удалят. Или продолжим сраконструктивную дискуссию? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2011, 14:07 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyЛокшин МаркСправедливости ради нужно отметить, что деление на 0 на расширенном множестве действительных чисел определяют и как неопределенность для любого числа в числителе.Вы бы все-таки почитали более серьезную математическую литературу, прежде чем вот так просто начинать на ноль делить. Ну или хотя бы в википедию сходили. В кратце можно сформулировать так - для того, чтобы избежать неопределенности с делением на ноль вы безумно усложнили всю аксиоматику. До этого аксиоматизирована было всего одина неопределенность. А в вашем же расширенном множестве (кстати а не потрудитесь ли полноценно сформулировать?) таких аксиоматизированных неопределенностей просто море. В некоторых серьезных математических теориях действительно расширяют множество "бесконечными элементами", но эти конструкции уже достаточно сложны и используются отнюдь не для того, чтобы "можно было делить на ноль". Да, давно дело было... Вы не поверите, но я в своей жизни достаточно много читал серьезной математической литературы. Вот вам еще ссылка . Наверное несерьезная фирма Wolfram? Кроме тех, которых я давал насчет определений деления в Яве и в сопроцессоре Intel. Ну и здесь наверное идиоты сидят? И множество это расширенное не мое, я на авторство не претендую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2012, 12:02 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
Локшин МаркДа, давно дело было... Но вам таки нетерпится ответить... Локшин МаркВы не поверите, но я в своей жизни достаточно много читал серьезной математической литературы.Действительно - не верю. Локшин МаркИ множество это расширенное не мое, я на авторство не претендую.Ну так все-таки определение "расширенного множества" вы приведете? Мне авторство не важно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2012, 17:06 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyЛокшин МаркВы не поверите, но я в своей жизни достаточно много читал серьезной математической литературы.Действительно - не верю. Локшин МаркИ множество это расширенное не мое, я на авторство не претендую.Ну так все-таки определение "расширенного множества" вы приведете? Мне авторство не важно. Можете и не верить - я никого не заставляю. А ссылку на определение я уже приводил - смотрите например 2 ссылку в моем сообщении на которое отвечали изначально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2012, 17:36 |
|
||
|
Разница между запятой и JOIN
|
|||
|---|---|---|---|
|
#18+
И кстати, если уж хочется подискутировать, то потрудитесь сперва ответить, почему во всех вышеназванных местах результат деления - бесконечность? И кто в Intel и Wolfram не читал серьезную математическую литературу? Значит можно и так и так определять? Или это неверно, потому, что в Демидовиче не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2012, 17:54 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33582264&tid=1541836]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 401ms |

| 0 / 0 |
