Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS SQL server

Вопросы связанные с MS SQL server

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Два поля с подстановкой значений из одной таблицы
 
 автор: Аленка   (18.12.2008 в 17:48)   личное сообщение
 
 

Есть в таблице три поля: Фирма, Контрагент, Банк. Все они берут значения из таблицы: Фирмы. У меня ВСЕ хозяйствующие субъекты забиты в одну таблицу. Сначала думала разделить разные виды субъектов на отдельные таблицы, но потом оказалось, что это неудобно.
В итоге получается, что каскадное удаление и добавление в ADP можно применить лишь к одному из этих полей. Соответственно, вопрос: а у других двух полей, получается, не изменится наименование, если оно изменится или удалится в основной таблице?
И вообще, насколько правильна такая структура?
Видимо правильней было бы создать к моей таблице еще три таблицы, где были бы указаны для соответствующих Платежей отдельно Фирмы, контрагенты и банки?

вот здесь как лучше всего организовать структуру таблицы?
Все таки разбить таблицу с хозяйствующими субъектами на разные таблицы с разными видами фирм?
Или не делать этого, но в таблице платежей Поля "Фирма", "Контрагент" и "Банк" связывать через отдельные таблицы?
Или вообще оставить как есть все три поля в одной таблице и не париться по поводу каскадного обновления и удаления?

Спасибо!

  Ответить  
 
 автор: Мюллер   (19.12.2008 в 11:08)   личное сообщение
 
 

Если у вас три поля в одной таблице, и берут значения из одной таблицы, то в чем проблема.
При удалении записи из таблицы Фирмы, автоматически удалится запись и из другой таблицы, (если правильно поставлены ключевые поля - таблицы должны быть связаны по ключу IdФирмы) а соответственно удалятся и поля.

По поводу структуры таблиц. А в чем разница между фирмами и контрагентами?

Сделайте отдельные таблицы-справочники фирм. А в сводной таблице указывайте только их ключи. Тогда при каскадном удалении - удаляется и соответствующая строчка с ключом. А при изменении названия - название меняется только в справочнике. Ключ в сводной таблице останется неизмененным.

  Ответить  
 
 автор: Аленка   (19.12.2008 в 11:42)   личное сообщение
 
 

Разница между фирмами и контрагентами: Фирмы - наши, Контрагенты - партнеры.

Что касается ключа. Ведь у меня так и есть. Есть таблица "Фирмы" с ключом. По этому ключу подставляются значения в таблицу платежи в поля "Фирма" и "Контрагент". Но так как в обоих полях значение берется из одной таблицы, то каскадной обновление и удаление допускается ТОЛЬКО для одного поля, а для двух ОДНОВРЕМЕННО не допускается.

Разделять таблицу Фирмы на виды организаций не хочется, так как любая фирма в определенной ситуации может быть на любой стороне сделки.

  Ответить  
 
 автор: Аленка   (19.12.2008 в 11:45)   личное сообщение
 
 

я говорю про ADP. Если в ADP в схеме БД я делаю связь по двум полям таблицы, у которых источник - одна и та же таблица, то сразу появляется ошибка ADO и пока я не уберу каскадное обновление и удаление у одного из полей, схема не сохранится и выйти из нее тоже нельзя.
Поэтому получается, что поле Фирмы в таблице Платежей обновится при изменении наименования, а поле Контрагент - нет?

  Ответить  
 
 автор: Мюллер   (19.12.2008 в 12:49)   личное сообщение
 
 

А в таблице платежей что стоит - название фирмы ( ну или контрагента ) или их коды?

  Ответить  
 
 автор: Мюллер   (19.12.2008 в 13:10)   личное сообщение
 
 

Если в таблице платежей стоят коды, а не названия ( а именно так и должно быть ), то при изменении названия предприятия, код его не изменится, и соответственно в таблице платежей ничего менять не нужно. Если какая либо фирма удаляется, то при выполнении запроса на удаление, нужно запускать еще один запрос на удаление записи из таблицы платежей тех записей, в которых код предприятия совпадает с удалемым объектом. Только не понятно, зачем удалять фирмы, ведь платежи то эти фирмы делали .

  Ответить  
 
 автор: Аленка   (19.12.2008 в 17:16)   личное сообщение
 
 

Насчет удаления согласна. Я ничего не удаляю. Если что-то устаревает, то это, естественно, оставляю это в базе.
Что касается таблицы, то поле подстановки, естественно, связывается с таблицей-источником через Код, но в таблице показывается текствоое значение, так как поле с кодом я делаю нулевым, а показываю текстовое значение. Хотя ясное дело, что реально в поле находится число, но показывается текст.

Кстати, вот вопрос.
В схеме данных, если я устанавливаю Каскадное обновление и удаление, то это касается только тех таблиц (а точнее конкретных полей в таблицах), которые изначально не связаны через поле подстановок, правильно?
Если же поле подстановки есть, то по-любому каскадное обновление и удаление уже действует для данного поля, правильно? По крайней мере, обновление.

  Ответить  
 
 автор: Мюллер   (19.12.2008 в 19:47)   личное сообщение
 
 

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

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList