Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.16;
Скачать: CL | DM;

Вниз

Проблема с БД   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
14-52338
~GaMeRd~
2003-11-21 22:04
2003.12.16
компилятор


14-52366
SergP
2003-11-21 20:52
2003.12.16
Коллекция юмора от Rouse_ ©. Куда подевалась?


14-52373
R
2003-11-21 02:42
2003.12.16
Какая операционная система


1-52188
Jiurasdg45
2003-12-02 20:09
2003.12.16
Работа с OleContainer


4-52431
Igit
2003-10-23 17:13
2003.12.16
ReadFile