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

Вниз

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

Наверх




Память: 0.65 MB
Время: 0.016 c
15-1223847550
KilkennyCat
2008-10-13 01:39
2008.12.14
Петербург, программисты и еда


2-1225881533
J.S.
2008-11-05 13:38
2008.12.14
упорядочить строки массива


2-1225974414
demon
2008-11-06 15:26
2008.12.14
Проблемы с отловом события WM_MBUTTONUP


15-1223232390
Алексин
2008-10-05 22:46
2008.12.14
Что это за музыка?


1-1203994220
Anton
2008-02-26 05:50
2008.12.14
Пропадает курсор при вводе