Kevin Frank's Anchor-Buoy Presentation Long

Post on 16-Apr-2017

701 views 2 download

Transcript of Kevin Frank's Anchor-Buoy Presentation Long

Grappling with 7(part 2)

Kevin Frank8/16/05

Grappling with 7(part 2)

Kevin Frank8/16/05

Grappling with 7(part 2)

Kevin Frank8/16/05

Grappling with 7(part 2)

Kevin Frank8/16/05

Arcata, CA

How Many Of You...

How Many Of You...

• Have built and deployed one or more FM7 solutions?

How Many Of You...

• Have built and deployed one or more FM7 solutions?

• Have converted and deployed one or more FM7 solutions?

How Many Of You...

• Have built and deployed one or more FM7 solutions?

• Have converted and deployed one or more FM7 solutions?

• Are currently building a FM7 solution?

How Many Of You...

• Have built and deployed one or more FM7 solutions?

• Have converted and deployed one or more FM7 solutions?

• Are currently building a FM7 solution?

• Are sticking with FM6 until they pry it from your cold, dead fingers?

If you have questions...

If you have questions...Please interrupt me

and ask them.

If you have questions...

I don’t mind...

Please interrupt meand ask them.

If you have questions...

I don’t mind...(at all).

Please interrupt meand ask them.

I only have one request...

I only have one request...

Violators willface thewrath

of

< a.k.a. >< a.k.a. >

Let’s start with a simple example

Let ( [VL = "Header";L = ValueListItems ( Get ( FileName ) ;VL);X = PatternCount(L;"¶")+1;N = 1+Mod(X+gScriptParameter;X);E = MiddleWords(L;N;1);T = MiddleWords(FieldType (Get ( FileName ) ;E);2;1);P = gScriptParameter;G = GetField(E)];

Choose(P>2;Case(T="Number";Right("00000000"&G;8);G);Case(T="Number";1/(G+2);T="Date";Date(12;12;3000)-G;T="Hour";Time(23;59;59)- G;T="Text";Substitute( Upper(G); ["A"; "z"]; ["B"; "y"]; ["C"; "x"]; ["D"; "w"]; ["E"; "v"]; ["F"; "u"] ; ["G"; "t"]; ["H"; "s"]; ["I"; "r"]; ["J"; "q"]; ["K"; "p"]; ["L"; "o"]; ["M"; "n"]; ["N"; "m"]; ["O"; "l"]; ["P"; "k"]; ["Q"; "j"]; ["R"; "i"]; ["S"; "h"]; ["T"; "g"]; ["U"; "f"]; ["V"; "e"]; ["W"; "d"]; ["X"; "c"]; ["Y"; "b"]; ["Z"; "a"] ) )))

( just kidding )

Main Presentation:

Anchor/Buoy

A FM7 Relational Graph Design Approach

What is A/B ?

What is A/B ?

• A layout-centric approach to the RG

What is A/B ?

• A layout-centric approach to the RG

• that restores the simplicity of 6-style relationships

What is A/B ?

• A layout-centric approach to the RG

• that restores the simplicity of 6-style relationships

• without sacrificing the power of 7-style relationships

What is A/B ?

• A layout-centric approach to the RG

• that restores the simplicity of 6-style relationships

• without sacrificing the power of 7-style relationships

• [ a brain child of Soliant Consulting ]

XX

6

7

A Primary Goal of Anchor/Buoy…

A Primary Goal of Anchor/Buoy…

Is to make TO’s Is to make TO’s manageable inmanageable inscrolling listsscrolling lists

e.g.e.g.

etc.etc.

One of the biggest areas of confusion for developers making the transition

from FM 6 to FM 7 is…

One of the biggest areas of confusion for developers making the transition

from FM 6 to FM 7 is…

One of the biggest areas of confusion for developers making the transition

from FM 6 to FM 7 is…

The RelationalThe RelationalGraph (RG)Graph (RG)

For one thing… it sometimes superficially resembles an…

