Создание отношения между таблицами в Access

ioni

Well-known member
11.05.2006
340
0
#1
Я окончательно перестал понимать, что происходит.

У меня есть таблица, две подтаблицы которой похожи между собой. Мне нужно сделать так, чтобы было установлено отношение между этими подчиненными таблицами (которые содержат одинаковые поля, на рисунке – DataID – как ключ, и SectionRef – ссылка на основную таблицу).

Так вот, мне нужно чтобы уникальные записи таблицы Other исключительно соотносились с каждой записью в одной из таблиц SubS – 1 или 2.

Я прилагаю рисунок, потому что не очень понимаю, как это можно сделать.

Я пытался сделать источником ссылки запрос на объединение (UNION двух таблиц, но ведь они же сдержат одинаковые ключи!), так что этот вариант провалился.

Я чувствую, что решение – рядом, но никак не могу его найти…
 
B

Barmutik

#2
Честно скажу .. пытался вникнуть .. но не смог в итоге понять что надо :angry:
 

ioni

Well-known member
11.05.2006
340
0
#3
Есть таблица Section - основная таблица.
Каждой записи в таблице Section может соответствовать несколько записей в одной из подтаблиц SubSection 1 и Subsection 2.
КАЖДОЙ записи в таблицах SubSection 1 и SubSection2 могу соответствовать несколько записей в таблице Other, которая явлется починенной по отношению к каждой из них.
 
B

Barmutik

#4
Отлично .. понятно .. и что надо сделать ещё раз ?
 

ioni

Well-known member
11.05.2006
340
0
#5
Конечно. неправильный. как же....

Ладно, хотите сделать все непонятнее? Пожалуйста...
Есть договор, данные по нему находятся в таблице Sections
Сам договор может быть на одних условиях SubSection1 или на других условиях которые отражены в таблице SubSection2. Совершенно очевидно, что каждой уникальной записи Sections могут соответствовать несколько записей, но только одной из подчиненных SubSection таблиц, а не двух одновременно.

При этом есть таблица Размещение (Others), которая может иметь несколько записей, соответствующих каждой уникальной записи в одной из соответсвующих таблиц SubSections.

Соответственно, возможна ситуация, когда SectionID1 соответствуют две записи SebSection1ID1 и SebSection1ID2, каждой из которых соответствует энное количество записей Others. И при этом записи в основной таблице SectionID2 соответствуют две (например) записи SebSection2ID1 и SebSection2ID2.

Проблема в том, что ключи в каждой из таблиц могут совпадать.
При этом объединить две подчиненных таблицы не представляется возможным, потому что на самом деле их три и вероятно будет до пяти и все имеют разную структуру (которая с точки зрения Others не имеет значения. Главное, что в любой подчиненной таблице будут два поля - ID, понятное дело, и SectionRefernece – ссылка на запись в основной таблице.

Конечно, можно сделать все это без создания связи между таблицами, но хотелось бы поддерживать единство данных, а без связи такое мне кажется невозможным…

Случайный вопрос: может быть, использовать вторичный ключ?
 

ioni

Well-known member
11.05.2006
340
0
#6
PRIMARY KEY

Чтобы не было вопросов, в каждой из указанный подтаблиц SubSection 1 и SubSection 2 ключевым столбцом является DataID. Поскольку это две разных таблицы, а DataID - счетчик, то естественно. что они будут совпадать.
 
B

Barmutik

#7
Ну вроде всё более менее стало понятно .. и что в итоге надо сделать ?

Я не знаю предметной Вашей облсти .. но такая организация структуру немного меня смущает ... а может и не немного :)

Ну и в любом случае .. и что требуется сделать ?
 

ioni

Well-known member
11.05.2006
340
0
#8
[Мне кажется вверху я сделал достаточно емкое пояснение...]
Какая должна быть структура базы данных?
 

ioni

Well-known member
11.05.2006
340
0
#9
Самая главная таблица - Section.
Ей соответствуют две таблицы.
SectionRefernce в подчиненных таблицах нужен именно для этого - но таблиц - ДВЕ (а будет ПЯТЬ и больше). И записи соответствуют уникально, то есть, либо в одной таблице, либо в другой. Не может быть так, что записи в одной и в другой имеют одинаковый Section Reference.

Каждой записи в подчиненных таблицах соответсвуют записи в еще более подчиненной таблице (уже одной)
 

ioni

Well-known member
11.05.2006
340
0
#10
КАЖДОЙ записи в таблицах SubSection 1 и SubSection2 могут соответствовать несколько записей в таблице Other, которая явлется починенной по отношению к каждой из них.
 

ioni

Well-known member
11.05.2006
340
0
#12
sax_ol, ты чё, издеваешься?
Начинай читать с начала...



Если не подходит мой рисунок - вот вам схема данных Access
Должно интересовать только то, что обведено красным
 

Вложения

ioni

Well-known member
11.05.2006
340
0
#13
Хорошо.
Убираем все сложность описания и оставляем непосредственную задачу.

У нас есть две таблицы, во многом схожие между собой (Table01 и Table02).
Каждой записи в каждой из этих таблиц соотвествует несколько записей в подчиненной таблице Subtable.

Как это организовать?

Код:
		 [b]Table01[/b]		  
|
|				[b]SubTable[/b]
|
|___Page01
|	 |______________>ID1
|	 |______________>ID2
|___Page02
|	 |______________>ID3
|___Page03
|______________>ID4


[b]Table02[/b]
|
|
|
|___Page01
|	 |______________>ID5
|	 |______________>ID6
|___Page02
|______________>ID7
Когда я пробую реализовать такое, Access заявляет о нарушении целостности таблиц (понятное дело!)
 

ioni

Well-known member
11.05.2006
340
0
#14
Пришли по почте, потому что я уже не могу представить даже, как это все работает....
Соблюдая целостность данных такого не может быть. потому что ID в двух основных таблицах могут совпадать, поэтому подчиненная не может сохраняться...
 

ioni

Well-known member
11.05.2006
340
0
#15
Вот смотрю и понимаю - ну не может оно работать!

В Table01 у нас три страницы - допустим, ID у них 01, 02 ,03
В Table02 у нас две страницы - так у них ID тоже будет 01,02

Таким образом получается, что в подтаблице Subtable возникают неоднозначные связи - это когда невозможно сказать, к какой из основных таблиц относится запись....

Как мне избавиться от этой неоднозначности при соблюдении цельности данных?
 

ioni

Well-known member
11.05.2006
340
0
#16
Одним словом, я поступил пока следующим образом:
создал отдельные explicit связи, которые поддерживат цельность данных (каждая свою) для каждой таблицы - так что я могу открыть подтаблицу из любой основной таблицы.

По умолчанию значение поля Refernce = Null, так что подчиненная запись создается ТОЛЬКО по отношению к вызвавшей ее таблице.

Не очень красиво - но зато работает как часы.
Если понадобиться добавить еще одну основную таблицу - то просто еще одно поле добавиться в подтаблицу.

Я не предполагаю, чтотаких основных таблиц может быть вообще больше пяти, но таблица выдержит и пятьсот :(

sax_ol, но я всегда готов смотреть на твое решение. В нем, кстати, обязательно должны соблюдаться условия о цельности данных