Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
Уважаемый Форум! Есть такой вопрос, как лутше реализовывать ссылочную целостность в Билдере. Вообщем, у меня ПБ 9 и АСА 8! Есть 3- и таблицы, тип связи "один к одному". При создании внешних ключей таблиц Т2 и Т3 на таблицу Т1 - опцию каскадное удаление не ставил. Соответственно в ПБ при удалении записи из Т1 -ругается, что на примари кей есть ссылки из других таблиц. Так вот, вопрос! Что лутше? Оставить все как есть, и прежде чем удалять в Т1, удалять в Т2 и в Т3 ? или перенастроить в БД внешние ключи с каскадным удалением? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 13:08 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
ВопросникУважаемый Форум! Есть такой вопрос, как лутше реализовывать ссылочную целостность в Билдере. Вообщем, у меня ПБ 9 и АСА 8! Есть 3- и таблицы, тип связи "один к одному". При создании внешних ключей таблиц Т2 и Т3 на таблицу Т1 - опцию каскадное удаление не ставил. Соответственно в ПБ при удалении записи из Т1 -ругается, что на примари кей есть ссылки из других таблиц. Так вот, вопрос! Что лутше? Оставить все как есть, и прежде чем удалять в Т1, удалять в Т2 и в Т3 ? или перенастроить в БД внешние ключи с каскадным удалением? Как вариант можно вызывать хранимую процедуру для удаления данных в связанных таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 13:14 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
ВопросникЕсть такой вопрос, как лутше реализовывать ссылочную целостность в Билдере Не в билдере, а в базе. ВопросникТак вот, вопрос! Что лутше? Оставить все как есть, и прежде чем удалять в Т1, удалять в Т2 и в Т3 ? или перенастроить в БД внешние ключи с каскадным удалением? Ну вам то это уж и видней. Если T1 - это справочник номенклатур, а T2 и T3, к примеру, подвал накладной и счет-фактуры, то каскадное удаление, здесь категорически противопоказано. Если же Т1, Т2 и Т3 - это таблицы одного документа, а Т1 - его "шапка", то каскадное удаление здесь вполне себе вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 13:23 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
Без знания назначения системы, её архитектуры и т.д. - сказать что лучше, просто невозможно. Как вариант при обработке на стороне клиента можно при удалении в T1, естественно при использовании DataWindow, реализовать каскадное удаление в T2 и Т3. Для этого можно воспользоваться событием udatestart(). Если все три таблицы лежат в разных dw, но в одном окне, то возможно придется задействовать и событие updateend() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 13:31 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
У меня касательно этого вопроса, возник еще один трабл! Все 3-DW, указыват на одну таблицу, но предоставляют разные поля. Проблем сапдейтом нет! А вот инсерт шалит! выдает ошибку что поля не могут быть Null, причем соответственно во 2-ом и 3 DW?? Я мыслю так, после того ка я запускаю функцию of_update() главного DW, то проходя по цепочке всех DW -сначало заносятся данные в первое DW,,,,,,,,, ну и соответственно во втором DW уже не должно быть проблем............!!! Но они возникают, почему????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 14:22 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
ВопросникВсе 3-DW, указыват на одну таблицу, но предоставляют разные поля. Проблем сапдейтом нет! А вот инсерт шалит! выдает ошибку что поля не могут быть Null, причем соответственно во 2-ом и 3 DW?? Я мыслю так, после того ка я запускаю функцию of_update() главного DW, то проходя по цепочке всех DW -сначало заносятся данные в первое DW,,,,,,,,, ну и соответственно во втором DW уже не должно быть проблем............!!! Но они возникают, почему????? Потому что ты схалтурил . Напиши обновления сам аккуратно ручками, и всё пройдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 14:36 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
Не понял! Какие обновления? Зделать так-------????????????????? Ручками, значения не нулевых полей взять из DW 1 и установить в DW2 и в DW3 ???????? Да, и еще.................., почему все таки обновление в DW 1 -проходят, при ошибке в DW 2 ???? Я проверяю if tab_1.tabpage_1.dw_one.of_update(true,true)=1 then of_update(true,true) -либо для все цепочки, либо не для кого??????7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 14:44 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
авторВсе 3-DW, указыват на одну таблицу, но предоставляют разные поля. Проблем сапдейтом нет! А вот инсерт шалит! выдает ошибку что поля не могут быть Null, причем соответственно во 2-ом и 3 DW?? Логично, что получили проблемы. После выполнения Insert'a в dw_1, как мне кажется, следует выполнить во первых dw_1.update(), а во вторых, retrieve для dw_2 и dw_3 В Вашем случае, наверное было бы лучше воспользоваться Share DataWindow. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 15:19 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
Вопросник...Все 3-DW, указыват на одну таблицу, но предоставляют разные поля. IMHO, Вы плохо спроектировали базу данных. ВопросникПроблем сапдейтом нет! А вот инсерт шалит! выдает ошибку что поля не могут быть Null, причем соответственно во 2-ом и 3 DW?? У ваc формируется DML-запрос вида Код: plaintext Варианты, предложенные Alexander Kolotinets и Dim2000 спасут ситуацию, но полагаю, надо что-то в консерватории подправить :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 15:29 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
Ну на счет плохой проэктировки............... это конечно возможно! У меня документ, один, и у него в сумме 70 полей! не буду же я делать таких размеров таблицу в ширину! Вот я и зделал 3- и по 20! Теперь проблемы, как видите с инсертом! Проэкт в стадии разработки, и я в стадии обучения поэтому попрошу особо в консерваторию не посылать, мне и здесь Вам голову морочить нравится! Если, таблица в АСА не боится количества 70 полей? То переделать - не представляется проблематичным! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 15:49 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
ВопросникЕсли, таблица в АСА не боится количества 70 полей?Да хоть 999!!! Ну вот теперь все ясно. Выяснилось что ссылочная целостность ни при чем вообще. Таблицу сделать одну. Сделать 3 DW с одинаковым SELECT. В первом DW оставить треть полей - остальные удалить. Аналогично со вторым и третьим. Первому DW сказать dw1.Retrieve() двум другим dw1.ShareData(dw2) , dw1.ShareData(dw3) для сохранения достаточно будет сказать dw1.Update() Если что непонятно - спрашивай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 16:25 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
Спасибо ЗоринАндрей, и всем остальным! Я так уже кинулся делать, другого способа не вижу...!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 16:32 |
|
||
|
варианты ссылочной целосности
|
|||
|---|---|---|---|
|
#18+
ВопросникНу на счет плохой проэктировки............... это конечно возможно! У меня документ, один, и у него в сумме 70 полей! не буду же я делать таких размеров таблицу в ширину! Вот я и зделал 3- и по 20! Теперь проблемы, как видите с инсертом! Проэкт в стадии разработки, и я в стадии обучения поэтому попрошу особо в консерваторию не посылать, мне и здесь Вам голову морочить нравится! Если, таблица в АСА не боится количества 70 полей? То переделать - не представляется проблематичным! Мне почему то кажется, что 70 полей попахивают явной денормализацией базы данных. Очень редко можно встретить документы с таким действительно уникальным кол-вом полей. У Вас не может быть такой ситуации, что часть информации из документа можно было бы вынести в справочники, как повторяющуюся (например Наименование Банка, БИК, ИНН в платежке и т.д.) ? По поводу выдержит ли ASA таблицу с такой шириной (кол-вом полей) - это зависит от назначения таблицы. Если ширина одной записи получается слишком большой для установленного размера страницы БД, эта таблица будет часто использоваться в запросах и в ней будет слишком много строк, то тогда конечно же имеет смысл разбить ее на несколько таблиц, оставив в основной таблице поля, которые наиболее часто востребованны в запросах, а все дополнительные информативные поля вынести в дополнительную таблицу. Делить таблицу на целых три абсолютно смысла не вижу. P.S. Для ASA9 еще более удобным вариантом хранения множества полей является хранение их значений в long varchar полях в виде XML, где с помощью алгоритма соединения LATERAL можно элементарно их вытаскивать и обрабатывать в запросах. P.S.2 А вообще то задавайте вопросы по ASA в форуме Sybase, а вопросы по правильному проектированию модели БД в форуме "Проектирование БД". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 23:18 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=32808544&tid=1338676]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 405ms |

| 0 / 0 |
