|
|
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Имеется структура "регион-площадь-куст-скважина-ствол", пять простых таблиц, иерархично связанных между собой. Записи в таблице "группа" могут принадлежать любой из таблиц "регион-площадь-куст-скважина-ствол" (наверное, это не хорошо с т.з. НФ). Все получилось хорошо, но GroupQuery.DataSource только один, а GroupQuery.SQL[0] = BaseGroupSQL = 'SELECT * FROM Groups WHERE RegionNo = :RegionNo OR FieldNo = :FieldNo ' + 'OR BushNo = :BushNo OR WellNo = :WellNo OR StemNo = :StemNo ' + 'ORDER BY DataOwnerKind ASC, Caption ASC;'; Как заставить таскаться GroupQuery от пяти DataSource "регион-площадь-куст-скважина-ствол", какие события задействовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 14:59 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Подскажите, пожалуйста, по опыту и по теории ситуация, когда записи одной таблы ссылаются на несколько других табл - это жизненная ситуация или бред новичков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 16:56 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Это нормально с точки зрения теории нормализации и очень часто непреемлемо с точки зрения производительности. Что до первого вопроса, то я не понял, чего надо. Мсожет запрос с UNION ALL тебя спасёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:25 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
может, я чего не понял, а что бы не сделать idgroup в каждой из таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:35 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
А, я тоже кажись въехал, чего надо. У тебя одно поле типа внешнего ключа, только на разные таблицы может ссылаться. Не знаю, хорошо ли это с точки зрения теории, но иногда полезно. Тебе надо или все таблицы объединить в представлении и из этого представления уже запрос делать (хотя этот запрос будет неоптимальным), или писать ХП, или подумать над объединением таблиц в одну, т.е. денормализации. Может ещё кто чё посоветует ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:46 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
у меня есть практика такая (я ее как-то сдесь уже выдавал) person ====== id shortname type (i/j) jurperson ========= id type (всегда j) longname orgtype idhead ... indperson ========= id type (всегда i) surname firstname parentalname birthdate gender .... По моему, очень "нормально" и "реляционно" ;) Можно сделать foreignkeys с каскадами и все такое ===================== По поводу групп. zDIV, вот у тебя группа может быть одна и та же у региона и у куста? Что это вобще за объект такой - "группа"? Я так понимаю, там инфо о пацанах, которые приватизировали объект? ;) То есть в одной группе может быть по нескольку объектов разных типов. Тогда делай поле idgroup в каждой таблице, и не мучайся! зы. ты с Ренды или с Форштадта? ;))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 18:14 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Так, наконец-то я добрался до форума! Группы содержит записи, каждая из котрых может принадлежать только одной записи из других 5-и таблиц (т.е. табла Группы содержит 5 внешних ключей, которые должны ссылаться одновременно на 5 записей из этих 5-и табл, что достигается наличием 5-и служебных записей, по одной на каждую таблу с No=0, а на Группах ограничение - только одно из 5-и внешних ключей обязательно <> 0, остальные =0). Итак, Regions --- RegionNo INTEGER ... Caption ... Remark ... Fields --- FieldNo INTEGER ... Caption ... Remark ... RegionNo INTEGER ... FOREIGN KEY (RegionNo) REFERENCES Regions ... Bushes --- BushNo INTEGER ... Caption ... Remark ... FieldNo INTEGER ... FOREIGN KEY (FieldNo) REFERENCES Fields ... Groups --- GroupNo INTEGER ... Caption ... ... RegionNo INTEGER ... FieldNo INTEGER ... BushNo INTEGER ... FOREIGN KEY (RegionNo) REFERENCES Regions, FOREIGN KEY (FieldNo) REFERENCES Fields, FOREIGN KEY (BushNo) REFERENCES Bushes ... ... INSERT INTO Regions VALUES (0, 'Service record', NULL); INSERT INTO Fields VALUES (0, 'Service record', NULL, 0); INSERT INTO Bushes VALUES (0, 'Service record', NULL, 0); ... Все отлично, но как заставить GroupADOQuery таскаться от 5 DataSource'ов? Или безобразно реализована реляционная модель?.. Но суть такова. Регион содержит площади, площадь - кусты, и т.д., а однотипную информацию (записи таблы Группы) необходимо размещать как для региона, так и для скважины. Не смешно ли я хотя бы реализовал модель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 15:56 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Может быть, по-проще сформулировать вопрос?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 13:33 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Ты извини,может из-за вчерашней попойки, но лично я опять ничего не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 13:43 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Я про GroupADOQuery пока не могу консультировать. а про модель - из того, что я понял, все равно мне кажется, что легче было бы сделать в каждой таблице idgroup. Если нельзя, чтобы одна запись в group была и про куст и про скважину, тогда можно сделать как я в юриках/физиках - в каждой таблице idgroup и type, и форин ки по двум полям каждой таблицы c Groups. В таблицах же кустов и скважин и пр. сделать check, чтобы нельзя было бы вставить type неправильный. скважина: check type=1 куст: check type=2 и т.д. но ты не комплексуй (смешно-несмешно) - так тоже пойдет. Я вот в Англии был - там знаешь как пишут, просто смерть. ;) 2all: подскажите человеку про GroupADOQuery, я не знаю кто это, в Жабе этого нету ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 16:19 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Вопросы от feed... ***zDIV, вот у тебя группа может быть одна и та же у региона и у куста? Что это вобще за объект такой - "группа"? Я так понимаю, там инфо о пацанах, которые приватизировали объект? Одна группа принадлежит только одной записи любой из 5-и таблиц... и служит узлом (на нее ссылаются записи из третьих таблиц) для размещения кучи скучной информации по конкретному региону, или по конкретной площади, или конкретной скважины, или... ***зы. ты с Ренды или с Форштадта? ;))) Из Степного, перебрался в Южный. Огромное спасибо всем. GroupADOQuery я все-таки заставил таскаться от 5-и DataSources, использовал всякие события и т.п., неописать, но все получилось отлично - GroupADOQuery переоткрывается при любой навигации по одному разу на каждый существенный чих... Несмотря на англичан (мы, кстати, на работе насмотрелись на иностранцев (нас типа два года постоянно продают), в т.ч. и на англичан)., подозрение вызывает тот факт, что в лит-ре нет подобных вещей, но компексовать больше не собираюсь, хотя очень хочется сделать оптимально... Теперь короче (вместо 5-и - 3)... суть такова... Regions(RegionID, ...); Fields(FieldID, ..., RegionID); Wells(WellID, ..., FieldID); Groups(GroupID, ..., RegionID, FieldID, WellID) CHECK (RegionID = 0 AND FieldID = 0 AND WellID = 0) OR (RegionID <> 0 AND FieldID = 0 AND WellID = 0) OR (RegionID = 0 AND FieldID <> 0 AND WellID = 0) OR (RegionID = 0 AND FieldID = 0 AND WellID <> 0). Да!!!!!! Из примера feed я понял, что мне нужно пометить - Группы не могуть жить без соответсвующих записей в Регионах, Площадях, Скважинах, ... С этой т.з. записи в Группах вторичны к записям в РПС... В примере feed этот момент присутствует наоборот (Персоны первичны по отношению к юрикам и физикам)!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2003, 09:25 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Объясняю популярно :) Нужно было не в Group хранить ссылки в 5 разных поляхх на 5 ID таблиц в регионе, кусте и т.д., а в самих регионах, кустах, скважинах и т.п. завести поле, которое бы ссылалось на ID группы, которая хранит для неё соответсвующую информацию. Вот тогда всё было бы намного проще (не пришлось бы кучу полей проверять в Group и писать многоэтажные выражения :) ). На счёт ключей даже не знаю. С точки зрения теории вроде как правильно, а вот с точки зрения практики... При такой структуре можно обрести больше проблем, чем плюсов. Если всё работает, то я бы не стал огород с ключами городить, либо какую нибудь хранимую процедуру под это дело сделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 10:37 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Верно... Да, я полный балбес по объяснению собственных проблем... Не могу я в Регионах (Площадях, Кустах, Скважинах, Стволах) организовать ключ на группу, поскольку групп может быть несколько для каждой из записей в Р (ПКСС)..., кроме того, напомню, что таблы РПКСС первичны по отношению к Группам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 13:13 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
При первичность. Если например, у тебя есть таблица Человек, и там есть поле КодПрофессии, КодСтраны, то ведь не получится, что Профессия и Страна первична по отношению к Человеку? Так и здесь (если один КПСС(Р) - одна группа) Регион - КодГруппы, Куст - КодГруппы и т.д. А если надо один РКПСС - несколько групп, то я бы не задумываясь сделал бы отдельную таблицу ГруппаГрупп ГруппаГрупп =========== КодГруппыГрупп КодГруппы И в таблицах ССКРП сделал бы КодГруппыГрупп. Получается, конечно, сложный огород, поэтому, может быть, если подумал бы, то сделал как у тебя... не знаю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 13:25 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Беседа меня заводит... Про первичность... Может я путаю термины, но Профессия и Страна действительно с т.з. логики БД первичны, поскольку таблу Человек можно грохнуть и таблы П и С (как я себе их представляю, ведь они не зависят от людей) ничего и не почувствуют, а наоборот!!! Вот я и считаю, что таблы П и С первичны по отношению к табле Ч из примера feed. Да и в скрипте в самом простом варианте следует сначала создать таблы П и С, а потом Ч с ссылками на П и С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 13:39 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Таблы П и С (их записи) не зависят от таблы Ч (ее содержимого), с др. стороны не возможно создать корректную запись Ч, если не будут корректно заполнены таблы П и С, именно и это я и считаю первичностью ("информационно-логической первичностью" таблиц П и С по отношению к табле Ч), хотя, может, существует более правильный термин. Да, и спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 13:52 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
zDIV !!! А может вообще отказаться от этих пяти таблиц и использовать дерево. Т.е. вместо Region, Field, Bush, Well и Stem - таблица Object Код: plaintext 1. 2. 3. 4. 5. 6. И мне кажется, твои проблемы будут решены проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 14:32 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Да, приемлимо, обдумывалось. Но серверная часть от этого только усложниться, поскольку необходимо будет насыщать таблу DataOwners (Objects) всякими ограничениями и тригерами, поскольку эти пять "таблиц" по своей сущности связаны иерархично, что занчительно упрощается при использовании 5-и отделных табл. А на клиенте все равно необходимо все эти записи (теперь уже из представлений, по сути те же таблы) показывать отдельно, такова особенность навигации для моей задачи, и опять таже самая проблема, показывать все группы данных для текущих региона, площади, куста, скважины, ствола. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 14:46 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
В догонку ... А если у тебя одной записи в Group может соответсвовать только одна запись в твоих твоиз таблицах, то можно вообще добавить эти поля (из Groups) в туже таблицу. И гоняй себе на здоровье по всем направлениям ... P.S. Когда-то было дело - был геофизиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 14:47 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Вот тут ссылка на работу с деревьями, может чего и откапаешь. Я пользовал - достаточно удобно. http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 14:50 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
zDIV, да, это в ERwinе называется Independent Entity и Dependent Entity... Ну я просто делился мыслями, а если твой check нормально и приемлемо быстро раобтает, пусть так остается. Dnico, да, действительно, таблицы Region. Stem, Field и т.д. кажется, имеют одинаковую структуру (а я то сразу не обратил внимание), и их может быть можно было бы объединить в 1 таблицу, сделать поле type (чтобы понять, Well это или Region), и как-нибудь добиться, чтобы нельзя было бы, чтобы у Regionа был бы parentом куст какой-нибудь. Однако это не даст в дальнейшем развивать систему, все-таки, регион это не скважина, совсем другая вещь, могут понадобиться специфические поля. Поэтому в разных таблицах лучше, я думаю. зы. и fedd я, а не feed :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 14:57 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
zDIV Однако это не даст в дальнейшем развивать систему, все-таки, регион это не скважина, совсем другая вещь, могут понадобиться специфические поля. Поэтому в разных таблицах лучше, я думаю. Это само собой. Но насколько я понимаю в геологии, то представленная тобой структура данных - это данные геологических съемок. Не думаю, что бы данные серезно отличались, так как Groups то для всех одна. Что касается самих 5-ти таблиц, может они и имеют отличные поля, но всегда же можно их использовать по своему назначению. И мне все же кажется, что дерево намного быстродействущее, чем множество таблиц. Там можно решать многие проблеммы рекурсивными ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 15:12 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
feed прав. В Вашем случае нужно было сделать ещё одну таблицу "ГруппыГрупп" :). Одно поле - идентификатор куста, региона, скважины и т.п. Второе - код записи в таблице "Группа". Правда, если ключи у этих пяти таблиц могут совпадать, то либо PrimaryKey не делать, либо добавить ещё одно автоинкрементное поле для обеспечения уникальности и PrimaryKey делать по всем трём полям. В запросе необходимо из таблицы "ГруппыГрупп" выбрать все записи, которые в первом поле имеют нужный ID и к ним присоединить записи из таблицы "Группа". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 15:13 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
fedd, извини, пожалуйста за каверкание ника, не специально я... и спасибо за объяснения по поводу преимущества использования разных табл, более существенного, чем сложность поддержания иерархии записей в объединенной табле DataOwners(DataOwnerID, DataOwnerType, ...), что меня первоначально остановило, действительно это различные по своей природе объекты и стало быть все может случиться... P.S. Точно работаю в геофизике. Dnico, спасибо за ссылку, ухожу туда... А включить поля Групп в 5 табл не получится, как я уже сообщал, тут связи многие (записи групп) к одной (записи одной из 5-и табл). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 15:15 |
|
||
|
Проблема со структурой
|
|||
|---|---|---|---|
|
#18+
Пока писал ответ, отвечали и мне, спасибо. Перевариваю ГруппыГрупп... По-моему, это ничего не меняет, ведь для клиента необходимо выполнять навигацию отдельно по РПКСС... Да, геофизика (да еще оперативно-промысловая) не совсем геология, и обсуждаемая часть БД ничто по сравнению с неосвещенной частью в плане не сложности логики, а кол-ва записей и объема данных в целом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2003, 16:19 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32199664&tid=1580280]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
194ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 538ms |

| 0 / 0 |