For one thing… it sometimes superficially resembles an…

Entity-Relationship DiagramEntity-Relationship Diagram

But despite the superficial resemblance…

But despite the superficial resemblance…

RG RG ERD ERD

Of the three Database “Layers”...

Data

Of the three Database “Layers”...

Data

Business

Of the three Database “Layers”...

Data

Business

Presentation

Of the three Database “Layers”...

Data

ERDs only describe this layer...

Data

Business

Presentation

The RG is essential toall three layers

But despite the superficial resemblance…

<digression><digression>

This is an ERDThis is an ERD

FileMaker 7FileMaker 7is a great toolis a great tool

……but it’s not the but it’s not the right tool forright tool formaking ERDsmaking ERDs

RG RG ERD ERD

RG RG ERD ERD…nor does it needto resemble one(even remotely)

But despite the superficial resemblance…

</digression></digression>

Another reason developers may find the FM7 RG confusing...

Another reason developers may find the FM7 RG confusing...

Another reason developers may find the FM7 RG confusing...

AND THAT’S PUTTING IT MILDLYAND THAT’S PUTTING IT MILDLY

=

=

In FM6: we named these...

In FM7: we name these...

Some Basic Terminology

Some Basic Terminology

Table = “a unique set of records and fields”

Some Basic Terminology

Table = “a unique set of records and fields”

a.k.a. Base Table

Some Basic Terminology

Table = “a unique set of records and fields”

a.k.a. Base Table

TO = table occurrence

Some Basic Terminology

Table = “a unique set of records and fields”

a.k.a. Base Table

TO = table occurrenceMike Harris: TO Table

Some Basic Terminology

Table = “a unique set of records and fields”

a.k.a. Base Table

TO = table occurrenceMike Harris: TO Table

TOG = table occurrence group

Some Basic Terminology

Table = “a unique set of records and fields”

a.k.a. Base Table

TO = table occurrenceMike Harris: TO Table

TOG = table occurrence groupA discrete collection of TOs

Tables

TOs

TOGs

Some Benefits of theFM7 Relational Model

• You can access data that is many “hops” away

Some Benefits of theFM7 Relational Model

• You can access data that is many “hops” away• Context determines what you see when you look

at related data

Some Benefits of theFM7 Relational Model

• You can access data that is many “hops” away• Context determines what you see when you look

at related data• Relationships can be based on multiple

predicates

Some Benefits of theFM7 Relational Model

• You can access data that is many “hops” away• Context determines what you see when you look

at related data• Relationships can be based on multiple

predicates• Relational operators are no longer limited to “=”

Some Benefits of theFM7 Relational Model

• You can access data that is many “hops” away• Context determines what you see when you look

at related data• Relationships can be based on multiple

predicates• Relational operators are no longer limited to “=”• Developer has great leeway in terms of

relational architecture

Some Benefits of theFM7 Relational Model

Benefits, shmenefits!

Benefits, shmenefits!

In the good old days...

Benefits, shmenefits!

In the good old days...

• I always knew what to call a relationship

Benefits, shmenefits!

In the good old days...

• I always knew what to call a relationship• I always knew where to put a relationship

Benefits, shmenefits!

In the good old days...

• I always knew what to call a relationship• I always knew where to put a relationship• I could do these things in my sleep!

Some Potentially Confusing Aspects of the FM7 Relational Model

• Relationships are automatically bi-directional

Some Potentially Confusing Aspects of the FM7 Relational Model

• Relationships are automatically bi-directional

– This is great for “data level” (a.k.a. “structural”) relationships, but...

Some Potentially Confusing Aspects of the FM7 Relational Model

• Relationships are automatically bi-directional

– This is great for “data level” (a.k.a. “structural”) relationships, but...

– Since most FileMaker relationships are not structural, this is not only undesirable...

Some Potentially Confusing Aspects of the FM7 Relational Model

• Relationships are automatically bi-directional

– This is great for “data level” (a.k.a. “structural”) relationships, but...

