|
11.10.2012, 17:54 | #1 |
Участник
|
Добавление полей в существующую таблицу - баг или фича ?
AX 3.0, MS SQL 2005
При добавлении нового поля в существующую таблицу через контекстное меню, в базе данных, вновь созданное поле распологается перед системными полями, а при создании путем перетаскивания расширеного типа, или перечисления, или во время затяжки проэкта, новое поле распологается после системных. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
11.10.2012, 21:49 | #2 |
Модератор
|
Не уверен что понимаю физический смысл выражений "поле распологается до и после", но все же... Ну допустим - и чо ?
__________________
-ТСЯ или -ТЬСЯ ? |
|
11.10.2012, 22:52 | #3 |
Administrator
|
Цитата:
Это влияет на то, что если в двух родственных приложениях (т.е. полученных недавно путем копирования исходного приложения, но в которых после копирования уже были выполнены некоторые модификации, т.о. сделавших их неидентичными) одно и то же поле в таблицу независимо добавлялось разными разработчиками разными способами - то данные между этими двумя таблицами нельзя будет перенести через конструкцию INSERT INTO <table1> SELECT * FROM <table2>. Т.е. * в таблице <table2> выдаст список полей в ином порядке, нежели ожидается в конструкции INSERT INTO для <table1> Другое дело - что это некритично и лечится копированием приложения и административным запрещением параллельного добавления полей в родственные приложения
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1), kair84 (1). |
12.10.2012, 10:04 | #4 |
Участник
|
Действительно, ничего критичного, если обходиться только средствами разработки АХ. Но некоторые "убер-запросы" можно реализовать только через SQL, и при использовании конструкции INSERT INTO <table1> SELECT * FROM <table2>, возникают... - неудобства, не более того. Но конструкция INSERT INTO <table1>[(<Field1>,<Field2>,...)] SELECT [(<Field1>,<Field2>,...)] FROM <table2> устраняет эти неудобства.
Разработка ведется в отдельной копии приложения, а готовый проект импортируется в основное приложение, здесь ОНО и всплыло, мелочь - казалось бы, а не приятно. Основное непонятно - почему поля добавляются разными способами. |
|
12.10.2012, 10:47 | #5 |
Administrator
|
Цитата:
Сообщение от kair84
Действительно, ничего критичного, если обходиться только средствами разработки АХ. Но некоторые "убер-запросы" можно реализовать только через SQL, и при использовании конструкции INSERT INTO <table1> SELECT * FROM <table2>, возникают... - неудобства, не более того. Но конструкция INSERT INTO <table1>[(<Field1>,<Field2>,...)] SELECT [(<Field1>,<Field2>,...)] FROM <table2> устраняет эти неудобства.
Вести разработку не только в АХ чревато
А самое главное - в ряде случаев код в БД может быть заменен на код Х++ без заметной потери производительности путем изменения архитектуры данных, алгоритма обработки или постановки задачи. Тут конечно мне тяжело говорить за все случаи, потому что далеко не всегда есть возможность переделки механизма "с нуля". Но тем не менее, при разработке нового кода - имеет смысл лишний раз задуматься об этом. В частности, на моей практике я встречал случаи реализации тех или иных алгоритмов путем выборки данных, перелива результата выборки во временную таблицу, затем их обработки, еще нескольких раз перелива и т.д. Такой подход как раз и требует конструкции INSERT INTO на больших объемах данных. Но при достаточно тщательном продумывании архитектуры алгоритма "с нуля"- этих переливов часто получалось избегать (или они не были столь объемными). Что повышало производительность системы. Впрочем это все лирика, а к исходному вопросу отношения не имеет. Мое мнение - что об порядке полей в таблице просто никто не задумывался при реализации ядра.
__________________
Возможно сделать все. Вопрос времени |
|
12.10.2012, 10:51 | #6 |
Участник
|
Где-то проскакивала информация о том, что аксапта для увеличения производительности добавлении поля в таблицу вместо использования ALTER TABLE может пересоздавать всю таблицу целиком. Ключевое слово - может, т.е. может пересоздавать таблицу а может и не пересоздавать. Возможно именно с этим связан различный порядок следования полей?
|
|
12.10.2012, 11:23 | #7 |
Administrator
|
Не думаю. Тогда бы терялись данные, либо было бы заметно долгое добавление поля (представьте себе время на "переливку" InventTrans на нормальном объеме данных), которое и так встречается при изменении индекса (время на создание индекса на больших объемах данных - очень не маленькое)
__________________
Возможно сделать все. Вопрос времени |
|