Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Hi All ! Есть следующая иерархия из трех справочников - ГруппыТМЦ->ПодгруппыТМЦ->ТМЦ. Структура справочников, в кратце, следующая : ГруппыТМЦ - № группы XX, наим.группы, где XX - 1-99 ПодгруппыТМЦ - № подгруппы XXYY, наим.группы, где XX - № группы, YY - 1-99 ТМЦ - № ТМЦ XXYYZZZZ, наим.ТМЦ, где XXYY - № подгруппы, ZZZZ - 1-9999 т.е. структура справочников такова что по номеру подгруппы можно сказать к какой группе он принадлежит, а по номеру ТМЦ можно сказать его погруппу и группу. Номера групп, подгрупп и ТМЦ единажды присвоенные не изменяются и не удаляются если они хоть раз были задействованы в документах движения ТМЦ и не повторяются т.е. для своих таблиц они являются уникальными по сути являясь ЕК. Вопрос - имеет ли в данной ситуации смысл введение полей ID для сурогатных ключей для организации взаимосвязи таблиц или же сделать связь по естественным ключам ? На данных момент такая структура уже работает, но реализована в DBF и поддерживается средствами клиентского приложения, связи основаны на ЕК. ps. Cтатьи на тему ЕК vs СК читал, но для себя решение пока принять не смог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2005, 20:44 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Была статья "естественный ключи против суррогатных" на сайте ibase.ru Все это постоянство и неизменность существующих на данный момент ключей весьма условна. Все меняется. И может так оказаться, что эти ключи придется "переколбашивать". Так что ИМХО: суррогатные ключи! (ну хотя бы на всяк случай) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 06:43 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Можно много спорить (и так и не прийти к единому мнению), какие ключи выбрать для таблиц-сущностей. Но вот делать отдельный суррогатный ключ для чисто связующих таблиц -- не следует, т.к. ничего не дает. Всё равно придется делать уникальный индекс по всей комбинации полей, индесы по внешним ключам; и еще плодить отдельный бессмысленный ключ -- ради чего? Если вдруг придется поменять стркутуру связи -- изменение таблицы будет настолько всеобъемлющим, что сохранение отдельного ключа не даст никаких удобств. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 09:08 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
HoholГруппыТМЦ - № группы XX, наим.группы, где XX - 1-99 А вдруг групп окажется 100? HoholНа данных момент такая структура уже работает, но реализована в DBF и поддерживается средствами клиентского приложения, связи основаны на ЕК. А можно на твоем серваке организовать форинкеи по подстроке? Я за суррогатные ключи в 99% случаев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 09:15 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Серега HoholГруппыТМЦ - № группы XX, наим.группы, где XX - 1-99 А вдруг групп окажется 100? Вряд ли. Это потребует перекройки всей системы складского учета. Во всяком случае уже около 10 лет на это никто и не думает покушаться. Серега HoholНа данных момент такая структура уже работает, но реализована в DBF и поддерживается средствами клиентского приложения, связи основаны на ЕК. А можно на твоем серваке организовать форинкеи по подстроке? Забыл сказать - коды групп, подгрупп, тмц - числовые значения, потому по подстроке не выйдет. СерегаЯ за суррогатные ключи в 99% случаев. Если бы ключ состоял из 3-5 полей - я бы и не задумывался наверное, а тут одно ключевое поля и если вводить сурогатный ключ то это по сути дублирование. Отсюда и сомнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 11:27 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
HoholЗабыл сказать - коды групп, подгрупп, тмц - числовые значения, потому по подстроке не выйдет. Так 12345678 - это 3 поля или одно? Если одно и числовое, то можно ли по 12 сделать внешний ключ? Я что-то сомневаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 11:39 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
СерегаТак 12345678 - это 3 поля или одно? Если одно и числовое, то можно ли по 12 сделать внешний ключ? Я что-то сомневаюсь. это одно поле. но его алгоритм формирования такой что можно по коду ТМЦ определить код группы и код подгруппы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 14:33 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Hohol СерегаТак 12345678 - это 3 поля или одно? Если одно и числовое, то можно ли по 12 сделать внешний ключ? Я что-то сомневаюсь. это одно поле. но его алгоритм формирования такой что можно по коду ТМЦ определить код группы и код подгруппы Такой ключ - очень удачное решение. Иерархию можно представлять двумя способами: 1. Ссылкой на "родителя" 2. Диапазонами (диапазон "ребенка" - является поддиапазоном "родителя"). Ваше решения совмещает достоинства обоих методов: номер "ребенка" указывает на "родителя" и сам может задавать диапазон для своих "детей". В отличие от "чистого" первого способа можно выбирать "детей" одним запросом без рекурсии и сортировать по принадлежности своему "родителю". Иногда это очень облегчает жизнь и разработчикам и пользователям. Кстати, дополнительные таблицы (классы, подклассы, группы, подгруппы и т.д.) в общем случае не нужны и могут храниться в общей иерархии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 14:52 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Hoholэто одно поле. но его алгоритм формирования такой что можно по коду ТМЦ определить код группы и код подгруппы Ну тогда не ясно, как сделать, что бы в 12345678 12 (десятки миллионов и миллионы) были внешним ключом на группу. Чисто технически непонятно. Или целостность опять таки в приложении поддерживать? Или как написать запрос на выборку всех товаров с 12 по 44 группы без учета 34,35 и 47-80 подгрупп? Может и можно конечно, но уж больно извратно ИМХО получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 15:38 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Серега Hoholэто одно поле. но его алгоритм формирования такой что можно по коду ТМЦ определить код группы и код подгруппы Ну тогда не ясно, как сделать, что бы в 12345678 12 (десятки миллионов и миллионы) были внешним ключом на группу. Чисто технически непонятно. Или целостность опять таки в приложении поддерживать? Или как написать запрос на выборку всех товаров с 12 по 44 группы без учета 34,35 и 47-80 подгрупп? Может и можно конечно, но уж больно извратно ИМХО получится. Чтобы поддерживать такую иерархию нужно в таблицу подгрупп внести ссылку на таблицу группы, а в таблицу ТМЦ внести ссылку на подгруппы. Но здесь возникает вопрос - делать это через ЕК или через СК. В случае связей по ЕК таблицы будут иметь такой вид: ГрТМЦ - НомГр, НаимГр ПодгрТМЦ - НомГр, НомПодгр, НаимПодгр ТМЦ - НомПодгр, НомТМЦ, НаимТМЦ В случае с СК таблицы будут иметь такой вид: ГрТМЦ - ИДГр, НомГр, НаимГр ПодгрТМЦ - ИДГр, ИДПодгр, НомПодгр, НаимПодгр ТМЦ - ИДПодгр, ИДТМЦ, НомТМЦ, НаимТМЦ т.е. вариант с СК допускает, что, например, НомТМЦ будет логически показывать на одну группу и подгруппу ТМЦ, а ИДПодгр при этом может быть совершенно другой т.е. условие иерархии нарушается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 16:45 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Тип-ТопТакой ключ - очень удачное решение. Можно уточнить "Такой ключ" - это какой ? Тип-ТопИерархию можно представлять двумя способами: 1. Ссылкой на "родителя" 2. Диапазонами (диапазон "ребенка" - является поддиапазоном "родителя"). А как в данном случае можно задать диапазон, где он должен быть задан ? Тип-ТопВаше решения совмещает достоинства обоих методов: номер "ребенка" указывает на "родителя" и сам может задавать диапазон для своих "детей". В отличие от "чистого" первого способа можно выбирать "детей" одним запросом без рекурсии и сортировать по принадлежности своему "родителю". Иногда это очень облегчает жизнь и разработчикам и пользователям. Кстати, дополнительные таблицы (классы, подклассы, группы, подгруппы и т.д.) в общем случае не нужны и могут храниться в общей иерархии. Т.е. вы предлагаете вообще отказаться от справочников групп и подгрупп ? Тогда и самой иерархии не будет. Или предполагается что записи о группах и подгруппах должны быть в той же таблице что и записи о ТМЦ с указанием уровня и наличия подчиненных записей ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 16:52 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
HoholВ случае связей по ЕК таблицы будут иметь такой вид: ГрТМЦ - НомГр, НаимГр ПодгрТМЦ - НомГр, НомПодгр, НаимПодгр ТМЦ - НомПодгр, НомТМЦ, НаимТМЦ Тогда ничего страшного вроде. Я думал ты хочешь нечто вроде: ГрТМЦ - НомГр, НаимГр ПодгрТМЦ - НомПодгр, НаимПодгр ТМЦ - НомТМЦ, НаимТМЦ И частью числа из НомХ (что и было непонятно - как?) ссылаться на родителя. А тут просто некоторая избыточность и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 17:01 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Hohol Тип-ТопТакой ключ - очень удачное решение. Можно уточнить "Такой ключ" - это какой ? Составной и хранимый в одном поле, по строго фиксированным правилам разбивки на группы, подгруппы, элементы. Hohol Тип-ТопИерархию можно представлять двумя способами: 1. Ссылкой на "родителя" 2. Диапазонами (диапазон "ребенка" - является поддиапазоном "родителя"). А как в данном случае можно задать диапазон, где он должен быть задан ? Здесь: Код: plaintext 1. 2. Hohol Тип-ТопВаше решения совмещает достоинства обоих методов: номер "ребенка" указывает на "родителя" и сам может задавать диапазон для своих "детей". В отличие от "чистого" первого способа можно выбирать "детей" одним запросом без рекурсии и сортировать по принадлежности своему "родителю". Иногда это очень облегчает жизнь и разработчикам и пользователям. Кстати, дополнительные таблицы (классы, подклассы, группы, подгруппы и т.д.) в общем случае не нужны и могут храниться в общей иерархии. Т.е. вы предлагаете вообще отказаться от справочников групп и подгрупп ? Тогда и самой иерархии не будет. Или предполагается что записи о группах и подгруппах должны быть в той же таблице что и записи о ТМЦ с указанием уровня и наличия подчиненных записей ? Иерархия задается в единой таблице (разделение точками сделано для наглядности): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 14:00 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Тип-ТопИерархия задается в единой таблице (разделение точками сделано для наглядности): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Когда я писАл на Клиппере такое было удобно и применялось повсеместно. Ты попробуй SQL-ем с такой "удачной" таблицей поработай. Если даже "разделение точками сделано для наглядности". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 15:05 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
СерегаКогда я писАл на Клиппере такое было удобно и применялось повсеместно. Ты попробуй SQL-ем с такой "удачной" таблицей поработай. Если даже "разделение точками сделано для наглядности". Во времена "Клиппера" (15-20 лет назад) я работал на Oracle 6 на SQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 16:46 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
ООО!!! Великий Клиппер, и ты здесь? У нас щас примерно так организована структура номенклатурного справочника. Все проги на Клиппере. Да может быть для клипперистов это и удобно, но под SQL - это фигота! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 06:03 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
KlickУ нас щас примерно так организована структура номенклатурного справочника. "примерно так" - это с помощью одной таблицы или с помощью нескольких ? KlickДа может быть для клипперистов это и удобно, но под SQL - это фигота! аргументировать можно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 06:41 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Тип-ТопВо времена "Клиппера" (15-20 лет назад) я работал на Oracle 6 на SQL... И что? Удобно SQL-ем пользоваться на такой структуре? Какие плюсы достигаются по сравнению с "обычной" структурой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 09:59 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
аргументировать можно ? точнее даже не под SQL, а вообще даже проблемы начинаются когда человеки ведущие справочники неправильно дают номенклатурный номер пример: записывают Винчестер в группу Хоз.инвентарь )) он проходит по проводкам с этим номеров а потом оказывается не там он сидит а исправить номер НИЗЗЗЯ!!! БОЛЬШОЙ БОЛТ !!! скажете исправить во всех таблицах и все но ведь документы уже отпечатаный и унесены в архив... вообще я пришел к тому что кроме автоинкремнтального уникального ID ничего пока лучше не придумано. а вот этот код типа 00.01.001 можно хранить в отдельном поле, в общем то это некое расширение наименования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 11:37 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
имхо: номенклатурный справочник = дерево (id, parent_id, name) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 11:41 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Серега Тип-ТопВо времена "Клиппера" (15-20 лет назад) я работал на Oracle 6 на SQL... И что? Удобно SQL-ем пользоваться на такой структуре? Какие плюсы достигаются по сравнению с "обычной" структурой? Об этом подробно писал Joe Celko. Можно найти его публикации в Интернет. Например, то в разделе Древовидные и иерархические структуры, хранение объектов были ссылки на его статьи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 11:48 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Тип-ТопОб этом подробно писал Joe Celko. Читал. И что? Хранить информацию закодировано в одном поле лучше (удачнее) чем раскодировано в разных? Почему? Ведь для работы ее придется постоянно раскодировать. Зачем? Какой в этом великий смысл? Я не против кодов вместо безликого ИД в этом случае . Но зачем искусственно соединять эти коды в одно поле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 12:40 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Серега Тип-ТопОб этом подробно писал Joe Celko. Читал. И что? Хранить информацию закодировано в одном поле лучше (удачнее) чем раскодировано в разных? Почему? Ведь для работы ее придется постоянно раскодировать. Зачем? Какой в этом великий смысл? Я не против кодов вместо безликого ИД в этом случае . Но зачем искусственно соединять эти коды в одно поле? Затем, что становится легче получать "детские" и "родительские узлы", так как нет необходимости в рекурсии, которая в SQL не стандартизирована. Как следствие, такое решение является удобным и с точки зрения переноса структуры БД между СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 07:59 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Тип-ТопЗатем, что становится легче получать "детские" и "родительские узлы", так как нет необходимости в рекурсии, которая в SQL не стандартизирована. Может я не понял чего, но в чем облегчение то? Почему вычленение атрибута легче его простого чтения? Тип-ТопКак следствие, такое решение является удобным и с точки зрения переноса структуры БД между СУБД. Во первых непонятно за счет чего, во вторых - перенос на другую СУБД это все равно нетривиальная задача и "упрощение" (возможное, но не явное) на 3% роли, ИМХО, не играет. Да и не частая это задача, слава Аллаху. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 09:47 |
|
||
|
Как грамотно составить структуру таблиц ?
|
|||
|---|---|---|---|
|
#18+
Серега Тип-ТопЗатем, что становится легче получать "детские" и "родительские узлы", так как нет необходимости в рекурсии, которая в SQL не стандартизирована. Может я не понял чего, но в чем облегчение то? Почему вычленение атрибута легче его простого чтения? Речь идет не о легкости получения/вычленения атрибута, а о работе с БД на основе полученных значений. В случае, если используется схема со ссылкой на "родительский" узел, то для получения всех вложенных в данный узел "детских" узлов необходимо для каждого вложенного узла выполнить отдельный запрос. Если же иерархия задается диапазонами, то выполняется только один запрос. Серега Тип-ТопКак следствие, такое решение является удобным и с точки зрения переноса структуры БД между СУБД. Во первых непонятно за счет чего За счет того, что схема не требует нестандартных решений, специфических для каждой СУБД (где-то есть возможность использовать запросы с рекурсией, где-то надо создавать селективные процедуры и т.д.). Серегаво вторых - перенос на другую СУБД это все равно нетривиальная задача и "упрощение" (возможное, но не явное) на 3% роли, ИМХО, не играет. Да и не частая это задача, слава Аллаху. Да, это не частая задача, но весьма трудоемкая. И возможность снизить эту трудоемкость за счет использования стандартных решений преуменьшать все же не стоит. Но на всякий случай я подчеркну, что возможно применение любого из решений, как на диапазонах, так и на ссылках. Априори сказать, что какое-то из решений является лучшим всегда, - нельзя. Но если само устройство иерархического справочника соответствует конкретному решению, то надо иметь весьма серьезные аргументы, чтобы не следовать очевидному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 10:11 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32942695&tid=1546013]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 407ms |

| 0 / 0 |
