Текущее время: Ср, июл 30 2025, 17:56

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Создание внешнего ключа
СообщениеДобавлено: Ср, фев 10 2010, 16:33 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, ноя 07 2008, 16:32
Сообщения: 76
Добрый день.
Вопрос поясню на примере.
Есть table1 у которой 2 поля
kod - некоторый код товара, поле ключевое, ссылается на поле kod таблицы table2
desc - описание товара

table2. поля такие:
kod - код, ключевое поле
name - наименование

Т.е. есть некоторая т. table2, которая является проверочной для таблицы table1.
Вопрос: каким образом можно настроить (если конечно вообще есть такая возжонсть) внешний ключ, чтобы при удалении из таблицы table2 записи, система (хотя бы в транзакции se16) не позволяла бы это сделать, т.к. в table1 есть ссылка на ключевое поля удаляемой записи таблицы table2?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Ср, фев 10 2010, 16:51 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
ZOND написал(а):
Добрый день.
Вопрос поясню на примере.
Есть table1 у которой 2 поля
kod - некоторый код товара, поле ключевое, ссылается на поле kod таблицы table2
desc - описание товара

table2. поля такие:
kod - код, ключевое поле
name - наименование

Т.е. есть некоторая т. table2, которая является проверочной для таблицы table1.
Вопрос: каким образом можно настроить (если конечно вообще есть такая возжонсть) внешний ключ, чтобы при удалении из таблицы table2 записи, система (хотя бы в транзакции se16) не позволяла бы это сделать, т.к. в table1 есть ссылка на ключевое поля удаляемой записи таблицы table2?

Когда создаете таблицу там есть кнопка внешний ключ(ключик), через него разве не получается? Там есть "Семантические свойства".


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Ср, фев 10 2010, 16:59 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, ноя 07 2008, 16:32
Сообщения: 76
Besa написал:
Когда создаете таблицу там есть кнопка внешний ключ(ключик), через него разве не получается? Там есть "Семантические свойства".


Пробовал поиграть с семантикой. Че то не выходит.
Сейчас стоит
вид полей внешнего ключа - ключевые поля/кандидаты
Кардинальность 1:CN

Или что-то другой выставлять нужно?
Через se16 пробую удалять из table2 - запись удаляется, несмотря на то, что в table1 есть ссылка на ключевое поле


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Ср, фев 10 2010, 17:16 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
ZOND написал(а):
Besa написал:
Когда создаете таблицу там есть кнопка внешний ключ(ключик), через него разве не получается? Там есть "Семантические свойства".


Пробовал поиграть с семантикой. Че то не выходит.
Сейчас стоит
вид полей внешнего ключа - ключевые поля/кандидаты
Кардинальность 1:CN

Или что-то другой выставлять нужно?
Через se16 пробую удалять из table2 - запись удаляется, несмотря на то, что в table1 есть ссылка на ключевое поле


такую семантику вы можете поставить только для table1 и она будет действовать на то что если вы попытаетесь ввести в table1 значенеие не из table2.

А то что вы хотите сделать именно для se16 невозможно. т.е. если пользователь имеет доступ к se16n (хотя не должны) то он спокойно может удалить запись.

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Ср, фев 10 2010, 17:22 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Цитата:
Через se16 пробую удалять из table2 - запись удаляется, несмотря на то, что в table1 есть ссылка на ключевое поле

Боюсь что такой проверки на уровне словаря данных SAP не обеспечивает.
Можно предложить только сгенерировать для table2 ракурс ведения и запрограммировать событие "перед удалением записи"

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Ср, фев 10 2010, 17:52 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, ноя 07 2008, 16:32
Сообщения: 76
Удав написал(а):
Боюсь что такой проверки на уровне словаря данных SAP не обеспечивает.
Можно предложить только сгенерировать для table2 ракурс ведения и запрограммировать событие "перед удалением записи"


Написал простенькую программу в которой удаляется запись из table2 - система позволяет это сделать несмотря на наличие ссылающейся записи в table1.
Т.е. стандартными средствами словаря нельзя обеспечить целостность данных, только накручивать логику?
А если как в моем примере программы, есть delete для некоторой таблицы, обязательно создавать ракурс и
программировать событие "перед удалением записи" ?
Если выражаясь в общем, есть какой-нить какой стандартный механизм в SAP для задания "жесткий ссылок" ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Ср, фев 10 2010, 17:58 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
ZOND написал(а):
Удав написал(а):
Боюсь что такой проверки на уровне словаря данных SAP не обеспечивает.
Можно предложить только сгенерировать для table2 ракурс ведения и запрограммировать событие "перед удалением записи"


