Страница 1 из 1

Multi-criteria relationshp. Использование.

Добавлено: 07 ноя 2018, 10:34
OlegZ
Господа, помогите справиться с такой задачкой:
Имеем таблицы "Персона", "Компания" и "Адрес". Чтобы не плодить поля в "Персона" и "Компания" логично вынести их в "Адрес" и связать реляцией. Адресов как у персоны, так и у компании м.б. несколько (регистрация, адр. проживания и т.п.). Соответственно, эти адреса д.б. связаны т.н. "multi-criteria relationshp" (терминах FM).
Мне хочется вынести их в Layout на Tab Control, чтобы на соотв. вкладке появился тот или иной адрес.
Просто уже переклинило, как реализовать это. По какому событию адрес может добавляться или удаляться...

Re: Multi-criteria relationshp. Использование.

Добавлено: 08 ноя 2018, 06:28
Arcady
У вас связь многие ко многим. Так что вам нужна вспомогательная таблица, в которой будет хранится связь между таблицей компаний и таблицей адресов. Хранят обычно id записей. То есть в таблице (назовем к примеру адреса_компаний) будет все два поля:

id_компании
id_адрес

реляции от компании к адресе будут соотвествующие через эту таблицу.
Чтобы установить связь добавляем запись и прописываем соотвествующие id_компании и id_адрес, чтобы удалить связь, удаляем запись в этой вспомогательной таблице.

Для Персон делаем аналогично. В принципе, можно использовать одну и туже вспомогательную таблицу, просто добавим там поле id_персона

Re: Multi-criteria relationshp. Использование.

Добавлено: 08 ноя 2018, 21:21
Alexei Sytch
Я бы порекомендовал взять одну из промышленных моделей данных, например Party Role и Contact Mechanism. Если по-русски, то надо перейти от Организация Персона Адрес к Сторона и ее Роль и Способ связи со стороной
например, из книги Len Silverston ( The Data Model Resource Book, Volumes 1 & 3; and/or vol 2 for specific industries )

Примеры способов связи: рабочий адрес, домашний адрес, домашний телефон, телефон соседа, электронный адрес личный, рабочий и т.п.
Примеры ролей: Поставщик, работник, покупатель, производитель
Примеры сторон Организация, Персона, Индивидуальный предприниматель, ,


Что это даст -схему не надо будет менять когда надо будет добавлять новые способы связи с людьми и организациями (например несколько адресов электронной почты или чат в Viber или Телеграм)
- вы будете пользоваться схемой, похожей на ту что использует Apple или Google
- под эту схему попадает большинство жизненных ситуаций, не надо будте придумывать "костылей"

Что бы быстро начать посмотрите презентацию и готовый файл с примером, которую в 2017 году на DevCon сделал Дейв Грэхем
ADV007 - Data Modeling That Scales - Dave Graham. (модель данных, которая маштабируется)
https://community.filemaker.com/docs/DOC-8358
PartyContactMethod.PNG
схема данных, которую реализовал Dave Graham, маркером выделена таблица, которая реализует связь многие ко многим
PartyContactMethod.PNG (48.17 КБ) 7607 просмотров
По технике реализации вам потребуются промежуточная таблица.

Если все это излишне сложно, то второй способ организовать связи многие ко многим -- использовать для связи таблиц текстовоые поля с множественными значениями или поля с повторяющимися значениями. Это особенность FileMaker и это проще реализовать "по-быстрому"

Re: Multi-criteria relationshp. Использование.

Добавлено: 09 ноя 2018, 05:16
andrey volkov
в контексте данной темы хотел бы в очередной раз напомнить о том, что вообще таблицы можно связывать по двум реляциям.
Для того, чтобы это работало, каждой физической таблице следует присвоить уникальный идентификатор и хранить его в поле, например table_ref

в связанной таблице должно быть два поля для реляции:
parent_id будет хранить ссылку на идентификатор родительской записи
parent_ref будет хранить ссылку на идентификатор родительской таблицы

parent_id = id
parent_ref = table_ref

Скрипт добавления записи в подчиненную таблицу будет одинаковым для любого родителя, если использовать параметры и передавать в них List(id; table_ref)

Re: Multi-criteria relationshp. Использование.

Добавлено: 09 ноя 2018, 09:21
OlegZ
Спасибо за подсказки!!! Буду изучать эти примеры. Главное, чтоб всё в голове уложилось ;) .