digraph g {
graph [
rankdir = "RL",
 concentrate = true,
ratio = auto
];
node [
fontsize = "18",
shape = record, fontsize = 18
];
edge [
];

"Records" [shape = record, fontsize = 18, label = "(Any RT::Record)" ];
"Records" -> "Principals" [label = "Creator → id"];
"ACL" [shape = record, fontsize = 18, label = "<col0> \N " ];
"ACL" -> "Principals" [label="PrincipalId → id"];
"ACL" -> "Records" [label="ObjectId → id"];

"Attachments" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Attachments" -> "Transactions" [label="TransactionId → id"];
"Attachments" -> "Attachments" [label="Parent → id"];

"CachedGroupMembers" [shape = record, fontsize = 18, label = "<col0> \N " ];
"CachedGroupMembers" -> "Groups" [label="GroupId → id", weight=2];
"CachedGroupMembers" -> "Principals" [label="MemberId → id"];
"CachedGroupMembers" -> "CachedGroupMembers" [label="Via → id"];
"CachedGroupMembers" -> "Groups" [label="ImmediateParentId → id"];

"CustomFields" [shape = record, fontsize = 18, label = "<col0> \N " ];

"CustomFieldValues" [shape = record, fontsize = 18, label = "<col0> \N " ];
"CustomFieldValues" -> "CustomFields" [label="CustomField → id"];

"GroupMembers" [shape = record, fontsize = 18, label = "<col0> \N " ];
"GroupMembers" -> "Groups" [label="GroupId → id", weight=2];
"GroupMembers" -> "Principals" [label="MemberId → id", weight = 2];

"Groups" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Groups" -> "Principals" [label="id → id"];

"Links" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Links" -> "Tickets" [label="LocalBase ⇢ id (usually)", style="dotted"];
"Links" -> "Tickets" [label="LocalTarget ⇢ id (usually)", style="dotted"];

"Principals" [shape = record, fontsize = 18, label = "<col0> \N " ];

"Attributes" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Attributes" -> "Records" [label="ObjectId → id"];

"Queues" [shape = record, fontsize = 18, label = "<col0> \N " ];

"ScripActions" [shape = record, fontsize = 18, label = "<col0> \N " ];

"ScripConditions" [shape = record, fontsize = 18, label = "<col0> \N " ];

"Scrips" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Scrips" -> "ScripConditions" [label="ScripCondition → id"];
"Scrips" -> "ScripActions" [label="ScripAction → id"];
"Scrips" -> "Templates" [label="Template → id"];
"Scrips" -> "Queues" [label="Queue → id"];

"Templates" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Templates" -> "Queues" [label ="Queue → id" ];

"ObjectCustomFields" [shape = record, fontsize = 18, label = "<col0> \N " ];
"ObjectCustomFields" -> "CustomFields" [label="CustomField → id"];
"ObjectCustomFields" -> "Records" [label="ObjectId → id"];

"ObjectCustomFieldValues" [shape = record, fontsize = 18, label = "<col0> \N " ];
"ObjectCustomFieldValues" -> "CustomFields" [label="CustomField → id"];
"ObjectCustomFieldValues" -> "Records" [label="ObjectId → id"];

"Tickets" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Tickets" -> "Tickets" [label="EffectiveId → id"];
"Tickets" -> "Principals" [label="Owner → id"];
"Queues" -> "Tickets" [style="invis"];
"Tickets" -> "Queues" [label="Queue → id"];

"Transactions" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Transactions" -> "Records" [label="ObjectId → id"];

"Users" [shape = record, fontsize = 18, label = "<col0> \N " ];

"Users" -> "Principals" [label="id → id"];

// "Classes" [shape = record, fontsize = 18 label = "<col0> \N " ];
// "Articles" [shape = record, fontsize = 18 label = "<col0> \N " ];
// "Articles" -> "Classes" [ label="Class → id"];
// "Articles" -> "Articles" [ label="Parent → id"];
// "ObjectClasses" [shape = record, fontsize = 18 label = "<col0> \N " ];
// "ObjectClasses" -> "Records" [label="ObjectId → id"];
// "ObjectClasses" -> "Classes" [label="Class → id"];
// "Topics" [shape = record, fontsize = 18 label = "<col0> \N " ];
// "ObjectTopics" [shape = record, fontsize = 18 label = "<col0> \N " ];
// "ObjectTopics" -> "Records" [label="ObjectId → id"];
// "ObjectTopics" -> "Topics" [label="Topic → id"];

}