Написал простенькую программу в которой удаляется запись из table2 - система позволяет это сделать несмотря на наличие ссылающейся записи в table1.
Т.е. стандартными средствами словаря нельзя обеспечить целостность данных, только накручивать логику?
А если как в моем примере программы, есть delete для некоторой таблицы, обязательно создавать ракурс и
программировать событие "перед удалением записи" ?
Если выражаясь в общем, есть какой-нить какой стандартный механизм в SAP для задания "жесткий ссылок" ?


1) как вам уже сказали на низком уровне целостность никак не защищена. отсюда часто неконсистентность данных. то бишь ссылки есть а самой записи нет.
2) опишите более подробно задачу. кто когда в каких случаях и чем удаляет вашу запись ?
3) речь про ракурс была заведена для управление ведением таблицы. то бишь сама таблица должна быть закрыта на изменение. что ведет к невозможности удаления на прямую записи через se16n (конечно если не использовать чудо метод). и опять же это не защитит таблицу от прямого delete в программе

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Ср, фев 10 2010, 18:02 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, авг 18 2004, 09:17
Сообщения: 477
Откуда: Москва
Пол: Мужской
ZOND написал(а):
Если выражаясь в общем, есть какой-нить какой стандартный механизм в SAP для задания "жесткий ссылок" ?

Контроль ссылочной целостности осуществляется прикладной программой. В BW, например, есть встроенный настраиваемый механизм для контроля целостности. В других модулях такие проверки также осуществляются для стандартных объектов.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Ср, фев 10 2010, 18:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
ZOND написал(а):
Если выражаясь в общем, есть какой-нить какой стандартный механизм в SAP для задания "жесткий ссылок" ?

Только через доп. программирование: перед удалением записи в справочнике должны проверяться все связанные с ним по внешнему ключу таблицы. И не только связанные по внешнему ключу, но и имеющие, к примеру, ссылку через домен :)
Для этого вместо использования оператора delete from ... нужно написать ФМ, который сначала выполняет проверку, а уже потом удаляет запись.
В стандарте SAP это реализовано в виде отдельных транзакций по удалению данных ;)

В своих же программах никто не запрещает программисту написать delete from bseg, и никакие проверки проводиться не будут :!:
Просто работать с таким документом стандартные транзакции не будут. :P

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Чт, фев 11 2010, 10:15 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, ноя 07 2008, 16:32
Сообщения: 76
Спасибо всем за ответы. Многое прояснилось.
Удав написал(а):
В стандарте SAP это реализовано в виде отдельных транзакций по удалению данных

Дмитрий написал:
Контроль ссылочной целостности осуществляется прикладной программой... такие проверки также осуществляются для стандартных объектов

Подскажите, какую литературу, курсы можно почитать по этому поводу?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Чт, фев 11 2010, 10:41 
Младший специалист
Младший специалист

Зарегистрирован:
Сб, сен 13 2008, 08:50
Сообщения: 56
Добрый день.
Мне кажется Вам стоит просто написать собственный интерфейс ведения таблиц(ы) и в нем уже реализовать какую угодно логику удаления/изменения/добавления записей.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание внешнего ключа
СообщениеДобавлено: Чт, фев 11 2010, 10:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
ZOND написал(а):
Спасибо всем за ответы. Многое прояснилось.
Удав написал(а):
В стандарте SAP это реализовано в виде отдельных транзакций по удалению данных

Подскажите, какую литературу, курсы можно почитать по этому поводу?

Например, удаление дебиторов и сведения об архивировании данных
Если кратко, то суть в следующем: процедура удаления делается в 3 этапа:
1.Запись помечается для удаления (отдельное поле - индикатор удаления)
2.Выполняется проверка, используется ли ключ удаляемой записи в других таблицах
3.Если запись не используется, ее можно удалить. Если используется - сначала архивируются данные, содержащие ключ удаляемой записи, затем архивируется сама запись.

Под архивацией понимается физическое копирование информации из таблиц БД в отдельное хранилище данных(архив) и удаление информации из таблиц БД.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB