|
|
|
| Есть в таблице три поля: Фирма, Контрагент, Банк. Все они берут значения из таблицы: Фирмы. У меня ВСЕ хозяйствующие субъекты забиты в одну таблицу. Сначала думала разделить разные виды субъектов на отдельные таблицы, но потом оказалось, что это неудобно.
В итоге получается, что каскадное удаление и добавление в ADP можно применить лишь к одному из этих полей. Соответственно, вопрос: а у других двух полей, получается, не изменится наименование, если оно изменится или удалится в основной таблице?
И вообще, насколько правильна такая структура?
Видимо правильней было бы создать к моей таблице еще три таблицы, где были бы указаны для соответствующих Платежей отдельно Фирмы, контрагенты и банки?
вот здесь как лучше всего организовать структуру таблицы?
Все таки разбить таблицу с хозяйствующими субъектами на разные таблицы с разными видами фирм?
Или не делать этого, но в таблице платежей Поля "Фирма", "Контрагент" и "Банк" связывать через отдельные таблицы?
Или вообще оставить как есть все три поля в одной таблице и не париться по поводу каскадного обновления и удаления?
Спасибо! | |
|
| |
|
|
|
| Если у вас три поля в одной таблице, и берут значения из одной таблицы, то в чем проблема.
При удалении записи из таблицы Фирмы, автоматически удалится запись и из другой таблицы, (если правильно поставлены ключевые поля - таблицы должны быть связаны по ключу IdФирмы) а соответственно удалятся и поля.
По поводу структуры таблиц. А в чем разница между фирмами и контрагентами?
Сделайте отдельные таблицы-справочники фирм. А в сводной таблице указывайте только их ключи. Тогда при каскадном удалении - удаляется и соответствующая строчка с ключом. А при изменении названия - название меняется только в справочнике. Ключ в сводной таблице останется неизмененным. | |
|
| |
|
|
|
| Разница между фирмами и контрагентами: Фирмы - наши, Контрагенты - партнеры.
Что касается ключа. Ведь у меня так и есть. Есть таблица "Фирмы" с ключом. По этому ключу подставляются значения в таблицу платежи в поля "Фирма" и "Контрагент". Но так как в обоих полях значение берется из одной таблицы, то каскадной обновление и удаление допускается ТОЛЬКО для одного поля, а для двух ОДНОВРЕМЕННО не допускается.
Разделять таблицу Фирмы на виды организаций не хочется, так как любая фирма в определенной ситуации может быть на любой стороне сделки. | |
|
| |
|
|
|
| я говорю про ADP. Если в ADP в схеме БД я делаю связь по двум полям таблицы, у которых источник - одна и та же таблица, то сразу появляется ошибка ADO и пока я не уберу каскадное обновление и удаление у одного из полей, схема не сохранится и выйти из нее тоже нельзя.
Поэтому получается, что поле Фирмы в таблице Платежей обновится при изменении наименования, а поле Контрагент - нет? | |
|
| |
|
|
|
| А в таблице платежей что стоит - название фирмы ( ну или контрагента ) или их коды? | |
|
| |
|
|
|
| Если в таблице платежей стоят коды, а не названия ( а именно так и должно быть ), то при изменении названия предприятия, код его не изменится, и соответственно в таблице платежей ничего менять не нужно. Если какая либо фирма удаляется, то при выполнении запроса на удаление, нужно запускать еще один запрос на удаление записи из таблицы платежей тех записей, в которых код предприятия совпадает с удалемым объектом. Только не понятно, зачем удалять фирмы, ведь платежи то эти фирмы делали . | |
|
| |
|
|
|
| Насчет удаления согласна. Я ничего не удаляю. Если что-то устаревает, то это, естественно, оставляю это в базе.
Что касается таблицы, то поле подстановки, естественно, связывается с таблицей-источником через Код, но в таблице показывается текствоое значение, так как поле с кодом я делаю нулевым, а показываю текстовое значение. Хотя ясное дело, что реально в поле находится число, но показывается текст.
Кстати, вот вопрос.
В схеме данных, если я устанавливаю Каскадное обновление и удаление, то это касается только тех таблиц (а точнее конкретных полей в таблицах), которые изначально не связаны через поле подстановок, правильно?
Если же поле подстановки есть, то по-любому каскадное обновление и удаление уже действует для данного поля, правильно? По крайней мере, обновление. | |
|
| |
|
|
|
| Каскадное обновление(удаление) действует независимо от того, поле подстановки или нет.
В вашем случае настоятельно рекомендую убрать из таблиц текстовые значения и заменить их значениями кодов. Так будет быстрее происходить выборка данных. да и работать все будет значительно корректнее.
Нет смысла хранить текстовые значения там, где можно хранить коды. если нужно получить текстовое значение - делайте выборку с помощью запросов, объединяющих несколько таблиц. | |
|
| |