powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не удалять данные по внешним ключам
25 сообщений из 41, страница 1 из 2
не удалять данные по внешним ключам
    #38414905
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в базе данных есть таблицы Контрагент , Организация и Договор.
в таблице договор создала внешний ключ к таблицам контрагент и организация.
подскажите как реализовать следующее при попытке изменении записи в таблице контрагент и организация- выдавать предупреждение если данные используются в таблицы Договор.
подскажите как это кодом проверяется ....
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38414935
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306в базе данных есть таблицы Контрагент , Организация и Договор.
в таблице договор создала внешний ключ к таблицам контрагент и организация.
подскажите как реализовать следующее при попытке изменении записи в таблице контрагент и организация- выдавать предупреждение если данные используются в таблицы Договор.
подскажите как это кодом проверяется .... Внешний ключ - одно из средств поддержания ссылочной целостности в базах данных. Его использование уже само по себе является необходимым и достаточным решением для Вашей задачи - в подавляющем большинстве случаев.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38414938
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvВнешний ключКак это поможет "попытке изменении записи" ?

>>> Tanya_0306

проверить наличие
Код: sql
1.
select 1 from Договор where Организация_ID = ? or Контрагент_ID = ?
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38414989
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sphinx_mv,

Может я не совсем понятно выразила постановку задачи. Пользователь начинает редактировать данные в таблице Организация, когда нажимает на кнопку сохранить - мне надо его предупредить что эти данные уже используются в таблице Договор и спросить - действительно сохранить изменения?
Если он подтвердит изменения - то все данные каскадно поменяются. Ссылочную целостность таблиц я настроила.
И так же при удалении - захочет пользователь удалить запись в таблице организации - надо проверить не используется ли эта запись в таблице Договор, если не используется то просто удалить. Иначе спросить - "действительно удалить запись и все все связанные с ней данные???". Подтвердить - удалить из таблицы Организации ? если да - то каскадно удалить записи из таблицы Организация и договоры.
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38414991
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306sphinx_mv,

Может я не совсем понятно выразила постановку задачи. Пользователь начинает редактировать данные в таблице Организация, когда нажимает на кнопку сохранить - мне надо его предупредить что эти данные уже используются в таблице Договор и спросить - действительно сохранить изменения?
Если он подтвердит изменения - то все данные каскадно поменяются. Ссылочную целостность таблиц я настроила.
И так же при удалении - захочет пользователь удалить запись в таблице организации - надо проверить не используется ли эта запись в таблице Договор, если не используется то просто удалить. Иначе спросить - "действительно удалить запись и все все связанные с ней данные???". Подтвердить - удалить из таблицы Организации ? если да - то каскадно удалить записи из таблицы Организация и договоры.А что, параметризованные запросы нынче уже не используют?
Каким образом Вы настроили ссылочную целостность таблиц? Можете привести для примера SQL скрипт создания таблиц и внешних ключей?
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38414999
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306, Тетенька, зачем вы трогаете уникальный идентификатор записи?
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415001
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,
ИМХО: Пользователям удалять организацию - это жестоко, лучше за маркировать запись как на удаление, а эту привилегию оставить root_у, мало ли глупых куриц которые готовы поиграться с кнопочкой удалить...
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415006
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Create table
Clients (
	Client	varchar(25)  ,
 	Name	varchar(100),
 	Identifier	varchar(25),
 	Adress	varchar(50),
 	Contact	varchar(50),
 	Tel	varchar(25),
 	Remark	varchar(100),
       CONSTRAINT PK_Clients PRIMARY KEY (Client)     
)

Create table
Companies (	
	Company	varchar(25)  ,
 	Name	varchar(100),
 	Prefix	varchar(3),
 	Identifier	varchar(25),
 	Account	varchar(25),
 	Adress	varchar(50),
 	Contact	varchar(50),
 	Tel	varchar(25),
       CONSTRAINT PK_Companies PRIMARY KEY (Company)     
                              )



Create table
Contracts  
  (	Id	numeric(4,0)  IDENTITY(1,1),
       [Contract]  varchar(50) not null,  
 	Number	varchar(10) not null,
 	Dt	date,
 	Client	varchar(25),
 	Company	varchar(25),
	CONSTRAINT PK_Contracts PRIMARY KEY (Id)     
                                )


ALTER TABLE Contracts  WITH CHECK ADD  CONSTRAINT FK_Contracts_Clients
FOREIGN  KEY (Client)
REFERENCES  Clients(Client)
ON UPDATE CASCADE
ON DELETE CASCADE



ALTER TABLE Contracts  WITH CHECK ADD  CONSTRAINT FK_Contracts_Companies 
FOREIGN  KEY (Company)
REFERENCES  Companies(Company)
ON UPDATE CASCADE
ON DELETE CASCADE



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

Это было бы идеальный вариант. А механизм "маркирования записи".
Это что-то типа завести в таблице поле - признак "запись удалена"?
И при работе в приложении давать возможность пользователю помечать на удаление? Я правильно понимаю?
А можно по подробнее про root ?
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415012
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

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

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

Ну и соответственно пользователь может решить изменить "кг" на "Кг." Примерно такая ситуация ....
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415018
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,
До свидания...
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415022
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

Зачем же сразу До свидания.
Если не правильная логика - подскажите.
Пример с "кг" я утрировала ...
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415023
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,
Тащите начальника сюда ))
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415024
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,

О параметрах запросов лучше почитать MSDN.

Немного конкретизирую под Вашу задачу:
Перед непосредственно удалением записи из таблиц Companies или Clients выполнить запросы вида:
Код: sql
1.
2.
3.
4.
5.
SELECT  [Contract],  
        [Number], 
        [Dt]
  FROM  Contracts
 WHERE  Company = @Company

или
Код: sql
1.
2.
3.
4.
5.
SELECT  [Contract],  
        [Number], 
        [Dt]
  FROM  Contracts
 WHERE  Client = @Client


Проверить наличие записей в выходном наборе данных, при необходимости показать их и сделать запрос на подтверждение удаления.

Если же просто нужно проверить наличие записей, то можно и так как Relic Hunter предложил:
Код: sql
1.
2.
3.
SELECT  COUNT( * ) as ConrtactsCnt
  FROM  Contracts
 WHERE  Company = @Company



Далее проверяем возвращаемое значение агрегата ContractsCnt на значение > 0.


Про обновление ключевых полей в таблицах Companies и Clients:
подумайте, а так-ли уж необходимо обновлять именно ключевые поля?
К тому-же странно, что у Вас ключевые поля символьные, получается,
что Вы их генерируете самостоятельно или пользователь их сам выдумывает?
Не лучше-ли для идентификаторов использовать IDENTITY?
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415026
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиTanya_0306,
Тащите начальника сюда ))+100500

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

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

Это не реально ... ))
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415034
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,
не хочу вас обидеть, честное слово, но имхо: я бы это рассматривал как сексуальное домогательство ( без обид)
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415035
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Kuznetsov,

Спасибо!!
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415036
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Tanya_0306
Шлите начальника в попу и меняйте работу )))
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415044
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306Alex Kuznetsov,

"А почему нет - пусть задает идентификатор как текстовое поле, краткое наименование".А потом дать начальнику в руки просто sqlcmd.exe и пусть он исправляет косяки пользователей или сам придумывает уникальные идентификаторы записей
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415112
JavaSpringFrameworkHibernateGWT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помню, что когда после университета на первом месте работал, то там тоже такой начальник был. Он 8 лет сидел на одном месте ведущим программистом. Но абсолютно не знал ничего ни про первичные ключи, ни про целостность базы данных, ни про особенности движка, который писали в этой фирме. Но везде лез и заставлял делать так, как он хочет. Причём мне тогда выделили новый проект. И я в одиночку под командованием этого начальника стал его клепать на ихнем движке. Да, кстати, документации вообще никакой не было. Было только несколько старцев, но и они уже давно путались в проекте...

Короче, завалили мы тогда проект:) А из той фирмы я сам ушёл, когда через пару лет понял, что ничего у меня здесь хорошего не получится:)
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415130
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JavaSpringFrameworkHibernateGWT,

Начало как в моей истории .... Только вот проект заваливать не хочется ..... Надо разумные доводы привести почему так делать нельзя ....
Он говорил про 1с - там кодом (идентификатором может быть и строка и число) и
еще Навижен (не работала в нем).
Говорит там тоже уникальный код - это может быть краткое наименование (текстовое поле).
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415184
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,

Что мешает сделать первичный ключ человеческим, а начальнику сказать, что сделала текстовым - пусть радуется?
...
Рейтинг: 0 / 0
не удалять данные по внешним ключам
    #38415187
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306JavaSpringFrameworkHibernateGWT,

Начало как в моей истории .... Только вот проект заваливать не хочется ..... Надо разумные доводы привести почему так делать нельзя ....
Он говорил про 1с - там кодом (идентификатором может быть и строка и число) и
еще Навижен (не работала в нем).
Говорит там тоже уникальный код - это может быть краткое наименование (текстовое поле).Не верьте.
В 1С идентификатор записи действительно символьное поле, НО, значение поля генерируется, а не вносится пользователем. А вот КОД может быть сгенерирован и потом изменён пользователем.

В Навике то-же самое...

Посмотрите структуры таблиц документов 1С непосредственно на сервере БД, а не через окошко в 1С, и поймёте о чём я говорю.
Так что, не следует слепо доверять тому, что говорит начальство.
Ищите доводы чтобы отказаться от этой глупой затеи...
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не удалять данные по внешним ключам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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