Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Тест связи один к одному / 8 сообщений из 8, страница 1 из 1
18.09.2019, 17:35
    #39863472
vgrafin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест связи один к одному
Access10, W7 или W10. Ни когда не возникало необходимости в связи 1-1. Надо проверить, как работает.(Ну например разделить широкую таблицу на поля нужные и не очень). 2 таблицы- таб1(поля ID и f1-текст)(и создана первой) и таб2(поля ID-ключ и f2 -текст). Связываем по ключу. Начинаем заполнять. Заполняем строку f1 в Таб1. Ok-Запись создана. Заполняем строку f2 в Таб2 -ОК -появилось 2 первых записи. Теперь наоборот, делаем вставку записи в Таб2. Ругается -"Требуется связанная запись в Таб1". Без 'Esc' переходим в Таб1 и делаем вторую запись. ОК - в обеих таблицах 2 записи. Т.е. Таб1 ведёт себя как главная.
Далее. Из Таб2 можно удалять запись. После этого можно и Тав1 соответствующую запись, наоборот -НЕТ.
Ставим в связи каскадное удаление. При удалении из Таб1 происходит каскадное удаление, из Таб2 -запись удаляется, а каскадно из Таб1 -НЕТ. Тоже получается какая-то неравнозначность таблиц.
Где-нибудь описано поведение 1-1? В форуме от 10года нашёл обсуждение "один в один", но там конкретное обсуждение чьей-то ситуации.
...
Рейтинг: 0 / 0
18.09.2019, 18:14
    #39863505
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест связи один к одному
vgrafinТоже получается какая-то неравнозначность таблиц.
так и задумано
И не важно какое отношение : 1:М или 1:1, - всегда есть "внешняя таблица" (главная), на которую создается "внешний ключ" зависимой таблицы
...
Рейтинг: 0 / 0
18.09.2019, 19:40
    #39863553
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест связи один к одному
vgrafin,

Если у вас одна таблица содержит <255 столбцов ,то смысла использовать связь 1:1 нет. Единственное практическое применение данного отношения в аксессе ,это если у вас безумное количество столбцов, которое нужно выводить на одном уровне. Так как максимальное число столбцов в одной аксесовской таблице не может быть >255 , то такую таблицу как правило делят на две, с одинаковым названием и типом индекса в обеих таблицах. Чтобы в случае чего собрать по быстрому в запрос данные из обеих.

И да, по поводу добавлений,изменений. Изменения нужно делать синхронно в обеих таблицах, и ключевые поля типа счетчик вообще не использовать . Просто юзать индексированные поля. Которые программно нужно обновлять для обеих таблиц.
...
Рейтинг: 0 / 0
18.09.2019, 21:29
    #39863594
Чотакакта
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест связи один к одному
Сергей ЛаловЕсли у вас одна таблица содержит <255 столбцов ,то смысла использовать связь 1:1 нет.Не был бы столь критичен, поскольку практическое применение все же бывает. Навскидку могу привести пару случаев:

1. На размер одной записи накладывается ограничение 4кб, если не ошибаюсь, поэтому вместить в одну запись больше 8-10 полей "Короткий текст" с 255 символами не получится. Тут на помощь приходят либо Мемо-поля, либо дополнительные таблицы 1:1

2. Если таблица содержит часто используемые данные и данные, используемые крайне редко, то из соображений производительности редко используемые данные лучше вынести в отдельную таблицу со связью 1:1 - работа с часто используемыми данными будет выполняться быстрее, поскольку данных в таблице меньше (дисковые операции, сетевой трафик, пропускаемый через движок объем данных и т.п.)
...
Рейтинг: 0 / 0
18.09.2019, 21:47
    #39863599
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест связи один к одному
ЧотакактаСергей ЛаловЕсли у вас одна таблица содержит <255 столбцов ,то смысла использовать связь 1:1 нет.Не был бы столь критичен, поскольку практическое применение все же бывает. Навскидку могу привести пару случаев:

1. На размер одной записи накладывается ограничение 4кб, если не ошибаюсь, поэтому вместить в одну запись больше 8-10 полей "Короткий текст" с 255 символами не получится. Тут на помощь приходят либо Мемо-поля, либо дополнительные таблицы 1:1

2. Если таблица содержит часто используемые данные и данные, используемые крайне редко, то из соображений производительности редко используемые данные лучше вынести в отдельную таблицу со связью 1:1 - работа с часто используемыми данными будет выполняться быстрее, поскольку данных в таблице меньше (дисковые операции, сетевой трафик, пропускаемый через движок объем данных и т.п.)

Да,вы правы. Но по второму пункту с оговоркой наверное- это в случае вывода данных всех полей из таблицы. Можно представить таблицу с полями
[key],[поле_часто_выводимое1],[поле_часто_выводимое2],[поле_редко_выводимое1],[поле_редко_выводимое2]

И просто при запросе не указывать поля,которые редко выводятся:
Код: sql
1.
SELECT [key],[поле_часто_выводимое1],[поле_часто_выводимое2] FROM таблица



В этом случае скорость выборки и передачи норм)
...
Рейтинг: 0 / 0
19.09.2019, 18:34
    #39864164
vgrafin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест связи один к одному
Да практической задачи и не было. Аксом пользуюсь давно, но про 1:1 информация попадалась только в смысле, что есть такая и как бы можно использовать. Таблица связываются по ключу - ну связал, попробовал. Придётся согласиться , что одна главная. Какая? Наверное та, которую первой забросили в схему? Для >256 скорее всего надо переходить другие базы. Но получился довольно неожиданный результат. Попробую просто с индексированными.
...
Рейтинг: 0 / 0
20.09.2019, 09:54
    #39864405
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест связи один к одному
vgrafinПридётся согласиться , что одна главная. Какая? Наверное та, которую первой забросили в схему?Что значит "какая" ?

Та на которую REFERENCES
Код: vbnet
1.
2.
3.
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);


Если FK создается через интерфейс, то там "зависимая" таблица обзывается "связанной", и "главной" Access предлагает сделать ту, с которой "тянут" связь, а "подчиненной" - в которую "притянули" связь
...
Рейтинг: 0 / 0
20.09.2019, 11:52
    #39864473
vgrafin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест связи один к одному
тестирую первый вариант связи (For Each Tab For Each Ind In T.Indexes). Действительно для обеих таб. PK: True, FK: False, индекс на 2й таб. Ind: Таблица1Таблица2 Поля: +id PK: False, FK: True.
Далее: Таблица3 и Таблица 4. Поля id - сняты первичный ключ(и счётчик заодно) и установлены в УникальныйИнд, Обязательное. Связываею(через интерфейс - тащим от Т3 к Т4) Пробуем вводить данные. В Таблицу3 можно вводить первой-затем в Таблиицу4. Наоборот нельзя.
Проверяем. На обеих по полю id PK: False, FK: False, на Таблице 4 Ind: Таблица3Таблица4 PK: False; FK: True
Тащим связь в другую сторону - на Таблице 3 Ind: Таблица4Таблица3 PK: False; FK: True.
Действительно, всегда "2я" "подчинённая".
Спасибо, что напомнили про REFERENCES. Программно создавать и связывать таблицы, необходимости не было, тем более 1-1, а из граф. интерфейса(Индексы) этого не просматривается.
ВЫВОД: ну никак без начальников.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Тест связи один к одному / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]