Форум: "Базы";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
ВнизПроблема с БД Найти похожие ветки
← →
BlackCat (2003-11-23 17:18) [0]Доброго времени суток, Мастера!
Трабл состоит в нижеследуюсчем:
Есть база данных, в которой 11 таблиц, в первой хранятся даные а заказчике, а остальные 10 соответствуют конкретной услуге для заказчиков. Как организовать базу так, чтобы при добавлении в главную таблицу заказчика соответствующие данные добавлялись в остальные таблицы, а при изменении данных в главной таблице они так же изменялись в остальных. Наступил на грабли, пытаясь выбрать ключевое поле. Если брать автоинкрементное поле и делать его уникальным для каждого заказчика, то не могу связать таблицы, DataBase Desktop говорит, что не может связать по автоинкементному полю, а если брать поля "ФИО заказчика" и "адрес", как уникальный ключ, то как в таком случае быть с запросами типа "UPDATE"??? Может можно средствами Delphi сгенерировать значение поля ID, чтобы оно было уникальным в базе??? Если можно, то как (желателен пример).
Заранее благодарен за помошь.
BlackCat
← →
BlackCat (2003-11-23 18:32) [1]Помогите, плизззззз
← →
mike-d (2003-11-23 19:55) [2]> Если брать автоинкрементное поле и делать его уникальным
> для каждого заказчика, то не могу связать таблицы,
Почему, собственно?
Не совсем понятна структура БД. Эти 10 остальных таблиц являются подчиненными, по отношению к таблице "заказчиков"? О какого рода услугах идет речь, если для каждой из них требуется отдельная таблица?
← →
BlackCat (2003-11-24 05:32) [3]остальные 10 таблиц являются подчиненными по отношению к таблице заказчиков. (Заказчики - люди, подавшие документы на субсидию). В таблице заказчиков основные поля ID, ФИО, Адрес, Село.
Все остальные таблицы - конкретная услуга, например электроэнергия, квартплата и прочее. Как можно изменив данные в главной таблице отразить эти изменения в подчиненных.
Структура подчиненной таблицы:
ID, Норма, Январь, Февраль, Март... (кароче 12 месяцев года).
Так вот, если поле ID сделать автоинкрементным, то Парадокс не может связать таблицы. а если поле ID в подчиненных таблицах изменить на поля ФИО, Адрес, Село, то как в этом случае быть с запросом типа UPDATE ... WHERE ФИО=fio, Адрес=addr, Село=selo,
Ведь эти данные изменить тоже нужно. Поэтому нам нужно уникальное поле ID. Отсюда встает вопрос, как средствами Delphi можно создать это уникальное поле .
← →
Наталия (2003-11-24 06:07) [4]Во-первых: я бы все подчинённые таблицы объединила одну и ввела бы дополнительное поле "тип услуги".
Во-вторых: в эту таблицу ввела бы поле-ссылку на основную таблицу. Т.е. структура подчиненной таблицы была бы примерно следующей:
ID,Заказчики_ID, Тип_Услуги, Норма, Январь, Февраль, Март... (кароче 12 месяцев года).
Запрос тогда будет выглядеть примерно так: UPDATE ... WHERE Заказчики_ID=:ID and Тип_Услуги=...
← →
BlackCat (2003-11-24 09:05) [5]Ну а как тогда мне организовать поле ID??? Какого типа это поле делать, и как реализовать в Делфи механизм создания значения этого поля, чтобы при этом оно было уникальным
← →
Виталий Панасенко (2003-11-24 09:10) [6]ID - Integer и связывая AutoInc с ним
← →
Alex_Bredin (2003-11-24 09:40) [7]в детайл-таблице не надо делать поле ID автоинкрементным.
Тогда все свяжет как надо
← →
ЮЮ (2003-11-24 09:45) [8]>Alex_Bredin © (24.11.03 09:40) [7]
>в детайл-таблице не надо делать поле ID автоинкрементным...
в детайл-таблице для связи существует поле Заказчики_ID, а автоинкрементность ID здесь абсолютно не причём
← →
BlackCat (2003-11-24 20:02) [9]Теперь у меня встал очередной вопрос, как узнать ID записи, которую мы добавляем в мастер-таблицу, чтобы можно было записать этот же ID в детайл-таблицы
← →
ЮЮ (2003-11-25 02:25) [10]>как узнать ID записи, которую мы добавляем в мастер-таблицу
Не делать его автоинкрементным. Тогда SELECT MAX(ID) вернёт последнее значение. Коллизия использования одного значения ID дыумя клиентами легко разрешается сравнением вставляемого ID и вновь запрошенного SELECT MAX(ID). Если они равны значет проблема не в ID, если различаюися повторяем вставку с новым ID.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c