• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы ioni
  • Дата начала
I

ioni

Я окончательно перестал понимать, что происходит.

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

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

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

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

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

Barmutik

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

ioni

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

Barmutik

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

ioni

Конечно. неправильный. как же....

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

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

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

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

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

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

ioni

PRIMARY KEY

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

Barmutik

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

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

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

ioni

[Мне кажется вверху я сделал достаточно емкое пояснение...]
Какая должна быть структура базы данных?
 
I

ioni

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

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

ioni

КАЖДОЙ записи в таблицах SubSection 1 и SubSection2 могут соответствовать несколько записей в таблице Other, которая явлется починенной по отношению к каждой из них.
 
I

ioni

sax_ol, ты чё, издеваешься?
Начинай читать с начала...



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

Вложения

  • working_sample.gif
    working_sample.gif
    58,5 КБ · Просмотры: 608
I

ioni

Хорошо.
Убираем все сложность описания и оставляем непосредственную задачу.

У нас есть две таблицы, во многом схожие между собой (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 заявляет о нарушении целостности таблиц (понятное дело!)
 
I

ioni

Пришли по почте, потому что я уже не могу представить даже, как это все работает....
Соблюдая целостность данных такого не может быть. потому что ID в двух основных таблицах могут совпадать, поэтому подчиненная не может сохраняться...
 
I

ioni

Вот смотрю и понимаю - ну не может оно работать!

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

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

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

ioni

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

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

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

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!