– Since most FileMaker relationships are not structural, this is not only undesirable...

– But frequently impossible (because a relationship cannot flow in both directions if any of its keys are unstored).

Some Potentially Confusing Aspects of the FM7 Relational Model

For example: In a typical FM6 solutiontracking donors and donations...

ID#_Donor

Date

Payment_Type

Amount

ID#

First_Name

Last_Name

< etc. >

These are mutually bi-directional

10 relationships from Donors to Donations:

3 relationships from Donations to Donors:

These can only be resolved in one direction

10 relationships from Donors to Donations:

3 relationships from Donations to Donors:

• Relationships are automatically bi-directional• Since TOs can be approached from either

direction, naming them can be problematic

Some Potentially Confusing Aspects of the FM7 Relational Model

• Relationships are automatically bi-directional• Since TOs can be approached from either

direction, naming them can be problematic• You continually need to think about context

Some Potentially Confusing Aspects of the FM7 Relational Model

Where am I?Where am I?

Where am I starting from?Where am I starting from?

Where am I starting from?Where am I starting from?

Where am I going to?Where am I going to?

It’s easy to see where you’re going in FM7…

Context is determined by where you start from

It’s easy to see where you’re going in FM7…

Context is determined by where you start from

Contextual Food for Thought

Contextual Food for Thought

What determines “context”?

Contextual Food for Thought

What determines “context”?The active TO

Contextual Food for Thought

What determines “context”?The active TO

What determines the active TO?

Contextual Food for Thought

What determines “context”?The active TO

What determines the active TO?1. The current layout

Contextual Food for Thought

What determines “context”?The active TO

What determines the active TO?1. The current layout

2. Evaluate this calculation from the context of in Specify Calculation

Contextual Food for Thought

What determines “context”?The active TO

What determines the active TO?1. The current layout

2. Evaluate this calculation from the context of in Specify Calculation

3. The starting from drop-down in a related value list

Contextual Food for Thought

What determines “context”?The active TO

What determines the active TO?1. The current layout

2. Evaluate this calculation from the context of in Specify Calculation

3. The starting from drop-down in a related value list

4. The starting with table drop-down in a lookup

Contextual Food for Thought

What determines “context”?The active TO

What determines the active TO?1. The current layout

2. Evaluate this calculation from the context of in Specify Calculation

3. The starting from drop-down in a related value list

4. The starting with table drop-down in a lookup

• Relationships are automatically bi-directional• Since TOs can be approached from either

direction, naming them can be problematic• You continually need to think about context• You will see all related TOs whether they are

relevant or not

Some Potentially Confusing Aspects of the FM7 Relational Model

• Relationships are automatically bi-directional• Since TOs can be approached from either

direction, naming them can be problematic• You continually need to think about context• You will see all related TOs whether they are

relevant or not• The “great leeway in terms of RG architecture”

(which I mentioned previously as a benefit) can cause a decrease in developer productivity...

Some Potentially Confusing Aspects of the FM7 Relational Model

• Relationships are automatically bi-directional• Since TOs can be approached from either direction,

naming them can be problematic• You continually need to think about context• You will see all related TOs whether they are relevant

or not• The “great leeway in terms of RG architecture”

(which I mentioned previously as a benefit) can cause a decrease in developer productivity… and or sanity

Some Potentially Confusing Aspects of the FM7 Relational Model

Initially, a feeling of vertigo, or even existential nausea, is to be expected.

-- Mike Harris, March 2004

Hmm… For every TO, I have to decide...

Hmm… For every TO, I have to decide...

• What do I call it?

Hmm… For every TO, I have to decide...

• What do I call it?• Where do I put it?

Hmm… For every TO, I have to decide...

• What do I call it?• Where do I put it?• What color should I make it?

I wonder when we’regoing to start

learning about...

???

But despite the superficial resemblance…

< now >< now >

A/B in a Nutshell

• Relational Graph (RG) is divided into TOGs

A/B in a Nutshell

• Relational Graph (RG) is divided into TOGs• Each TOG consists of one “Anchor” at the left

