powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Целостность данных
25 сообщений из 75, страница 1 из 3
Целостность данных
    #40054454
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 3 таблицы
tprcs - процессы и их описание
MAIN1 - структура изделия, дерево
spztmp - описывает какой процесс назначен для выполнения на эту деталь на этом изделии
уникальный номер детали - codever
Есть ли возможность какими-нибудь ключами, индексами или еще как обеспечить чтобы при занесении в spztmp записи о назначении процесса значения codever в MAIN1 и tprcs были одинаковыми?
Пока все решается проверкой через код, но может быть можно и по другому?
PS - очень прошу, не надо вопросов зачем мне это надо и почему все организовано так а не иначе
...
Рейтинг: 0 / 0
Целостность данных
    #40054464
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
Есть ли возможность какими-нибудь ключами, индексами или еще как обеспечить чтобы при занесении в spztmp записи о назначении процесса значения codever в MAIN1 и tprcs были одинаковыми?
да. Пробуй поработать с ограничениями (CHECK CONSTRAINT ).
...
Рейтинг: 0 / 0
Целостность данных
    #40054505
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
Есть ли возможность какими-нибудь ключами, индексами или еще как обеспечить чтобы при занесении в spztmp записи о назначении процесса значения codever в MAIN1 и tprcs были одинаковыми?


Работает, - пусть себе работает...
А чем напрягает, что не устраивает ?
Вроде всё прозрачно:
- При добавлении записи spztmp, по идее соответствующие записи в MAIN1 и tprcs уже есть
- Остается взять значение codever из ведущей таблицы и записать не глядя в ведомую...
- Если codever берется из вне или рожается в момент записи в spztmp, то писать его в обе таблицы (MAIN1 и tprcs)...
Исходя из данной схемы, в spztmp нельзя добавить запись если нет соответствия в tprcs, по этому в дальнейшем при добавлении в MAIN1, codever нужно брать из tprcs...
Но если codever формируется в момент создания MAIN1, то его нужно писать и в соответствующий tprcs...

Тут алгоритм по формированию codever на 100 % зависит от схемы БД...
Кстати, Левая связь не очень айс (грабельки), возможно она обусловлена общим процессом (например записи в MAIN1 пишутся когда-нибудь потом или вообще никогда)...
Но, Если есть документы содержащие все три таблицы, они могут быть косячными при удалениях в tprcs или МAIN1, страшного ничего нет, просто нужно иметь это ввиду...

Я к чему? Топик называется Целостность данных...
...
Рейтинг: 0 / 0
Целостность данных
    #40054553
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag

Тут алгоритм по формированию codever на 100 % зависит от схемы БД...
и если БД в начальной стадии разработки думайте и переделывайте структуру,если близко к концу и дальнейшей доработки не планируется-и так пойдет, если иначе-получите гемор избавиться от которого,в дальнейшем будет намного сложнее,чем сейчас
Это все то же к тому что топик называется "целостность данных" а левая связь без неё,что может привести к ошибкам и появлению "бесхозных" записей
...
Рейтинг: 0 / 0
Целостность данных
    #40054566
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
да. Пробуй поработать с ограничениями (CHECK CONSTRAINT ).

Спасибо.... буду пробовать, но пока совсем не понимаю как....
...
Рейтинг: 0 / 0
Целостность данных
    #40054714
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
Спасибо.... буду пробовать, но пока совсем не понимаю как....

Serg197311
Есть ли возможность какими-нибудь ключами, индексами или еще как обеспечить чтобы при занесении в spztmp записи о назначении процесса значения codever в MAIN1 и tprcs были одинаковыми?


Выкинь нахрен codever из MAIN1 и tprcs и вставь его в одном экземпляре в spztmp раз оно одинаково...
Это просто очевидно...
...
Рейтинг: 0 / 0
Целостность данных
    #40054717
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
Спасибо.... буду пробовать, но пока совсем не понимаю как....

Попробуйте для начала дать нормальные и понятливые названия таблицам и полям.
...
Рейтинг: 0 / 0
Целостность данных
    #40054766
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan
Serg197311
Спасибо.... буду пробовать, но пока совсем не понимаю как....

Попробуйте для начала дать нормальные и понятливые названия таблицам и полям.

