Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

24 Октябрь 2020, 00:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 3   Вниз
  Печать  
Автор Тема: У меня есть база данных туристов, состоящая из двух свя...  (Прочитано 24869 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ForumOOo (бот)

Offline Offline

Сообщений: 742


« Стартовое сообщение: 26 Июль 2013, 12:20 »

Компонент: Base
Версия продукта: 4.0.x
Сборка: Apache OO
ОС: window XP

У меня есть база данных туристов, состоящая из двух связанных между
собой таблиц. Первая таблица Группы несет информацию общую о каждой
отдельно приезжающей группе (приезд, отъезд, оплата...) Вторая таблица
Туристы несет в себе персональную информацию о каждом человеке в
группе (дата рождения, паспорт и т.д.) и к какой группе они относятся.
То есть связаны эти таблицы общим полем Группы. В каждой таблице
хотела сделать ключевым полем автоматический счетчик,потому как
информация по каждому туристу и по каждой группе повторятся будет,
приезжают они не по одному разу. Но программа мне не дает так сделать.
Если в таблице Группы я выбираю ключом поле Код, то тогда не создается
связь между полем Группы(в таблице Группы) и и полем Группы (в таблице
Туристы). Связь могла создать только если ключом в таблице Группы
будет поле Группы. Но мне нужно чтобы оно не было уникальным! Второй
раз внести одну и ту же фамилию я уже не могу. Подскажите, где ошибка?

Тестовый файл: http://forumooo.ru/attachments/upload/dlya_foruma.docx (51.41 КБ)

--
Подпись: Лариса
Эл. почта: vzmorie@rambler.ru
Записан
CyberDaemon
Форумчанин
***
Offline Offline

Сообщений: 156


« Ответ #1: 26 Июль 2013, 12:41 »

Компонент: Base
Версия продукта: 4.0.x
Сборка: Apache OO
ОС: window XP

У меня есть база данных туристов, состоящая из двух связанных между
собой таблиц. Первая таблица Группы несет информацию общую о каждой
отдельно приезжающей группе (приезд, отъезд, оплата...) Вторая таблица
Туристы несет в себе персональную информацию о каждом человеке в
группе (дата рождения, паспорт и т.д.) и к какой группе они относятся.
То есть связаны эти таблицы общим полем Группы. В каждой таблице
хотела сделать ключевым полем автоматический счетчик,потому как
информация по каждому туристу и по каждой группе повторятся будет,
приезжают они не по одному разу. Но программа мне не дает так сделать.
Если в таблице Группы я выбираю ключом поле Код, то тогда не создается
связь между полем Группы(в таблице Группы) и и полем Группы (в таблице
Туристы). Связь могла создать только если ключом в таблице Группы
будет поле Группы. Но мне нужно чтобы оно не было уникальным! Второй
раз внести одну и ту же фамилию я уже не могу. Подскажите, где ошибка?

Тестовый файл: http://forumooo.ru/attachments/upload/dlya_foruma.docx (51.41 КБ)<br/><br/>--<br/>Подпись: Лариса<br/>Эл. почта: vzmorie@rambler.ru
Почему docx файл?
И пришлите нормальный файл базы, можно с парой - тройкой примеров только. Реальные данные не интересуют.
Записан
VlhOwn
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ростов-на-Дону
Сообщений: 1 076


« Ответ #2: 26 Июль 2013, 13:50 »

У Вас типичная связь один-ко-многим.
В таблице Туристы должно присутствовать поле Группа целого типа, куда заносится (уникальный) код записи из таблицы Группы.
А в запросах, чтобы получить имя группы для какого-либо конкретного туриста, Вы будете использовать конструкции вида
select ... Группы.Имя ... from ... Группы ....
where ... Туристы.Имя='бла-бла-бла' and Группы.Код = Туристы.Группа ...
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 26 Июль 2013, 14:04 »

Ну, насчет "один-ко-многим" , честно говоря, не уверен...
Лариса задачу описала скуповато... Но из описания вроде бы возникает предположение о связи "многие-ко-многим": каждый турист многократно может входить в разные группы.
Для реализации такой связи обычно заводят отдельную "кросс-таблицу" из трех полей: Id (просто для индексации записей), группа и код.
С нею увязывают две другие таблицы - теперь уже связями "один-ко-многим": одна запись из Группы - много записей из кросс-таблицы и одна запись из Туристы - много записей из кросс-таблицы...

Лариса, а образец базы все-таки кинь... Проще будет разговаривать
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
VlhOwn
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ростов-на-Дону
Сообщений: 1 076


« Ответ #4: 26 Июль 2013, 14:20 »

Один турист может быть членом сразу нескольких групп? Ну, разве что если в поездку едут А-Янус и У-Янус как одно лицо Улыбка

Upd.: Я тут, безусловно, подразумеваю, что Иванов И.И., едущий в два тура подряд, - это разные люди, т.е. идентификации по персональным данным, очевидно, недостаточно.
« Последнее редактирование: 26 Июль 2013, 14:26 от VlhOwn » Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754

Woe from wit


« Ответ #5: 26 Июль 2013, 14:50 »

Один турист может быть членом сразу нескольких групп?
Может.
Потому что он в разное время ездил в разных группах, и в таблицах это должно быть зафиксировано.
Особенность этой задачи в том, как рассматривать связи - одновременно (на период одной поездки группы) или за весь период существования тур агентства.
Записан
Лариса
Участник
**
Offline Offline

Сообщений: 19


« Ответ #6: 26 Июль 2013, 15:14 »

Выкладываю базу.
Связь должна быть один-ко многим.
Поле Группа в таблице Группа не должно быть ключевым, т.к. Фамилии повторяются, но иначе программа не дает создать связь между таблицами.
Объясняю ситуацию: туристы приезжают групой, из которой один человек как бы контактное лицо, на его фамилию мы ориентируемся: Группа Иванова приезжает такого то числа, группа Иванова оплатила тур и т.д. Некоторые приезжают не один раз. Состав может меняться, но контактное лицо как правило не меняется - это уже наш постоянный клиент. Проблема в том, чтоя не могу сделать поле Группа/Группы не ключевым, иначе не создается связь между таблицами

[вложение удалено Администратором]
Записан
CyberDaemon
Форумчанин
***
Offline Offline

Сообщений: 156


« Ответ #7: 26 Июль 2013, 15:32 »

Выкладываю базу.
Связь должна быть один-ко многим.
Поле Группа в таблице Группа не должно быть ключевым, т.к. Фамилии повторяются, но иначе программа не дает создать связь между таблицами.
Объясняю ситуацию: туристы приезжают групой, из которой один человек как бы контактное лицо, на его фамилию мы ориентируемся: Группа Иванова приезжает такого то числа, группа Иванова оплатила тур и т.д. Некоторые приезжают не один раз. Состав может меняться, но контактное лицо как правило не меняется - это уже наш постоянный клиент. Проблема в том, чтоя не могу сделать поле Группа/Группы не ключевым, иначе не создается связь между таблицами
То есть группа - это не название(условное обозначение) группы, а фамилия контактного лица, так?
Записан
Лариса
Участник
**
Offline Offline

Сообщений: 19


« Ответ #8: 26 Июль 2013, 15:41 »

Да,это фамилия контактного лица, ну как бы название группы. И он тоже входит в состав группы
Записан
CyberDaemon
Форумчанин
***
Offline Offline

Сообщений: 156


« Ответ #9: 26 Июль 2013, 15:56 »

Да,это фамилия контактного лица, ну как бы название группы. И он тоже входит в состав группы
А что, если "группа" сделать числовой и уникальной, Group_ID например. 2-х групп с одинаковым ID не надо?
А контактное лицо привязать к Group_ID отдельную таблицу.
Group_ID -> контакное_лицо.
Для запросов применять Group_ID, а для вывода контактного лица уже амилию из таблицы.
Записан
VlhOwn
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ростов-на-Дону
Сообщений: 1 076


« Ответ #10: 26 Июль 2013, 17:38 »

Лариса,
Вам нужно сделать некий ключевой агрегат, который будет однозначно идентифицировать группу.
Например, это может быть фамилия контактного лица, срок тура, место назначения. Это будет таблица Группы. Выглядеть она будет, например, так:
1 Иванов 1.1.13 Турция
2 Петров 1.1.13 Египет
3 Иванов 10.3.13 Гадюкино
...
Ключевым полем в ней является номер записи, понятно, что он уникальный.
Далее, остальных членов групп Вы вносите в таблицу, например, Туристы, в которой всего три поля: ключ, ФИО, номер группы из таблицы Группы. Тем самым Вы однозначно связываете туристов с группами. Все остальные данные - это другие таблицы, привязанные либо к ключу группы, если это инфв о группе, либо к ключу туриста, если это персональная информация.
Записан
Лариса
Участник
**
Offline Offline

Сообщений: 19


« Ответ #11: 26 Июль 2013, 18:26 »

Всем спасибо! Буду пробовать! Потом напишу
Записан
Лариса
Участник
**
Offline Offline

Сообщений: 19


« Ответ #12: 27 Июль 2013, 19:08 »

Добрый вечер! Создала я новую структуру своей базы. Пользовалась советом
VlhOwn Ветеран. Правильно ли я сделала?

[вложение удалено Администратором]
Записан
VlhOwn
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ростов-на-Дону
Сообщений: 1 076


« Ответ #13: 28 Июль 2013, 10:55 »

Здравствуйте, Лариса Новичок!
(Представляю, какое изумление вызовет у Вас последовательная смена фамилии на Старожил, Ветеран и, чем черт не шутит, Гуру!)

Вы сделали правильно, но не совсем:

1). Таблицы 1 и 4 содержат дублирующуюся информацию о заезде - это избыточно и ОЧЕНЬ неудобно: придется следить за тем, чтобы она была одинакова. Может быть Таблицу 1 убрать вовсе (при этом код группы в Таблице 4 нужно сделать автополем, а сама таблица будет тем самым вожделенным списком групп)?