and any number of “Buoys” strung off rightward

A/B in a Nutshell

AnchorsAnchors

BuoysBuoys

• Relational Graph (RG) is divided into TOGs• Each TOG consists of one “Anchor” at the left

and any number of “Buoys” strung off rightward• As a general rule, the RG will have one Anchor

per base table

A/B in a Nutshell

1 Anchor1 Anchorper baseper base

tabletable

• Relational Graph (RG) is divided into TOGs• Each TOG consists of one “Anchor” at the left

and any number of “Buoys” strung off rightward• As a general rule, the RG will have one Anchor

per base table• Layouts are only attached to Anchors

A/B in a Nutshell

LayoutsLayoutsXNo LayoutsNo Layouts

• Relational Graph (RG) is divided into TOGs• Each TOG consists of one “Anchor” at the left

and any number of “Buoys” strung off rightward• As a general rule, the RG will have one Anchor

per base table• Layouts are only attached to Anchors• RG is restricted to one page in width, but is

allowed to grow as tall as necessary

A/B in a Nutshell

Page 1 Page 2

< etc. >

• Relational Graph (RG) is divided into TOGs• Each TOG consists of one “Anchor” at the left and any

number of “Buoys” strung off rightward• As a general rule, the RG will have one Anchor per

base table• Layouts are only attached to Anchors• RG is restricted to one page in width, but is allowed to

grow as tall as necessary• Color coding and TO naming conventions are an

integral component of this methodology

A/B in a Nutshell

• Relational Graph (RG) is divided into TOGs• Each TOG consists of one “Anchor” at the left and any

number of “Buoys” strung off rightward• As a general rule, the RG will have one Anchor per

base table• Layouts are only attached to Anchors• RG is restricted to one page in width, but is allowed to

grow as tall as necessary• Color coding and TO naming conventions are an

integral component of this methodology

A/B in a Nutshell

Most A/B-ers agree Most A/B-ers agree

on these points...on these points...

• Relational Graph (RG) is divided into TOGs• Each TOG consists of one “Anchor” at the left and any

number of “Buoys” strung off rightward• As a general rule, the RG will have one Anchor per

base table• Layouts are only attached to Anchors• RG is restricted to one page in width, but is allowed to

grow as tall as necessary• Color coding and TO naming conventions are an

integral component of this methodology

A/B in a Nutshell

But have minorBut have minor

differences re: differences re:

• Relational Graph (RG) is divided into TOGs• Each TOG consists of one “Anchor” at the left and any

number of “Buoys” strung off rightward• As a general rule, the RG will have one Anchor per

base table• Layouts are only attached to Anchors• RG is restricted to one page in width, but is allowed to

grow as tall as necessary• Color coding and TO naming conventions are an

integral component of this methodology

A/B in a Nutshell

But have minorBut have minor

differences re: differences re:

Color Coding &Color Coding &TO NamingTO Naming

ConventionsConventions

Legend at the top of the RG

Legend at the top of the RG

• Color-coded TOs based on a “null” table

Legend at the top of the RG

• Color-coded TOs based on a “null” table• Anchors and Buoys colored as per above

Legend at the top of the RG

• Color-coded TOs based on a “null” table• Anchors and Buoys colored as per above• Underlying table names spelled out in full

Anchor Name

• Anchor name is CAPITALIZED

Anchor Name

• Anchor name is CAPITALIZED• Anchor name = corresponding base table name

e.g., APPEALS_EVENTS… however...

Anchor Name

• Anchor name is CAPITALIZED• Anchor name = corresponding base table name

e.g., APPEALS_EVENTS… however...• Anchor name usually abbreviated, e.g., APPEV

(for a reason that will soon become apparent)

Anchor Name

• Anchor name is CAPITALIZED• Anchor name = corresponding base table name

e.g., APPEALS_EVENTS… however...• Anchor name usually abbreviated, e.g., APPEV

(for a reason that will soon become apparent)

Anchor Name

