Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.007 c
14-52364
K.o.Z
2003-11-23 00:40
2003.12.16
Drag`n`drop


9-52045
Livid
2003-06-02 22:54
2003.12.16
kf2->max


3-52121
Andrey V.
2003-11-25 13:52
2003.12.16
Отменть запрос во время его выполнения.


3-52064
RAM
2003-11-25 17:55
2003.12.16
помогите с запросом


7-52425
Igor Mish
2003-10-11 04:42
2003.12.16
Серийный номер HDD





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский