Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по связи таблиц   Найти похожие ветки 

 
leonidus   (2003-10-06 16:44) [0]

У меня такая задача: есть таблица в которую занесены такие записи как "Болт", "Гайка", "Шайба", "Крышка" ну и пр. у каждой записи всего два поля "Описание" и "Картинка". Эту таблицу я создал и все ок. Но теперь надо еще одну таблицу связанную с первой, во второй таблице должны быть записи типа "Деталь1", "Деталь2" и т.п. и каждую запись из воторой таблице надо связать с несколькими записями первой, т.е. при выборе из второй таблице записи "Деталь1" в первой таблице отобразился бы список всех связанных с ней полей (например "Крышка", "Болт", "Гайка"). Я не как не могу разобраться как осуществить связь и как потом программно а не в режиме дезайна проекта менять связи между таблицами. Пожалуйста подскажите, как мне быть, горит курсовик!


 
Alex_D   (2003-10-06 16:48) [1]

В первой таблице добавляешь поле ID, а во второй поле типа SubDetail, содержащее номер комплектующего.


 
leonidus   (2003-10-06 16:58) [2]

Хорошо это сделать не трудно, но как осущесвить сам процес связи?


 
Vlad   (2003-10-06 17:04) [3]

>leonidus (06.10.03 16:58) [2]
Написать SQL запрос. Что-то типа select a.*, b.* from table1 a left join table2 b on a.id=b.id
И будет тебе счастье


 
MsGuns   (2003-10-06 17:47) [4]

Кладешь два TQuery: один для основного НД, второй для деталей, входящих в запись основного. Для второй в свойстве DataSourse указываешь первую. В SQL`е 2-го запроса пишешь SELECT ... where idd := :idm (idd - UID мастера в детеле, idm - UID мастера)


 
Term   (2003-10-06 17:48) [5]

а какие компаненты используеш?


 
Term   (2003-10-06 17:54) [6]

если используеш TTable,
еще проще создай индексы по полям связи, положи DataSourse,
свяжи его с основной таблицей, а в зависимой вставь его в св-во MasterSourse, в свойстве MasterField подчинённой таблице установи связь


 
leonidus   (2003-10-06 19:14) [7]

Я использую TTable и пока с SQL-запросами не занаком, мы до них еще не дошли. Про MasterSourse я понял, уже установил это свойство в главной таблице, а как программно устанавливаются связи в свойстве MasterField не пойму. И еще что значит "создай индексы по полям связи" т.е. в каждую записть ввести еще одно поле индекса?


 
MsGuns   (2003-10-06 21:24) [8]

>leonidus (06.10.03 19:14) [7]
>Я использую TTable и пока с SQL-запросами не занаком, мы до них еще не дошли.
Для Парадокса это гроб (TTable), но для курсача сойдет и так

Про MasterSourse я понял, уже установил это свойство в главной таблице, а как программно устанавливаются связи в свойстве MasterField не пойму

1. А что, в дизайне нельзя, надо именно в ране ?
2. Точно также, как и в дизайне, присваивая св-ву имена связующих полей, разделенных ";" (текстовая строка)
3. В детальной таблице обычно связующие поля не отображаются в гриде (это и понятно,- ведь их значения совпадают с полями мастера, обычно отображаемые в визуальных контролах, гриде, например)
4. При вставках поля связки заполняются автоматически, - не надо их трогать.
5. Изменять поля связки в детале тоже нежелательно, т.к. запостенная запись сразу "вылетит" из связанного подмножества, да и таблицы обычно летят часто именно при такой "технологии"

> И еще что значит "создай индексы по полям связи" т.е. в каждую записть ввести еще одно поле индекса?

Поля для связки в детале должны быть primary key. Если бы работал с TQuery, то там это не обязательно. Индексы создаются для ускорения доступа к таблицам и делаются достаточно просто - почитай хэлпы в методах того же TTable (AddIndex). Для этого не надо добавлять никаких полей, просто одно или несколько полей назначаются как индекс и по ним BDE построит доп.таблицу, существенно ускоряющую выборку и изменение, а также обеспечится нужная упорядоченностей записей в НД

--------------------------------------------------------------------------------


 
Term   (2003-10-07 09:12) [9]


> почитай хэлпы в методах того же TTable (AddIndex).

лучше создать все индексы заранее тем более для курсача, с помощью Database DeskTop, а то при постоянном вызове AddIndex ,будет вываливаться исключение, в принципе его можно обработать, но в данном примере лучше без этого


 
leonidus   (2003-10-07 10:04) [10]

Надо именно в run-tim`e устанавливать все связи, т.к. на момент запуска программы обе таблицы будут еще пусты, а потом препод сам заполнит дочернюю таблицу и главную и свяжет те записи которые захочет. И еще я не пойму, мне же дано не поля связывать а записи т.е. запись "Деталь1" из главной таблице должна быть связана с записью "Болт" и "Гайка" из дочерней таблицы, или я гле-то не прав? А вообще-то если использовать TQuery технология на много упроститься? Я просто думаю может несколько модифицировать задачу под SQL?


 
Sergey13   (2003-10-07 10:13) [11]

2leonidus (07.10.03 10:04) [10]
>на момент запуска программы обе таблицы будут еще пусты, а потом препод сам заполнит дочернюю таблицу и главную и свяжет те записи которые захочет

Ты наверное плохо препода слушал на лекциях. Хелп читать еще рано, надо бы книжку какую умную, вместо лекций чтоб.


 
Term   (2003-10-07 10:20) [12]


