powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не удалять данные по внешним ключам
16 сообщений из 41, страница 2 из 2
не удалять данные по внешним ключам
    #38415221
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306Начало как в моей истории .... Только вот проект заваливать не хочется ..... Надо разумные доводы привести почему так делать нельзя ....
Он говорил про 1с - там кодом (идентификатором может быть и строка и число) и
еще Навижен (не работала в нем).
Говорит там тоже уникальный код - это может быть краткое наименование (текстовое поле).Скажем так...
Основное требование, которому должен удовлетворять первичный ключ - уникальность. Про обязательное использование какого-либо конкретного типа данных Вы нигде ничего не найдете, не говоря уже о том, что ключи могут быть составными (из нескольких полей с разными типами данных).

А по поводу "автоматических" каскадных операций... Если с каскадными обновлениями еще можно как-то смириться, то каскадные удаления - зло, из-за которого вполне реально огрести немалых люлей: удалив одну запись в одной таблице (в зависимости от расположения звезд на небе) можно получить "девственно пустую" базу данных.
И, в зависимости от типа сервера, необходимо учитывать технические ограничения при выполнении каскадных операций.

ЗЫ. Возможно, Вам нужно обратиться в несколько в более специализированный форум - Проектирование БД
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415252
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306в базе данных есть таблицы Контрагент , Организация и Договор.
в таблице договор создала внешний ключ к таблицам контрагент и организация.
подскажите как реализовать следующее при попытке изменении записи в таблице контрагент и организация- выдавать предупреждение если данные используются в таблицы Договор.
подскажите как это кодом проверяется ....

Я так понимаю, предполагается менять неключевые атрибуты в таблице контрагент и организация ?
Написать запрос, который проверяет наличие записей в связанных таблицах.
Выполнять его перед каждым изменением записей в родительских.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415254
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Huntersphinx_mvВнешний ключКак это поможет "попытке изменении записи" ?

>>> Tanya_0306

проверить наличие
Код: sql
1.
select 1 from Договор where Организация_ID = ? or Контрагент_ID = ?



этот запрос неправильный.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415259
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvTanya_0306в базе данных есть таблицы Контрагент , Организация и Договор.
в таблице договор создала внешний ключ к таблицам контрагент и организация.
подскажите как реализовать следующее при попытке изменении записи в таблице контрагент и организация- выдавать предупреждение если данные используются в таблицы Договор.
подскажите как это кодом проверяется .... Внешний ключ - одно из средств поддержания ссылочной целостности в базах данных. Его использование уже само по себе является необходимым и достаточным решением для Вашей задачи - в подавляющем большинстве случаев.

Внешние ключи тут ни при чём.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415293
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306Где-то в степи,

Можно без "Тетеньки".

В качестве уникального идентификатора записи используется текстовое поле. Это не моя идея, выше стоящее руководство так требует. Я бы создала идентификатор - код, инкрементное поле. Но начальник сказал - НЕТ. ЗАЧЕМ??


Начальник -- идиот. Это нормально. А вот то, что ТЫ -- разработчик -- не хочешь брать на себя решение технических вопросов -- очень странно.

Tanya_0306Ну и соответственно пользователь может решить изменить "кг" на "Кг." Примерно такая ситуация ....

Если пользователь МОЖЕТ ИЗМЕНИТЬ поле, то УЖЕ заведомо это поле НЕ ДОЛЖНО служить первичным ключём или его частью.
Потому что первичный ключ неизменяем, это аксиома.
Потому и ржак в теме такой, после твоего этого сообщения.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415304
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvСкажем так...
Основное требование, которому должен удовлетворять первичный ключ - уникальность. ]

И неизменяемость.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415403
JavaSpringFrameworkHibernateGWT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно никто не заморачивается поиском первичного ключа среди атрибутов. Вместо этого сразу ставят автоинкрементное поле. Так мороки меньше будет.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415427
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris,

Он "утверждает" структуру базы данных
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415434
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov,

А Вы не подскажите эти самые доводы.
У меня только один - "так принято у каждой записи должен быть уникальный идентификатор скрытый от пользователя".
Но это не аргумент )
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415441
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306А Вы не подскажите эти самые доводы.


"Попомните мое слово!" и "Когда вы будете горько плакать и вспоминать об автоинкрементном первичном ключе"
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415459
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306Pallaris,

Он "утверждает" структуру базы данных

Пусть утверждает.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415462
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,

Какие атрибуты родительской таблицы предполагается менять ?
Я так понимаю, предполагается менять неключевые атрибуты в таблице контрагент и организация ?
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415474
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<Задумчиво>
неужели она считает, что на работу ее взяли что бы программировать программы ?
</Задумчиво>
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415498
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivsphinx_mvСкажем так...
Основное требование, которому должен удовлетворять первичный ключ - уникальность. ]И неизменяемость.Теория этого не требует.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415514
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Huntersphinx_mvВнешний ключКак это поможет "попытке изменении записи" ?
Ну, попробуйте сменить значение первичного ключа, поля которого участвуют в проверяемом внешнем ключе с кляузой "ON UPDATE NONE".
При этом особых проблем со ссылочной целостностью даже наличие кляузы "ON UPDATE CASCADE" ни разу не наблюдается.
Только "ON UPDATE NULL" может пропустить изменение, и может быть получена куча записей с "потеряными" связями.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415562
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306... "так принято у каждой записи должен быть уникальный идентификатор скрытый от пользователя".
Но это не аргумент )Конечно не аргумент, потому что существует такое понятие как ненормализованные данные, которые не требуют наличия уникального ключа для каждой записи.

По поводу аргументов, бейте своего начальника его-же доводами (ну это только в случае если он не самодур и может адекватно воспринимать критику).

В 1С уникальный идентификатор записей уникален не то что в пределах одной таблицы, а в пределах всей базы данных, т.е.:
Клиент
IDКод НаименованиеAF01217 ВЛ-093425 Клиент 1AF01234 ВЛ-093426 Клиент 2

Контракт
IDКод НаименованиеAF01218 ЦО-002453 Контракт ЦО 2453AF01222 Ф1-000026 Контракт Филиал 26

ДокументБухгалтерии
IDКод НаименованиеAF01219 ЦО-785903 Документ ЦО 6344AF01220 Ф1-456372 Документ Ф1 567


Таким образом пользователь увидит клиентов с кодами ВЛ-093425 и ВЛ-093426, контракты с кодами ЦО-002453 и Ф1-000026 и документы с кодами ЦО-785903 и Ф1-456372.
А связаны они будут между собой с помощью идентификаторов, к которым шаловливые ручки пользователей доступа не имеют, соответственно обновления не будут затрагивать подчинённые таблицы. Удаление - да, а обновление нет, т.к. ID не изменяется.
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не удалять данные по внешним ключам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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