• Anchor name is CAPITALIZED• Anchor name = corresponding base table name

e.g., APPEALS_EVENTS… however...• Anchor name usually abbreviated, e.g., APPEV

(for a reason that will soon become apparent)• Confused?

Anchor Name

• Anchor name is CAPITALIZED• Anchor name = corresponding base table name

e.g., APPEALS_EVENTS… however...• Anchor name usually abbreviated, e.g., APPEV

(for a reason that will soon become apparent)• Confused? You can always consult the legend...

Anchor Name

Buoy Name

Buoy Name

• First the Anchor name in all lower-case, followed by “_”, e.g., appev_

Buoy Name

• First the Anchor name in all lower-case, followed by “_”, e.g., appev_

• Followed by base table abbreviations for any intervening buoys (each separated by an “_”)

Buoy Name

• First the Anchor name in all lower-case, followed by “_”, e.g., appev_

• Followed by base table abbreviations for any intervening buoys (each separated by an “_”)

• Followed by the base table name in all CAPS,e.g., appev_don_CON (where CON = Contacts)

Buoy Name

If you need to clarify the Buoy name

• Append two underscores: “__”

If you need to clarify the Buoy name

• Append two underscores: “__”• Followed by a lower-case explanation

If you need to clarify the Buoy name

• Append two underscores: “__”• Followed by a lower-case explanation• E.g., I wanted to indicate that this particular

buoy was linked via a field called “Country”

If you need to clarify the Buoy name

• Append two underscores: “__”• Followed by a lower-case explanation• E.g., I wanted to indicate that this particular

buoy was linked via a field called “Country”

• And this buoy was used to filter a value list

If you need to clarify the Buoy name

Abbreviated Anchor Names...

Abbreviated Anchor Names...

Abbreviated Anchor Names...

…ensure that an anchor precedes its buoys in sortedTO lists

Some Benefits of the A/B Method

Some Benefits of the A/B Method

• As in FM6, relationships are unidirectional, and flow from left to right, which means...

Some Benefits of the A/B Method

• As in FM6, relationships are unidirectional, and flow from left to right, which means...

• You only deal with related data that is “down-stream” from wherever you happen to be

From this layout...

From this layout...

…which is anchoredto this TO

Donor Name comes from here...

Some Benefits of the A/B Method

• As in FM6, relationships are only ever thought of as flowing from left to right, and...

• You only deal with related data that is “down-stream” from wherever you happen to be

• Calculated fields and lookups always “start” from the correct TO

No need to makeNo need to makeany changes hereany changes here

……or hereor here

Some Benefits of the A/B Method

• As in FM6, relationships are only ever thought of as flowing from left to right, and...

• You only deal with related data that is “down-stream” from wherever you happen to be

• Calculated fields and lookups always “start” from the correct TO

• You only see relevant TOs under “related tables”

…ad infinitum

In A/B, “Related” TOsare “Relevant” TOs

Some Benefits of the A/B Method

• As in FM6, relationships are only ever thought of as flowing from left to right

• You only deal with related data that is “down-stream” from wherever you happen to be

• Calculated fields and lookups always “start” from the correct TO

• You only see relevant TOs under “related tables”• TOGs are analogous to FM6 relationship lists

Some Benefits of the A/B Method• As in FM6, relationships are only ever thought of as

flowing from left to right• You only deal with related data that is “down-stream”

from wherever you happen to be• Calculated fields and lookups always “start” from the

correct TO• You only see relevant TOs under “related tables”• TOGs are analogous to FM6 relationship lists• You always know what to call a TO, where to put it and

what color to make it

I’m confused --

I’m confused --

If my RG is brokeninto separate TOGs,how do I navigatebetween them?

I’m confused --

If my RG is brokeninto separate TOGs,how do I navigatebetween them?

For example...How do I jump froma donation to theparent donor?

Grab your board &Grab your board &wetsuit, becausewetsuit, becauseit’s time to go...it’s time to go...

TOG SurfingTOG Surfing