> А вообще-то если использовать TQuery технология на много
> упроститься?

упроститься если ты хотя бы немного знаком с SQL, подчёркиваю хотябы немного, но судя по всему ты за БД ваще в первый раз взялся, а в run-time выбрать поля и связать что за бред...
если уж не можеш своими словами объяснить что тебе нужно, хотя бы приведи текст задания как он есть, в твоём курсовом, так больше толку будет


 
MsGuns   (2003-10-07 11:25) [13]

>leonidus (07.10.03 10:04)
>.. а потом препод сам заполнит дочернюю таблицу и главную и свяжет те записи которые захочет. И еще я не пойму, мне же дано не поля связывать а записи т.е. запись "Деталь1" из главной таблице должна быть связана с записью "Болт" и "Гайка" из дочерней таблицы, или я гле-то не прав?

Судя по всему, у тебя отсутствует само понимание принципа связки "один-ко-многим" и способ лечения этой болезни один - почитать книжки (хэлпы предполагают хотя бы общее знакомство с теорией)


 
leonidus   (2003-10-07 12:18) [14]

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

>Term зачем так резко "бред", может я конечно многово не понимаю (я действительно первый раз с базами работаю), но я же стараюсь... я ведь правильно понимаю, что в ЗАПИСЬ например "Гайка" входит ПОЛЯ "описание" и "картинка" а ЗАПИСЬ "Деталь1" должна быть связана с записью "Гайка" а не с ее полями, или не так, почему вас всех смущает фраза "связать записи"?


 
MsGuns   (2003-10-07 13:24) [15]

>leonidus (07.10.03 12:18) [14]
> <Абзац 1>

Никто на тебя не налетал, наоборот, все тебе намекают, а кое-кто и прямо говорит, что нельзя браться за проектирование баз данных, совершенно не зная теории, для чего советуют обратиться к книгам.
TQuery или TTable (а есть еще много других, зачастую намного более эффектнивных инструментов) - для организации связи "Один-ко-многим" или Master-Detail на языке профи, - не играет никакой рояли. Просто "табличный метод" присущ локальным базам и постепенно уходит в прошлое. Но он более интуитивно понятен именно для новичков, не знакомых с понятем коннектов, серверов, тонких клиентов и т.д.

> <Абзац 2>
Не надо так реагировать на слова. По сути Term прав и если обижаться на то, в какой форме Мастер дает тебе знать об ошибке, лучше вообще не учиться, а устроиться в Институт Благородных Девиц сторожем.
О сути. Для начала абстрагируйся от понятий "Деталь", "Запись, "Поле" и т.д. Вообрази себе все в виде объектов, обладающих собственными свойствами. Между этими объектами существуют связи и зависимости. Вот и нарисуй себе такую схемку. Затем подумай о том, что надо иметь нечто у каждого объекта, что отвечало бы за связь его с другим объектом и т.д. Ну а если почитаешь любую книжку по основам пректирования БД, то все получится куда быстрее и лучше
Ты


 
Term   (2003-10-07 15:55) [16]


> Term зачем так резко "бред",

я тебя обижать ничем нихотел и не собирался, я сам частенько достаю мастеров вопросами и не обижаюсь не на какие выражения если не знаю лучше всё стерпеть но разобраться.
Вот тебе немного теории в двух словах:
короче начни с TTable, так как задачка у тебя простенькая и когда разберешся в сути вот тогда и за SQL и всё прочее возьмёшся.
Короче у тебя предположим 2 таблицы тебе их надо связать как енто провернуть. У первой таблицы назовём её мастер-таблицей обязательно должно быть поле по которому строиться главный индекс или ключ, и оно должно иметь уникальное значение в каждой записи, вторая таблица назовёт её детальной-таблицей, должна иметь обязательно два поля(это те которые отвечают за связь, а поля которые несут инфу я не затрагиваю), одно также ключевое, а второе поле связи, по нему строиш вторичный индекс. Вот минимальные сведения в двух словах.
Дальше в делфе на форму кладёш TTable называеш его к примеру Master, связываеш его с мастер таблицей. Затем кладёш TDataSourse и еще один TTable, тайбл назови к примеру Detail.
Указываеш у них соответсвенные индексные поля.
Далее TDataSourse связываеш с Master, а у Detail указываеш его как MasterSourse, затем указываеш MasterField.
и всё будет работать....
только не меняй руками поля связи


 
leonidus   (2003-10-08 00:08) [17]

Подскажите пожалуйста где в инете можно прочитать про основы баз данных и в частности связь таблиц?


 
Zacho   (2003-10-08 00:17) [18]


> leonidus (08.10.03 00:08) [17]

Скажу честно: предидущие посты не читал.
Но настоятельно советую прочитвть и осмыслить К.Дж.Дейт "Введение в системы баз данных"



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.01 c
1-89280
ivc_andr
2003-10-14 11:50
2003.10.27
вытащить кусок текста


7-89623
IGORYOK
2003-08-12 11:46
2003.10.27
Может ли библиотека передавать сообщения программе и наоборот ожи


6-89444
Mear
2003-08-30 00:13
2003.10.27
Интеграция в Outlook или Bat...


7-89596
IGORYOK
2003-08-14 10:01
2003.10.27
Мне надо без помощи OnMessage получать сообщения на поток


1-89271
RoLeX
2003-10-14 14:58
2003.10.27
Как сдлеать, чтобы программа сворачивалась в трей???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский