Форум: "Базы";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];
ВнизSelect * from - порядок полей Найти похожие ветки
← →
Ega23 © (2008-05-20 12:19) [0]А вот такой вопрос: ежели я делаю Select * from Table, то в каком порядке мне будут возвращены поля?
Т.е. может ли произойти ситуация, что порядок колонок поменялся, а реально изменения в структуру БД не вносились?
← →
Reindeer Moss Eater © (2008-05-20 12:43) [1]а это так важно?
а если структура поменялась, а в датасете статик поля уже есть?
← →
Ega23 © (2008-05-20 13:03) [2]
> а если структура поменялась
Как раз это и проверяю. Просто иначе в проверке лишний цикл получается. А так - чисто по Fields[i].
← →
Reindeer Moss Eater © (2008-05-20 13:09) [3]я про то, что могут быть статик филды от дизайнтайма.
количество имена и типы полей в структуре таблицы не поменялись, поменялись только их порядковые индексы.
Либо наеборот. в физической таблице вообще ничего не менялось, но мышкой потаскали поля в редакторе полей.
лучше всего получать их по именам, а не по индексам.
← →
Ega23 © (2008-05-20 13:12) [4]
> лучше всего получать их по именам, а не по индексам.
Да это понятно. Просто не хочется в описательную структуру имена вносить...
Хотя, щас подумал, без них один фиг не обойтись.
Ладно, вопрос снят.
← →
MsGuns © (2008-05-20 15:25) [5]>Ega23 © (20.05.08 13:12) [4]
>Хотя, щас подумал, без них один фиг не обойтись.
Однако обойтись. Если строить объектную модель БД
← →
Anatoly Podgoretsky © (2008-05-20 15:31) [6]> Ega23 (20.05.2008 12:19:00) [0]
Не надо работать с предположениями, за конструкцию * надо увольнять. Поля должны быть явно перечислены и столько, сколько нужно.
← →
Reindeer Moss Eater © (2008-05-20 15:45) [7]прямо так и увольнять.
99 полей в таблице и 3 поля созданных в редакторе полей в дизайне или явно на рантайме.
кому от этого будет плохо?
← →
MsGuns © (2008-05-20 16:20) [8]>Reindeer Moss Eater © (20.05.08 15:45) [7]
>99 полей в таблице
Вот за это уродство точно стрелять !
← →
Anatoly Podgoretsky © (2008-05-20 16:32) [9]> Reindeer Moss Eater (20.05.2008 15:45:07) [7]
Ну можно и не прямо, это же поговорка. Ну и что, что 99 полей, а кому сейчас легко? Хочешь что бы и серверу было плохо.
Для этого существуют псевдонаучные методы, называются Научная организация труда.
Ну нельзя так писать, звездочку можно использовать в отладке и только, иначе серверу хорошо не будет, звездочка заставляет каждый запрос анализировать с нуля, все планы побоку.
← →
Anatoly Podgoretsky © (2008-05-20 16:33) [10]
> Вот за это уродство точно стрелять !
А я хотел только уволить, вот помните мою доброту.
← →
Ega23 © (2008-05-20 16:36) [11]
> Ну нельзя так писать, звездочку можно использовать в отладке
> и только, иначе серверу хорошо не будет, звездочка заставляет
> каждый запрос анализировать с нуля, все планы побоку.
Мне нужно информацию по филдам получить, а не данные.
Соответственно, запрос будет выглядетьSelect * from Table where 0=1
← →
Ega23 © (2008-05-20 16:38) [12]Т.е. я пустой НД получаю, но со структурой филдов и их типами. А дальше проверяю - так или не так.
← →
Johnmen © (2008-05-20 16:53) [13]Думается, будут идти в том порядке, в котором описаны в системной таблице.
← →
Ega23 © (2008-05-20 16:57) [14]
> Думается, будут идти в том порядке, в котором описаны в
> системной таблице.
В общем, я тоже так думаю. Просто крайне интересно, по какому полю идёт OrderBy ?
← →
Johnmen © (2008-05-20 17:01) [15]
> Ega23 © (20.05.08 16:57) [14]
> Просто крайне интересно, по какому полю идёт OrderBy ?
Какой OrderBy??? :)
← →
Reindeer Moss Eater © (2008-05-20 17:02) [16]>99 полей в таблице
Вот за это уродство точно стрелять !
А что не так?
← →
Reindeer Moss Eater © (2008-05-20 17:03) [17]Кроме того, имелось ввиду совершенно иное, что вы не уловили.
физических полей N, филдов в датасете N.
N < M.
Используется звезда в запросе.
"Ну и чо"?
← →
Reindeer Moss Eater © (2008-05-20 17:09) [18]Мне нужно информацию по филдам получить, а не данные.
Соответственно, запрос будет выглядеть Select * from Table where 0=1
Ой бааалиииин...
select * from table без всяких where
+
FieldDefs.Update
← →
Ega23 © (2008-05-20 17:30) [19]
> Ой бааалиииин...
> select * from table без всяких where
> +
> FieldDefs.Update
Гм... Пока не въехал, но чуть позже поэкспериментирую...
← →
Ega23 © (2008-05-20 17:32) [20]
> Какой OrderBy??? :)
Такой. Описатели филдов в системной таблице хранятся? Хранятся. При составлении плана запроса оттуда выбираются? Выбираются. SQL при этом используется? А вот Х его З. Но если SQL - то Order By должОн быть.
← →
Reindeer Moss Eater © (2008-05-20 17:39) [21]Гм... Пока не въехал, но чуть позже поэкспериментирую...
FieldDefs.Update приводит к чтению метаданных с сервера и заполняет массив филддевсов экземплярами филддефов для каждого поля
с именами, типами явками и паролями.
данные при этом не фетчатся.
← →
Ega23 © (2008-05-20 17:51) [22]
> FieldDefs.Update приводит к чтению метаданных с сервера
> и заполняет массив филддевсов экземплярами филддефов для
> каждого поля
> с именами, типами явками и паролями.
> данные при этом не фетчатся.
Ну, чай не совсем дурак, справку читать умею, да и в код слазил. :)
← →
MsGuns © (2008-05-20 18:28) [23]>Reindeer Moss Eater © (20.05.08 17:02) [16]
>А что не так?
Все !
Представьте себе водительские права, в которых кроме ФИО, фотки и т.д., находится еще подробная биография, пионерские грамоты за учебу в школе, аттестат зрелости, медкарты с флюорокарточками, характеристики со всех мест, где работал и т.д.
Когда мне рассказывают о таблицах на 255 полей, я так и представляю себе веселую картинку, когда на требования гаишника предъявить права, водитель вытаскивает из багажника пару-тройку чемоданов с "данными".
Сколько работаю с базами, подобвых монстеров видел всего несколько раз и все они так или иначе родились от "гениальных" озарений их разработчиков запихивать ОДНОТИПНЫЕ данные в РАЗНЫЕ поля таблицы. Как пример, весьма часто встречающееся уродство из студпроектов, в которых все предметы, по которым есть оценки, запихиваются в одну запись с полями "Техмех", "Вышка", "Функанализ" и т.д. Ессно, для каждого курса (факультета, потока) свои "таблицы".
Вот учителей, которые учат ТАК делать, я б и поубивал. Насмерть !
И, наконец, одна аксиома - любой сервер прежде всего "точится" на оптимизацию поиска среди множества ЗАПИСЕЙ, но не ПОЛЕЙ !
← →
MsGuns © (2008-05-20 18:30) [24]>Ega23 © (20.05.08 17:32) [20]
>Описатели филдов в системной таблице хранятся? Хранятся. При >составлении плана запроса оттуда выбираются? Выбираются. SQL при этом >используется? А вот Х его З. Но если SQL - то Order By должОн быть.
Хранятся в той последовательности, в которой они были перечислены в соответствующем Create Table.
Странно, правда ?
← →
Reindeer Moss Eater © (2008-05-20 18:37) [25]У вас кругозор просто узок, если сложно представить сущность имеющую 99 атрибутов.
PS как я уже сказал, 99 - просто число взятое с потолка. В моих таблицах нет такого количества полей.
А суть поста, которую вы до сих пор не догнали, была в том, что статик филдов может быть три, в то время как физических полей таблицы будет триста три. И будет звезда в селекте и никому кроме вас печали от этого не будет.
фетча на клиента трехсот трех полей не состоится.
← →
MsGuns © (2008-05-20 18:43) [26]>Reindeer Moss Eater © (20.05.08 18:37) [25]
>У вас кругозор просто узок, если сложно представить сущность имеющую >99 атрибутов.
Дадад, я вот уже три десятка лет только телефонные справочники проектирую.
>А суть поста, которую вы до сих пор не догнали, была в том, что статик филдов может быть три, в то время как физических полей таблицы будет триста три. И будет звезда в селекте и никому кроме вас печали от этого не будет.
Более того, я вообще не догоняю, что такое "статик" поля. Это те, которые автоматически создаются при открытии в делфях например TTable и которые затем отображаются в окне редакторов полей ? Так я открою страшную тайну - у меня практически не бывает "статик" полей в твоем понимании (а если и есть, то это не поля таблицы, а поля возвращамого ХП или вьюхи датасета - надеюсь, ты в состоянии "догнать" между ними разницу ?)
Что касается самого "криминала", т.е. "политкорректности" использования конструкции Select *, то однозначного ответа быть не может, хотя в целом я бы скорее поддержал Анатолия, чем возражал бы ему.
← →
Reindeer Moss Eater © (2008-05-20 18:45) [27]Более того, я вообще не догоняю, что такое "статик" поля.
Тогда может погодить с тем чтобы спорить с пеной у рта и стрелять инакомыслящих?
Пока не прояснится что такое статик поля в датасете.
← →
Reindeer Moss Eater © (2008-05-20 18:48) [28]Пример с паспортом и правами содержащими грамоты из пионерлагеря за первое место на стометровке - это в детский сад такие примеры.
Я говорю про сущности имеюшие атрибуты зависящие только от PK.
И нигде не сказано, что если мсганс не видел их больше двадцати, то их и нет на самом деле и в принципе не может быть.
← →
sniknik © (2008-05-20 18:51) [29]> Т.е. я пустой НД получаю, но со структурой филдов и их типами. А дальше проверяю - так или не так.
правильнее информацию о структуре получать через OpenSchema.
← →
MsGuns © (2008-05-20 19:00) [30]>Reindeer Moss Eater © (20.05.08 18:48) [28]
>Я говорю про сущности имеюшие атрибуты зависящие только от PK.
Глупости ! Ты говоришь не о сущностях, а о ПРЕДСТАВЛЕНИИ СУЩНОСТЕЙ в клиентском приложении. А это вовсе не одно и то же.
>И нигде не сказано, что если мсганс не видел их больше двадцати, то их и >нет на самом деле и в принципе не может быть.
Ты, конечно, можешь всю информацию об предмете автоматизации запихнуть в одну таблицу с 10000 полями. Трудно, но можно. Ветер, как говорится, вдогонку.
← →
Reindeer Moss Eater © (2008-05-20 19:13) [31]Да неважно о чем я говорю и как это называется на самом деле.
Могут быть атрибюты и их может быть 99.
Могут быть другие случаи.
Те же грамоты из садика.
Если их много и они не участвуют в реляционных отношениях, то мудрый гудвин обязательно смастерит отдельную таблицу для "грамот из садика" во имя нормализации.
А действительно опытный разработчик вполне может хранить все их скопом в одном поле в той же таблице что и самого пионера.
первый во имя нормализации ничего кроме усложнения обработки данных и лишних запросов не получит (плюс тормозов с этим связанных)
Второй ничего не потеряет.
впрочем мы отвлеклись.
конституция не ограничевает количество атрибутов у сущности и количество полей в таблице тоже.
← →
Reindeer Moss Eater © (2008-05-20 19:18) [32]Ты, конечно, можешь всю информацию об предмете автоматизации запихнуть в одну таблицу с 10000 полями. Трудно, но можно. Ветер, как говорится, вдогонку.
У кого такие психологические трудности с 10000 полями?
У меня их нет.
Так же как и с десятью таблицами по тысяче полей или сотней таблиц с сотней полей.
← →
MsGuns © (2008-05-20 19:20) [33]>А действительно опытный разработчик вполне может хранить все их скопом >в одном поле в той же таблице что и самого пионера.
Реально "грамотный" разработчик так делать в большинстве случаев не будет. Ибо знает, к чему это приведет.
← →
Reindeer Moss Eater © (2008-05-20 19:20) [34]И к чему же это приведет?
← →
MsGuns © (2008-05-20 19:24) [35]Напрмер, к потере 1-й степени нормализации - атомарности.
Хватит ?
← →
Reindeer Moss Eater © (2008-05-20 20:29) [36]И кому от этого худо?
Серверу, которого никто не будет лишний раз насиловать дополнительным запросом?
Разработчику? Который получает все "грамоты садика" одним запросом вместе с самим пионером и не организует циклы на клиенте после получения их списка с сервера?
Никому.
← →
Reindeer Moss Eater © (2008-05-20 20:31) [37]Я уже не говорю про случай, когда по условиям предметной области все эти многочисленные грамоты вообще логически являются атомарными. Все целиком вместе взятые.
← →
MsGuns © (2008-05-20 20:44) [38]"Я не буду с тобою спорить, старый софист" (c) ;)
← →
Anatoly Podgoretsky © (2008-05-20 21:13) [39]> Ega23 (20.05.2008 16:38:12) [12]
А чего ни будь приличное использовать не хочешь, например OpenScheme
← →
Anatoly Podgoretsky © (2008-05-20 21:20) [40]> Ega23 (20.05.2008 17:32:20) [20]
Не обязан, если мне порядок не важен, то зачем мне заставлять делать сервер лишнею работу.
← →
Anatoly Podgoretsky © (2008-05-20 21:21) [41]> MsGuns (20.05.2008 18:30:24) [24]
Я бы не стал на это закладываться, это сугубо внутреннее дело сервера, как хранить и как выдавать, если ему это явно не сказано.
← →
MsGuns © (2008-05-20 21:37) [42]>Anatoly Podgoretsky © (20.05.08 21:21) [41]
Анатолий, ни я, ни 99% пользователей скл-серверов не скажут, ГДЕ именно он хранит описания полей, да и вообще все свои метаданные. Да и не надо нам это. Известно лишь, что в системных таблицах. А вот как (в каком порядке) он их ПРЕДСТАВЛЯЕТ по требованию клиента (в частности по указанному сникником запросу) - это уже мы могем и проверить ;)
← →
Anatoly Podgoretsky © (2008-05-20 22:44) [43]> MsGuns (20.05.2008 21:37:42) [42]
Можем, ну и что?
Напомнить точно такие же речи, про значение переменной цикла по его окончания, тоже проверяли.
Это внутреннее дело сервера и совсем не обязательно, что другая редакция сервера будет работать точно также.
← →
Ega23 © (2008-05-21 10:16) [44]
> А чего ни будь приличное использовать не хочешь, например
> OpenScheme
Может и хочу. Я пока ещё не определился. Эта работа следующим этапом будет, я сейчас "почву зондирую"...
← →
Anatoly Podgoretsky © (2008-05-21 10:25) [45]> Ega23 (21.05.2008 10:16:44) [44]
Вопрос не полностью освещен, но OpenScheme это минимальный деноминатор (костыль в АДО), а правильно использовать INFORMATION_SCHEME - это и по стандарту и не зависит от технологий, и возможности пошире. Это полные метаданные по всей базе и работать с ними просто, без отличия от обычной работы, просто SELECT
← →
ANB (2008-05-21 11:37) [46]Насчет использования * и расстрела.
declare
R_Table1 Table1%rowtype;
begin
select * into R_Table1 from Table1 where ID = p_ID;
...
Дальнейшее использование записи из таблицы Table1
...
end;
Разве тут * - не самое уместное решение ?
← →
Игорь Шевченко © (2008-05-21 13:01) [47]
> Разве тут * - не самое уместное решение ?
дурное дело нехитрое
← →
ANB (2008-05-21 14:31) [48]
> дурное дело нехитрое
Предложи недурной вариант.
← →
Игорь Шевченко © (2008-05-21 22:26) [49]ANB (21.05.08 14:31) [48]
>
> Предложи недурной вариант.
Не могу - не знаю задачи.
Видел много разных вариантов, когда для того, чтобы достать значение одного поля, объявляли конструкцию [46], при этом вместо таблицы использовалось view с соединением 6 таблиц. Разработчик поступил, "как ему проще" - есть готовое view, значит его надо использовать. А то, что выполняться это будет на порядок дольше - ну и фиг с ним.
Я всегда, видя select * практически в любой интерпретации, будь то в серверной части, будь то в клиентской, хватаюсь за пистолет.
← →
palva © (2008-05-21 23:39) [50]
> А я хотел только уволить, вот помните мою доброту.
Это не доброта, это попытка нанести ущерб конкурирующей фирме.
← →
Petr V. Abramov © (2008-05-22 00:29) [51]
> Игорь Шевченко © (21.05.08 22:26) [49]
> хватаюсь за пистолет.
спили мушку :)))
в ситуации, когда 99 полей, и из них нужно 98, самое оно.
но такое бывает редко.
так что в принципе согласен.
но все же мушку в данном вопросе на всякий случай лучше спилить :)))
← →
Германн © (2008-05-22 01:07) [52]
> Игорь Шевченко © (21.05.08 22:26) [49]
> хватаюсь за пистолет.
Хм. Игорь, это высказывание дурно попахивает некоей цитатой периода второй половины 30-х годов прошлого века!
:)
← →
Anatoly Podgoretsky © (2008-05-22 07:43) [53]> Petr V. Abramov (22.05.2008 00:29:51) [51]
Это просто оправдание лени.
← →
ANB (2008-05-22 11:50) [54]
> Игорь Шевченко © (21.05.08 22:26) [49]
Даже если надо достать только 20 полей записи, такое написание уже сильно сокращает код - нужна только одна переменная.
При этом частенько заранее неизвестно, сколько точно полей тебе понадобится.
Писать правильно - значит писать быстро и наоборот.
> при этом вместо таблицы использовалось view с соединением
> 6 таблиц
Ты же сам ратовал за использование вьюх и FGA
← →
ANB (2008-05-22 11:51) [55]
> Это просто оправдание лени.
Хороший программист - ленивый программист. :)
← →
Ega23 © (2008-05-22 12:19) [56]Тут вот какое дело: как говорил выше, делаю проверку структуры БД на соответствие релизу.
Соответственно, может сложиться такая ситуация, что в предыдущем релизе в таблице было 10 полей, а в новом - 8 (2 поля тупо были удалены). Если я буду проверять наличие конкретных 8 полей, то всё сработает "на ура" - эти поля есть, типы данных совпадают и т.п.
А вот если Select * from, то тогда я ещё и "лишние" поля получу (и буду знать, что их надо грохнуть).
Это как пример
З.Ы. Я прекрасно понимаю, что "можно все сделать по-другому". Например задать в условиях проверки удаленные столбцы с предыдущего релиза. Или через схему.
Я тупо пример привёл.
← →
Игорь Шевченко © (2008-05-22 12:24) [57]ANB (22.05.08 11:50) [54]
> Даже если надо достать только 20 полей записи, такое написание
> уже сильно сокращает код
Ну я же говорю - рука тянется к пистолету. Сокращение кода не есть самоцель.
> Писать правильно - значит писать быстро и наоборот.
Почему я работаю и моя работа оценивается - потому что остальные в нашей области "пишут быстро".
> Ты же сам ратовал за использование вьюх и FGA
"Всякий овощ приносит пользу, будучи употреблен надлежащим образом в надлежащее время".
В первую очередь я ратую за неизобретение велосипедов с четырьмя квадратным колесами - они, если и едут, то очень медленно, и сидеть на них во время езды больно.
← →
Игорь Шевченко © (2008-05-22 12:26) [58]Ega23 © (22.05.08 12:19) [56]
> Тут вот какое дело: как говорил выше, делаю проверку структуры
> БД на соответствие релизу.
Версию структуры базы данных хранить и проверять религия не позволяет ?
← →
Ega23 © (2008-05-22 12:29) [59]
> Версию структуры базы данных хранить и проверять религия
> не позволяет ?
Позволяет, это первое было, что я предложил. Но вот начальство говорит, что этого недостаточно (и, в общем-то, аргументировано говорит).
← →
ANB (2008-05-22 12:45) [60]
> Но вот начальство говорит, что этого недостаточно (и, в
> общем-то, аргументировано говорит).
Правильно говорит. Но :
В любом случае намного надежнее прогулятся по словарю. Все достаточно тривиально как в оракле, так и в мс скл. Одна проблема - где хранить эталлонную структуру. Но это уже рабочий вопрос.
← →
Игорь Шевченко © (2008-05-22 13:05) [61]Ega23 © (22.05.08 12:29) [59]
А какие аргументы приводит начальство ? А то мы как-то справляемся версией, хотя изменения в структуре тоже наличествуют...
← →
ANB (2008-05-22 14:42) [62]
> А то мы как-то справляемся версией, хотя изменения в структуре
> тоже наличествуют...
На одной моей работе я писал систему тестирования. Так вот одним из требований было проверять качество инсталляции версии.
Согласовали, что если структура данных и обязательные строки в справочниках совпадают с эталлоном, то все Ок. И таки раз в месяц эта штука ошибки инсталлятора для апгрейда версии ловила. То констрейнт забудут, то индекс, то поле. То назовут немного не так. И при этом у клиента и у базы проверялась версия. Кажный раз при старте.
← →
Игорь Шевченко © (2008-05-22 14:59) [63]ANB (22.05.08 14:42) [62]
"Кривое не может сделаться прямым". (Еккл. 1, 16)
Встраивать механизм ловли огрехов разработчика на площадке заказчика - это слишком, гораздо проще организовать тестирование у разработчика, а у заказчика нехай программа падает с фейреверком максимальной яркости, разработчику проще будет понять причину.
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.006 c