To jump from a donation tothe corresponding donor

To jump from a donation tothe corresponding donor

From theAnchor...

GTRR to the desired Buoy...

GTRR to the desired Buoy...

…but choose a layout attachedto the corresponding Anchor

This works because…

AND

…share a common base table

This works because…

AND

…share a common base table

But despite the superficial resemblance…

< demo break >< demo break >

One Very Important Point

• Whether starting an A/B project from scratch, or converting an existing project to A/B...

One Very Important Point

• Whether starting an A/B project from scratch, or converting an existing project to A/B...

• Identify your natural anchors!

One Very Important Point

• Whether starting an A/B project from scratch, or converting an existing project to A/B...

• Identify your natural anchors!– All TO’s are not created equal

One Very Important Point

• Whether starting an A/B project from scratch, or converting an existing project to A/B...

• Identify your natural anchors!– All TO’s are not created equal– The first TO created for a given base table should

always be used as the anchor

One Very Important Point

• Whether starting an A/B project from scratch, or converting an existing project to A/B...

• Identify your natural anchors!– All TO’s are not created equal– The first TO created for a given base table should

always be used as the anchor– (if the first TO has been deleted, then use the oldest

surviving TO for that base table)

One Very Important Point

• Whether starting an A/B project from scratch, or converting an existing project to A/B...

• Identify your natural anchors!– All TO’s are not created equal– The first TO created for a given base table should

always be used as the anchor– (if the first TO has been deleted, then use the oldest

surviving TO for that base table)– This guarantees that calculated fields and lookups

always “start” from the correct TO

One Very Important Point

• Whether starting an A/B project from scratch, or converting an existing project to A/B...

• Identify your natural anchors!– All TO’s are not created equal– The first TO created for a given base table should always be

used as the anchor– (if the first TO has been deleted, then use the oldest

surviving TO for that base table)– This guarantees that calculated fields and lookups always

“start” from the correct TO– Otherwise you sacrifice a big benefit of using A/B

One Very Important Point

Addressing Common Concerns...

The RG is too busy

Addressing Common Concerns...

The RG is too busyIt’s a small price to pay. TOs are cheap.An out-of-control graph is busy too.

Addressing Common Concerns...

The RG is too busyIt’s a small price to pay. TOs are cheap.An out-of-control graph is busy too.

The RG is too big

Addressing Common Concerns...

The RG is too busyIt’s a small price to pay. TOs are cheap.An out-of-control graph is busy too.

The RG is too bigGraph space is unlimited.

Addressing Common Concerns...

The RG is too busyIt’s a small price to pay. TOs are cheap.An out-of-control graph is busy too.

The RG is too bigGraph space is unlimited.

I hate the criss-crossing lines -- I can’t find the “=” when I need to edit a relationship

Addressing Common Concerns...

The RG is too busyIt’s a small price to pay. TOs are cheap.An out-of-control graph is busy too.

The RG is too bigGraph space is unlimited.

I hate the criss-crossing lines -- I can’t find the “=” when I need to edit a relationship

You can double-click anywhere on thediagonal portion of the relationship line.

Addressing Common Concerns...

The RG doesn’t look like an ERD

Addressing Common Concerns...

The RG doesn’t look like an ERDRG ERD; if you need an ERD there are any number of programs that can generate one.

• Park unused TOs at the bottom of the RG• These little guys are either buoy-less anchors, or

special-purpose TOs

Miscellaneous Thought #1

• Create separate TOGs to keep track of relational deletion dependencies

• This has nothing to do with A/B, per se

Miscellaneous Thought #2

Since adopting A/B...

Since adopting A/B...

• I always know what to call a TO

Since adopting A/B...

• I always know what to call a TO• I always know where to put a TO

Since adopting A/B...

• I always know what to call a TO• I always know where to put a TO• I always know what color to make it

Since adopting A/B...

• I always know what to call a TO• I always know where to put a TO• I always know what color to make it• I can do it in my sleep!

< the end >< the end >