Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
Есть 3 таблицы
tprcs - процессы и их описание
MAIN1 - структура изделия, дерево
spztmp - описывает какой процесс назначен для выполнения на эту деталь на этом изделии
уникальный номер детали - codever
Есть ли возможность какими-нибудь ключами, индексами или еще как обеспечить чтобы при занесении в spztmp записи о назначении процесса значения codever в MAIN1 и tprcs были одинаковыми?
Пока все решается проверкой через код, но может быть можно и по другому?
PS - очень прошу, не надо вопросов зачем мне это надо и почему все организовано так а не иначе

К сообщению приложен файл. Размер - 13Kb
17 мар 21, 10:17    [22296027]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5181
Serg197311
Есть ли возможность какими-нибудь ключами, индексами или еще как обеспечить чтобы при занесении в spztmp записи о назначении процесса значения codever в MAIN1 и tprcs были одинаковыми?
да. Пробуй поработать с ограничениями (CHECK CONSTRAINT).
17 мар 21, 10:50    [22296039]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
vmag
Member

Откуда: MP
Сообщений: 3964
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, страшного ничего нет, просто нужно иметь это ввиду...

Я к чему? Топик называется Целостность данных...

Сообщение было отредактировано: 17 мар 21, 12:12
17 мар 21, 12:13    [22296104]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7257
vmag

Тут алгоритм по формированию codever на 100 % зависит от схемы БД...
и если БД в начальной стадии разработки думайте и переделывайте структуру,если близко к концу и дальнейшей доработки не планируется-и так пойдет, если иначе-получите гемор избавиться от которого,в дальнейшем будет намного сложнее,чем сейчас
Это все то же к тому что топик называется "целостность данных" а левая связь без неё,что может привести к ошибкам и появлению "бесхозных" записей
17 мар 21, 13:35    [22296188]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
Панург
да. Пробуй поработать с ограничениями (CHECK CONSTRAINT).

Спасибо.... буду пробовать, но пока совсем не понимаю как....
17 мар 21, 13:57    [22296207]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
vmag
Member

Откуда: MP
Сообщений: 3964
Serg197311
Спасибо.... буду пробовать, но пока совсем не понимаю как....

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


Выкинь нахрен codever из MAIN1 и tprcs и вставь его в одном экземпляре в spztmp раз оно одинаково...
Это просто очевидно...
17 мар 21, 19:21    [22296470]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
DarkMan
Member

Откуда:
Сообщений: 900
Serg197311
Спасибо.... буду пробовать, но пока совсем не понимаю как....

Попробуйте для начала дать нормальные и понятливые названия таблицам и полям.
17 мар 21, 20:08    [22296483]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
DarkMan
Serg197311
Спасибо.... буду пробовать, но пока совсем не понимаю как....

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

После каждого этапа разработки я документирую все наименования полей, таблиц, их назначения и тд(модули-функции переменные в функциях). Мне обозначения понятны, в документации описаны, не вижу ни малейшей необходимости что-то менять.
18 мар 21, 06:53    [22296574]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
vmag

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

Это неочевидно. Более того - невозможно. И не относится к теме данного топика уж точно. Буду очень благодарен, если кто-нибудь поможет вместо обсуждения структуры составить инструкцию ALTER TABLE ADD CONSTRAINT...
18 мар 21, 06:57    [22296575]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4739
Serg197311
Мне обозначения понятны, в документации описаны, не вижу ни малейшей необходимости что-то менять.

хотя СОСТАВ ИЗДЕЛИЯ моя основная задача - у меня не возникло желания сопоставлять ваши обозначения со своими, что-бы понять суть вопроса
18 мар 21, 07:36    [22296579]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21056
Serg197311
Есть ли возможность какими-нибудь ключами, индексами или еще как обеспечить чтобы при занесении в spztmp записи о назначении процесса значения codever в MAIN1 и tprcs были одинаковыми?
Первое, очевидное, решение - создание уникального индекса (code, codever) и связывание таблиц именно по этому выражению, а не просто по (code).

Второе, требующее анализа и изменения структуры - заново провести анализ. Если появилось требование безуслов6ного соответствия - значит, codever является атрибутом либо сущности из tprcs, либо сущности из MAIN1, и должно присутствовать только там, а для сущности другой таблицы оно должно получаться по связи.
18 мар 21, 08:13    [22296589]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
to ПЕНСИОНЕРКА - Хорошо
Таблица MAIN1
Code
OWN код узла и его вышестоящий код - для создания дерева изделия
sernn - уникальный код главного изделия(главной сборки)
codever - уникальный код детали
qt - количество деталей в узле
остальные поля ИМХО несущественны для решаемой задачи

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

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

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