После каждого этапа разработки я документирую все наименования полей, таблиц, их назначения и тд(модули-функции переменные в функциях). Мне обозначения понятны, в документации описаны, не вижу ни малейшей необходимости что-то менять.
...
Рейтинг: 0 / 0
Целостность данных
    #40054767
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag

Выкинь нахрен codever из MAIN1 и tprcs и вставь его в одном экземпляре в spztmp раз оно одинаково...
Это просто очевидно...

Это неочевидно. Более того - невозможно. И не относится к теме данного топика уж точно. Буду очень благодарен, если кто-нибудь поможет вместо обсуждения структуры составить инструкцию ALTER TABLE ADD CONSTRAINT...
...
Рейтинг: 0 / 0
Целостность данных
    #40054770
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
Мне обозначения понятны, в документации описаны, не вижу ни малейшей необходимости что-то менять.

хотя СОСТАВ ИЗДЕЛИЯ моя основная задача - у меня не возникло желания сопоставлять ваши обозначения со своими, что-бы понять суть вопроса
...
Рейтинг: 0 / 0
Целостность данных
    #40054776
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
Есть ли возможность какими-нибудь ключами, индексами или еще как обеспечить чтобы при занесении в spztmp записи о назначении процесса значения codever в MAIN1 и tprcs были одинаковыми?
Первое, очевидное, решение - создание уникального индекса (code, codever) и связывание таблиц именно по этому выражению, а не просто по (code).

Второе, требующее анализа и изменения структуры - заново провести анализ. Если появилось требование безуслов6ного соответствия - значит, codever является атрибутом либо сущности из tprcs, либо сущности из MAIN1, и должно присутствовать только там, а для сущности другой таблицы оно должно получаться по связи.
...
Рейтинг: 0 / 0
Целостность данных
    #40054777
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to ПЕНСИОНЕРКА - Хорошо
Таблица MAIN1
Code
OWN код узла и его вышестоящий код - для создания дерева изделия
sernn - уникальный код главного изделия(главной сборки)
codever - уникальный код детали
qt - количество деталей в узле
остальные поля ИМХО несущественны для решаемой задачи

Таблица tprcs
CODE - уникальный код процесса
CODEVER - уникальный номер детали, для которой создан процесс
Остальное - несущественно

Таблица spztmp
CODE - уникальный код записи, в дальнейшем нигде не используется, подумываю удалить
CODM1 - CODE из таблицы MAIN1
cdtp - код назначенного к выполнению для этой детали именно в этой позиции общего дерева изделия процесса
остальное несущественно

Процессов (CODE из tprcs) может быть несколько для одной и той же детали(codever)
На деталь из сборки(code из MAIN1) процесс может быть не назначен, назначен один или назначено несколько процессов

Цель вопроса - предотвратить назначение процессов, разработанных для другой детали.
Как я уже писал - программно через запросы и код я это отслеживаю, но хотелось бы использовать возможности SQL и заодно научиться новому....
...
Рейтинг: 0 / 0
Целостность данных
    #40054780
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Первое, очевидное, решение - создание уникального индекса (code, codever) и связывание таблиц именно по этому выражению, а не просто по (code)..


На той схеме, что вначале видно, что связь именно по ключевым полям

Akina
codever является атрибутом либо сущности из tprcs, либо сущности из MAIN1, и должно присутствовать только там, а для сущности другой таблицы оно должно получаться по связи.

На той схеме, что сверху я не показал много таблиц, и в честности таблицу VERS с ключевым уникальным полем CODE (codever во всех остальных таблицах), по которому и осуществляется связь с ними
Надеюсь, что из поста выше станет понятно, почему codever присутствует и в табл MAIN1 и и в TPRCS.
...
Рейтинг: 0 / 0
Целостность данных
    #40054781
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
а левая связь без неё,что может привести к ошибкам и появлению "бесхозных" записей

Картинка эту я нарисовал для этой темы и пропустил при рисовании , в реальности там правильная связь, такая же как и правая
...
Рейтинг: 0 / 0
Целостность данных
    #40054792
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
После каждого этапа разработки я документирую все наименования полей, таблиц, их назначения и тд(модули-функции переменные в функциях).
Мне обозначения понятны, в документации описаны, не вижу ни малейшей необходимости что-то менять.

А если кто то будет поддерживать проэкт после Вас ? Месяц сидеть и разбираться с документацией ?
Железная логика , даже нет аргументов.
...
Рейтинг: 0 / 0
Целостность данных
    #40054797
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan

Железная логика , даже нет аргументов.

Мы что сейчас обсуждаем? Спасибо за информацию, но я был бы вам значительно более благодарен, если бы вы помогли реально, а не переводили тему непонятно куда и непонятно зачем.
...
Рейтинг: 0 / 0
Целостность данных
    #40054802
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
если бы вы помогли реально,

I am sorry , но лично я не собираюсь копаться в Ваших дебрях и иероглифах . Если Вам советуют изменить не только названия , но и структуру базы данных . Все советы Вы игнорируете .
Google Вам в помощь . !!!
...
Рейтинг: 0 / 0
Целостность данных
    #40054812
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMan
I am sorry , но лично я не собираюсь копаться в Ваших дебрях и иероглифах .

Darkman, Я задал простой в общем вопрос, точно описал какие поля, где что и как. Не надо тут копаться нигде, не надо обсуждать названия полей, не надо обсуждать структуру базы - вопрос касается только 3-х таблиц.
ЗЫ если не знаете, как помочь реально, то и правда, лучше здесь не писать, не оффтопить.
...
Рейтинг: 0 / 0
Целостность данных
    #40054868
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
Картинка эту я нарисовал для этой темы и пропустил при рисовании , в реальности там правильная связь, такая же как и правая

Вот видите, вы нарисовали на доске кучу граблей изначально, поэтому и весь разговор до этого был только о них...
Serg197311
На той схеме, что сверху я не показал много таблиц, и в честности таблицу VERS с ключевым уникальным полем CODE (codever во всех остальных таблицах), по которому и осуществляется связь с ними
Надеюсь, что из поста выше станет понятно, почему codever присутствует и в табл MAIN1 и и в TPRCS.

Теперь понятно...
Тогда наоборот - добавьте свой codever ещё и в spztmp и связи между этими таблицами делайте по codever а не по ключам. Если сумеете, то можете оставить и старые связи и добавить новые... если будет связь по codever, то вот эта Цель
Serg197311
Цель вопроса - предотвратить назначение процессов, разработанных для другой детали.

Превратится в обязательное условие при добавлении в spztmp...
И да... вот это зря:
Serg197311
Таблица spztmp
CODE - уникальный код записи, в дальнейшем нигде не используется, подумываю удалить

В связующей таблице уникальный код делает элементарным удаление нужной записи, особенно если их более одной, а нужно удалить именно N - ную в списке, которая выделена... Если ключ есть, то после выделения - ты сидишь прямо на нём сейчас...

Естественно связь по codever будет такой как у вас нарисована левая связь (это о Целосности, каскадном удалении и т.д.) лучше попробовать совместить...
...
Рейтинг: 0 / 0
Целостность данных
    #40054871
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
Вот видите, вы нарисовали на доске кучу граблей изначально, поэтому и весь разговор до этого был только о них......

Mea culpa... confiteor...

vmag

Тогда наоборот - добавьте свой codever ещё и в spztmp и связи между этими таблицами делайте по codever а не по ключам. Если сумеете, то можете оставить и старые связи и добавить новые... если будет связь по codever, то вот эта Цель
Serg197311
Цель вопроса - предотвратить назначение процессов, разработанных для другой детали.

Превратится в обязательное условие при добавлении в spztmp......


Думал про подобное - это действительно самый простой выход. НО очень хотелось(хочется:)) ADD(CHECK) CONSTRAINT понять и научится применять...

vmag

И да... вот это зря:
Serg197311
Таблица spztmp
CODE - уникальный код записи, в дальнейшем нигде не используется, подумываю удалить

В связующей таблице уникальный код делает элементарным удаление нужной записи, особенно если их более одной, а нужно удалить именно N - ную в списке, которая выделена... Если ключ есть, то после выделения - ты сидишь прямо на нём сейчас...
Убедили, не буду удалять...
...
Рейтинг: 0 / 0
Целостность данных
    #40055097
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал так
Код: sql
1.
2.
"ALTER TABLE spztmp ADD CONSTRAINT MyCheck CHECK " & _
"((Select tprcs.codever from tprcs inner join spztmp on tprcs.code=spztmp.cdtp)=(Select main1.codever from main1 inner join spztmp on main1.code=spztmp.codm1)"


Выдает ошибку - Ошибка синтаксиса в предложении ограничения CHECK №№ -217217900
Кто поможет разобраться?
Зы - простые CONSTRAINTы научился создавать и удалять
...
Рейтинг: 0 / 0
Целостность данных
    #40055122
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
На той схеме, что вначале видно, что связь именно по ключевым полям

Перечитайте ещё раз (или не раз) то, что я написал - до понимания, в чём разница.

Serg197311
Надеюсь, что из поста выше станет понятно, почему codever присутствует и в табл MAIN1 и и в TPRCS.
Из него ясно только то, что Вы незнакомы с понятием "переопределённые данные" и проблемами, которые могут возникать из-за их использования. И пытаетесь их использовать для копеечного упрощения себе жизни, даже не подозревая о поле с граблями, которое готовите.
...
Рейтинг: 0 / 0
Целостность данных
    #40055160
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Serg197311
Надеюсь, что из поста выше станет понятно, почему codever присутствует и в табл MAIN1 и и в TPRCS.
Из него ясно только то, что Вы незнакомы с понятием "переопределённые данные" и проблемами, которые могут возникать из-за их использования. И пытаетесь их использовать для копеечного упрощения себе жизни, даже не подозревая о поле с граблями, которое готовите.

Я естественно знаком с этими понятиями в меньшей степени, чем Вы. И я естественно внимательно прочитал то что вы написали - Второе, требующее анализа и изменения структуры - заново провести анализ. Если появилось требование безуслов6ного соответствия - значит, codever является атрибутом либо сущности из tprcs, либо сущности из MAIN1, и должно присутствовать только там, а для сущности другой таблицы оно должно получаться по связи.

И считаю, что дал объяснения почему все так вот здесь
Таблица MAIN1
Code
OWN код узла и его вышестоящий код - для создания дерева изделия
sernn - уникальный код главного изделия(главной сборки)
codever - уникальный код детали
qt - количество деталей в узле
остальные поля ИМХО несущественны для решаемой задачи

Таблица tprcs
CODE - уникальный код процесса
CODEVER - уникальный номер детали, для которой создан процесс
Остальное - несущественно

Таблица spztmp
CODE - уникальный код записи, в дальнейшем нигде не используется, подумываю удалить
CODM1 - CODE из таблицы MAIN1
cdtp - код назначенного к выполнению для этой детали именно в этой позиции общего дерева изделия процесса
остальное несущественно

Процессов (CODE из tprcs) может быть несколько для одной и той же детали(codever)
На деталь из сборки(code из MAIN1) процесс может быть не назначен, назначен один или назначено несколько процессов

Я действительно считаю, что поступить по Вашему совету я не могу. Но буду очень Вам благодарен, если Вы объясните мне - как можно сделать по-другому с сохранением требуемых возможностей
...
Рейтинг: 0 / 0
Целостность данных
    #40055167
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Serg197311
На той схеме, что вначале видно, что связь именно по ключевым полям

Перечитайте ещё раз (или не раз) то, что я написал - до понимания, в чём разница.

Приношу извинения за то , что первоначальная картинка не полностью отражала действительность и привожу то как есть на самом деле

Далее - ваш текст
Первое, очевидное, решение - создание уникального индекса (code, codever) и связывание таблиц именно по этому выражению, а не просто по (code).
Что имелось ввиду? Создать уникальный составной индекс для табл TPRCS из code+codever? Что это даст? code и так уникальный и что не заноси в codever индекс не даст никаких ограничений
В табл MAIN1 уже есть составной уникальный индекс из codever+own+sernn
Связь между таблицами осуществляется по уникальному(счетчик) и ключевому полю
Если я все же ошибаюсь, то прошу меня поправить
...
Рейтинг: 0 / 0
Целостность данных
    #40055171
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
MAIN1 - структура изделия, дерево

Это требует self-join - на схеме я его не вижу.

Serg197311
Таблица MAIN1
Code
OWN код узла и его вышестоящий код - для создания дерева изделия

Не понял. В смысле Code - это код узла, а OWN - код его родителя? Если так - где self-join связь?

Serg197311
sernn - уникальный код главного изделия(главной сборки)
Это - переопределение, главное изделие может быть получено запросом по дереву.

Serg197311
codever - уникальный код детали

Узел и деталь - это две отдельные сущности. Как они оказались в одной таблице?

Дальше можно уже не смотреть...
...
Рейтинг: 0 / 0
25 сообщений из 75, страница 1 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Целостность данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]