2). Вы говорили, что идентифицируете группы по фамилии контактного лица. Я правильно понимаю, что это лицо - тоже турист и будет присутствовать в таблице 2? Тогда, может быть, в таблице 4 завести еще поле "руководитель", которое будет ссылаться на таблицу 2? Ваши группы тогда будут идентифицироваться привычным для Вас образом:
  1  Иванов  1.1.13  15.1.13  самолет
 2  Петрова  3.1.13  20.1.13  ступа

Заодно это позволит различать группы с одинаковыми сроками заезда/выезда.

3). Раньше у Вас была еще какая-то финансовая информация - оплатил/не оплатил и т.п. Теперь я ее не вижу, но, возможно, это из разряда "дураку полработы не показывают".

[любопытство]
1. Ни в Вашем предыдущем проекте, ни в этом я не увидел информацию о том, куда едет группа. Они у Вас все в одно место едут или Вам это фиолетово? Или Вы и есть то самое место?
2. Вы, когда закончите делать базу, намерены использовать ее на одном рабочем месте или на нескольких одновременно?
[/любопытство]
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754

Woe from wit


« Ответ #14: 28 Июль 2013, 15:22 »

Следовало бы обратить внимание на совет JohnSUN.
Вот так, например:


[вложение удалено Администратором]
Записан
Страниц: 1 2 3   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!