Индексация в Master/Deatail
полю ID со значением 001 в мастер таблице сответствуют поля ID с таким же значением 001 в дитейл таблице, которых не может быть больше одной из-за индексации. Ну и как тут поступать? СУБД - Paradox, компонент - TTable1, TTable2. Застрял !!!
Каким образом строить мастер\дитейл таблицы, если связываемые поля обязательно должны быть проиндексированы, что в свою очередь говорит о их уникальности? А отношения м\д ведь строятся по принципу:
полю ID со значением 001 в мастер таблице сответствуют поля ID с таким же значением 001 в дитейл таблице, которых не может быть больше одной из-за индексации. Ну и как тут поступать? СУБД - Paradox, компонент - TTable1, TTable2. Застрял !!!
Может у меня после нового года ещё мозг не поднялся или я чего-то не понимаю.
Если тебе нужно связать две таблицы в Paradox, то на уровне Paradox они не вяжутся, а на уровне приложения, просто напиши функцию по занесению значений в обе таблицы, ну и удаляй их соответственно когда надо и никаких повторений не будет.
Каким образом строить мастер\дитейл таблицы, если связываемые поля обязательно должны быть проиндексированы, что в свою очередь говорит о их уникальности? А отношения м\д ведь строятся по принципу:
полю ID со значением 001 в мастер таблице сответствуют поля ID с таким же значением 001 в дитейл таблице, которых не может быть больше одной из-за индексации. Ну и как тут поступать? СУБД - Paradox, компонент - TTable1, TTable2. Застрял !!!
One minute, please...
А ты часом не переборщил? Индексы ведь могут быть как уникальными, так и нет! В мастер-таблице создается уникальный индекс (и/или первичный ключ - в одних СУБД эти понятия могут быть тождественны, в других - нет). В детальной по полю связи тоже желательно создать индекс, но НЕ УНИКАЛЬНЫЙ. И все будет чита-дрита!
А вот связывать их на уровне клиентского приложения, хоть и можно, но не рекомендуется в клиент-серверной архитектуре. Т.е., конечно, на уровне VCL может присутствовать связь между компонентами через свойство MasterSource, но это лишь для удобства представления данных, не более того. Контроль существования значений в мастер-таблицах, а также каскадное обновление/удаление - это прерогатива сервера (только вот не знаю, поддерживается ли это в Paradox).
В детальной по полю связи тоже желательно создать индекс, но НЕ УНИКАЛЬНЫЙ. И все будет чита-дрита!
А как в Database Desktop-e создать ключ, но не уникальный? Или я тоже ещё не отрезвел ?
А как в Database Desktop-e создать ключ, но не уникальный? Или я тоже ещё не отрезвел ?
Эээ... Ключ и индекс вещи разные. Ключ уникален всегда и является разновидностью ограничений на таблицу. Индекс же нужен для ускорения поиска данных в базе.
При создании индекса в DbD просто не ставь флажок Unique.
Эээ... Ключ и индекс вещи разные. Ключ уникален всегда и является разновидностью ограничений на таблицу. Индекс же нужен для ускорения поиска данных в базе.
При создании индекса в DbD просто не ставь флажок Unique.
Эт я знаю, сто такое ключ и что такое индекс, а ты наверное забыл что в парадолсе если ставить ключ, то поле автоматом становится уникальным. Так что мне либо не надо ставить ключ. Полюбому спасибо. Ща вроде всё работает. А как у тебя с IBExpert и FIBPlus?
в парадолсе если ставить ключ, то поле автоматом становится уникальным. А как у тебя с IBExpert и FIBPlus?
Может я конечно не чётко выразился, но я про это и писал. Просто изначальный твой вопрос был про индексы, а потом ты как-то плавно перешёл на ключи... Ну да ладно, главное что заработало.
А как у тебя с IBExpert и FIBPlus?
Честно говоря хреново, пару раз перегонял программы с InterBase на Oracle жутко матерился...
Может я конечно не чётко выразился, но я про это и писал. Просто изначальный твой вопрос был про индексы, а потом ты как-то плавно перешёл на ключи... Ну да ладно, главное что заработало.
Честно говоря хреново, пару раз перегонял программы с InterBase на Oracle жутко матерился...
Я тут пытаюсь перейти на FireBird и FIBPlus, но пока, что не совсем успешно. Помощь не откопал ещё, а с книжками проблема. Думаю разберусь.