Цель вопроса - предотвратить назначение процессов, разработанных для другой детали.
Как я уже писал - программно через запросы и код я это отслеживаю, но хотелось бы использовать возможности SQL и заодно научиться новому....

Сообщение было отредактировано: 18 мар 21, 08:11
18 мар 21, 08:15    [22296590]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
Akina
Первое, очевидное, решение - создание уникального индекса (code, codever) и связывание таблиц именно по этому выражению, а не просто по (code)..


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

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

На той схеме, что сверху я не показал много таблиц, и в честности таблицу VERS с ключевым уникальным полем CODE (codever во всех остальных таблицах), по которому и осуществляется связь с ними
Надеюсь, что из поста выше станет понятно, почему codever присутствует и в табл MAIN1 и и в TPRCS.
18 мар 21, 08:28    [22296593]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
sdku
а левая связь без неё,что может привести к ошибкам и появлению "бесхозных" записей

Картинка эту я нарисовал для этой темы и пропустил при рисовании , в реальности там правильная связь, такая же как и правая
18 мар 21, 08:34    [22296594]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
DarkMan
Member

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

А если кто то будет поддерживать проэкт после Вас ? Месяц сидеть и разбираться с документацией ?
Железная логика , даже нет аргументов.
18 мар 21, 09:10    [22296607]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
DarkMan

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

Мы что сейчас обсуждаем? Спасибо за информацию, но я был бы вам значительно более благодарен, если бы вы помогли реально, а не переводили тему непонятно куда и непонятно зачем.
18 мар 21, 09:24    [22296612]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
DarkMan
Member

Откуда:
Сообщений: 900
Serg197311
если бы вы помогли реально,

I am sorry , но лично я не собираюсь копаться в Ваших дебрях и иероглифах . Если Вам советуют изменить не только названия , но и структуру базы данных . Все советы Вы игнорируете .
Google Вам в помощь . !!!
18 мар 21, 09:38    [22296619]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
DarkMan
I am sorry , но лично я не собираюсь копаться в Ваших дебрях и иероглифах .

Darkman, Я задал простой в общем вопрос, точно описал какие поля, где что и как. Не надо тут копаться нигде, не надо обсуждать названия полей, не надо обсуждать структуру базы - вопрос касается только 3-х таблиц.
ЗЫ если не знаете, как помочь реально, то и правда, лучше здесь не писать, не оффтопить.
18 мар 21, 09:50    [22296631]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
vmag
Member

Откуда: MP
Сообщений: 3964
Serg197311
Картинка эту я нарисовал для этой темы и пропустил при рисовании , в реальности там правильная связь, такая же как и правая

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

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

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

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

Естественно связь по codever будет такой как у вас нарисована левая связь (это о Целосности, каскадном удалении и т.д.) лучше попробовать совместить...

Сообщение было отредактировано: 18 мар 21, 11:32
18 мар 21, 11:31    [22296711]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
vmag
Вот видите, вы нарисовали на доске кучу граблей изначально, поэтому и весь разговор до этого был только о них......

Mea culpa... confiteor...

vmag

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

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


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

vmag

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

В связующей таблице уникальный код делает элементарным удаление нужной записи, особенно если их более одной, а нужно удалить именно N - ную в списке, которая выделена... Если ключ есть, то после выделения - ты сидишь прямо на нём сейчас...
Убедили, не буду удалять...
18 мар 21, 11:38    [22296717]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
Попробовал так
"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ы научился создавать и удалять
19 мар 21, 08:39    [22297095]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21056
Serg197311
На той схеме, что вначале видно, что связь именно по ключевым полям

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

Serg197311
Надеюсь, что из поста выше станет понятно, почему codever присутствует и в табл MAIN1 и и в TPRCS.
Из него ясно только то, что Вы незнакомы с понятием "переопределённые данные" и проблемами, которые могут возникать из-за их использования. И пытаетесь их использовать для копеечного упрощения себе жизни, даже не подозревая о поле с граблями, которое готовите.
19 мар 21, 10:11    [22297122]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
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) процесс может быть не назначен, назначен один или назначено несколько процессов

Я действительно считаю, что поступить по Вашему совету я не могу. Но буду очень Вам благодарен, если Вы объясните мне - как можно сделать по-другому с сохранением требуемых возможностей
19 мар 21, 11:11    [22297174]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 900
Akina
Serg197311
На той схеме, что вначале видно, что связь именно по ключевым полям

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

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

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

К сообщению приложен файл. Размер - 34Kb
19 мар 21, 11:21    [22297182]     Ответить | Цитировать Сообщить модератору
 Re: Целостность данных  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21056
Serg197311
MAIN1 - структура изделия, дерево

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

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

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

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

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

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

Дальше можно уже не смотреть...
19 мар 21, 11:27    [22297186]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить