powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Таблица с большим количеством foreign key`s
9 сообщений из 9, страница 1 из 1
Таблица с большим количеством foreign key`s
    #32002075
Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSSQL 7.0
Проблема в следуещем:
Есть основная таблица CODE и много таблиц данных ссылающихся на CODE ( 1000-2000 шт. ),
соответственно каждая из которых имеет foreign key на CODE.
Мне нужно удалить строку из CODE (например, даже ни с кем не связанную ).

Я делаю следующие шаги:
1. alter table CODE nocheck constraint all - отключаю все foreign key для CODE
2. delete from CODE where cod_id=140931 - удаляю строку

Получаю:
Server: Msg 431, Level 16, State 1, Line 1
Could not bind foreign key constraint. Too many tables involved in the query.

Что неправильно?
P.S. Заранее спасибо.
...
Рейтинг: 0 / 0
Таблица с большим количеством foreign key`s
    #32002076
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он пишет, что слишком много таблиц включено в запрос. Может попробовать писать не "constraint all", а каждую таблицу по отдельности.

А вообще мне трудно представить базу из 1000 таблиц, а тем более 1000 таблиц, привязанных к одной. Неужели это всё укладывается у Вас в голове? Может всё-таки можно структуру базы оптимизировать?
Если не секрет - для каких задач нужна такая база?

С приветом Сергей
...
Рейтинг: 0 / 0
Таблица с большим количеством foreign key`s
    #32002077
Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если для каждой таблицы отключать, скрипт будет не маленький,
да и работать будет соответственно.
По поводу 1000-2000 таблиц: большинство из них в каком-то смысле однотипные -
поэтому держать в голове как раз эти таблицы не так трудно.
( прошу, если можно, воздержаться от естественных советов слить их в одну -
так задумано для решения определенного круга задач )
Назначение - как сказало начальство, секретно.
Но база эксплуатировалась успешно на InterBase, пока не подошла к 1 Gb.
1 таблицу приходится держать во внешнем файле, да и IB загибается(улся).
Перевожу под MSSQL 7.0 (проверенный), а у него куча ограничений.
...
Рейтинг: 0 / 0
Таблица с большим количеством foreign key`s
    #32002143
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пробовал эти строчки разбить на отельные пакеты (поставить между ними GO)? При выполнении какой именно строки ругается?
...
Рейтинг: 0 / 0
Таблица с большим количеством foreign key`s
    #32002144
Кирилл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У тебя слишком много вторичных ключей.
Разбей таблицу на несколько и сделай между ними отношение
ОДИН-К-ОДНОМУ
...
Рейтинг: 0 / 0
Таблица с большим количеством foreign key`s
    #32002161
Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем, foreign keys пришлось пока снять. Так работает,но что-то боязно.Что делать не знаю.
1.Ругается на команде delete.
2.Насчет разбить таблицу не понял. CODE одна из ключевых таблиц,
содержащая идентификационный код. А 2000 таблиц - это данные эксперементов. Как разбить-то?
3.Что значит "слишком много вторичных ключей"? В MS7.0 я такого ограничения не встречал.
А ошибка похоже стандартная.
Эх, может 2000 попробовать, там и поддержка триггеров удаления для вторичных ключей есть?
...
Рейтинг: 0 / 0
Таблица с большим количеством foreign key`s
    #32002173
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая ещё "поддержка триггеров удаления для вторичных ключей"?
В 2000 есть каскадные foreign key`s. Сколько таблиц они поддерживают, к сожалению, не знаю.
А сделать RI (в т.ч. и каскадное удаление) на триггерах можно в 6.5, 7.0, 2000; разумеется, без всяких ограничений на количество таблиц.
...
Рейтинг: 0 / 0
Таблица с большим количеством foreign key`s
    #32002192
Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня нет в наличии информации по 2000 и я ориентируюсь на разные источники.
Не совсем понял как вторичные ключи могут быть каскадными.
Наверное, имеется ввиду, что в 2000 поддерживаются определенные объекты(типа триггер),
которые позволяют удалением из основной таблицы, также удалять каскадно
и из связанных по вторичным ключам.
Это я и имел ввиду,написав "поддержка триггеров удаления для вторичных ключей".
Кстати, в 7.0 и ранее это невозможно без отключения вторичных ключей, т.к. триггеры срабатывают уже после удаления. Но в моем примере на 2000 таблицах не сработала даже схема с отключением.
Если я ошибаюсь напишите.
А вообще насколько 2000 лучше 7.0 и стоит ли на них переходить?
...
Рейтинг: 0 / 0
Таблица с большим количеством foreign key`s
    #32002216
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Не совсем понял как вторичные ключи могут быть каскадными."
В 2000 ввели дополнительный тип FOREIGN KEY - каскадный.
CREATE TABLE order_part(order_nmbr int, part_nmbr int
FOREIGN KEY REFERENCES part_sample(part_nmbr) ON DELETE CASCADE)
При этом при удалении из основной таблицы сервер будет удалять каскадно и из связанных по вторичным ключам.

Триггеры - это другое.
Триггер - это хранимая процедура, которая вызывается автоматически после стейтмента.
Вы можете удалить все FOREIGN KEY и делать проверки ссылочной ц. и при необходимости другие действия в них. С любым к-вом таблиц это длжно работать. Ограничение - только размер текста триггера (по-моему, 256 Мб
в 7.0 и 2000 и 64Кб в 6.5).
Это решение будет работать на любой версии.

2000 в принципе лучше 7.0, но лучьше не переходить, пока не выйдет первый СП - ошибок порядочно, а отдельные фиксы МС не высылает.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Таблица с большим количеством foreign key`s
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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