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

Тема в разделе "SQL", создана пользователем ioni, 22 мар 2007.

  1. ioni

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    Я окончательно перестал понимать, что происходит.

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

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

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

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

    Я чувствую, что решение – рядом, но никак не могу его найти…
    [​IMG]
     
  2. Barmutik

    Barmutik Гость

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

    ioni Well-Known Member

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

    Barmutik Гость

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

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    Конечно. неправильный. как же....

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

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

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

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

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

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

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    PRIMARY KEY

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

    Barmutik Гость

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

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

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

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    [Мне кажется вверху я сделал достаточно емкое пояснение...]
    Какая должна быть структура базы данных?
     
  9. ioni

    ioni Well-Known Member

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

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

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    КАЖДОЙ записи в таблицах SubSection 1 и SubSection2 могут соответствовать несколько записей в таблице Other, которая явлется починенной по отношению к каждой из них.
     
  11. ioni

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    Были идеи?
     
  12. ioni

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    sax_ol, ты чё, издеваешься?
    Начинай читать с начала...



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

    Вложения:

  13. ioni

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    Хорошо.
    Убираем все сложность описания и оставляем непосредственную задачу.

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

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

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


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

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    Пришли по почте, потому что я уже не могу представить даже, как это все работает....
    Соблюдая целостность данных такого не может быть. потому что ID в двух основных таблицах могут совпадать, поэтому подчиненная не может сохраняться...
     
  15. ioni

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    Вот смотрю и понимаю - ну не может оно работать!

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

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

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

    ioni Well-Known Member

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

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

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

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

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

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    0
    sax_ol?
    Где твой вариант?!
     
Загрузка...

Поделиться этой страницей