public IReadOnlyDictionary <string, ITableReferenceIdentifier> GetTableReferenceIdentifierByTableMultiPartIdentifier(IContextScope contextScope, IReadOnlyList <ITable> selectionTables, params ITableRelationship[] tableRelationships)
        {
            // TODO: The reason why you're unioning these here is because you definitely need all of the table relationships found, plus, you need the original tables you selected.  Find a better way to do this.
            var fromTables = tableRelationships.Select(tableRelationship => tableRelationship.FromTable);
            var toTables   = tableRelationships.Select(tableRelationship => tableRelationship.ToTable);
            var tables     = selectionTables.Union(fromTables).Union(toTables);
            var tableReferenceSpecifications = new List <ITableReferenceSpecification>();

            foreach (var table in tables)
            {
                var serverName   = _sqlFormatter.QuoteEncapsulate(table.ServerName);
                var databaseName = _sqlFormatter.QuoteEncapsulate(table.DatabaseName);
                var schemaName   = _sqlFormatter.QuoteEncapsulate(table.SchemaName);
                var tableName    = _sqlFormatter.QuoteEncapsulate(table.TableName);

                var whitespaceDelimitation = _pascalCaseRegex.Replace(tableName, "$1 $2");
                var titleCasing            = _textInfo.ToTitleCase(whitespaceDelimitation);
                var tableAlias             = _predicateRegex.Replace(titleCasing, string.Empty);

                tableReferenceSpecifications.AddRange(new List <ITableReferenceSpecification>
                {
                    new TableReferenceSpecification(table, TableReferenceSpecificationScope.AliasAbbreviationIdentifier, TableReferenceSpecificationKind.TableAlias, tableAlias),
                    new TableReferenceSpecification(table, TableReferenceSpecificationScope.AliasTableIdentifier, TableReferenceSpecificationKind.TableAlias, tableName),
                    new TableReferenceSpecification(table, TableReferenceSpecificationScope.AliasSchemaIdentifier, TableReferenceSpecificationKind.TableAlias, $"{schemaName}_{tableName}"),
                    new TableReferenceSpecification(table, TableReferenceSpecificationScope.AliasDatabaseIdentifier, TableReferenceSpecificationKind.TableAlias, $"{databaseName}_{schemaName}_{tableName}"),
                    new TableReferenceSpecification(table, TableReferenceSpecificationScope.AliasServerIdentifier, TableReferenceSpecificationKind.TableAlias, $"{serverName.ToUpper()}_{databaseName}_{schemaName}_{tableName}"),
                    new TableReferenceSpecification(table, TableReferenceSpecificationScope.TableSourceTableIdentifier, TableReferenceSpecificationKind.TableSource, table.SchemaName.ToLower() != "dbo" ? $"{table.SchemaName}.{table.TableName}" : tableName),
                    new TableReferenceSpecification(table, TableReferenceSpecificationScope.TableSourceSchemaIdentifier, TableReferenceSpecificationKind.TableSource, $"{schemaName}.{tableName}"),
                    new TableReferenceSpecification(table, TableReferenceSpecificationScope.TableSourceDatabaseIdentifier, TableReferenceSpecificationKind.TableSource, $"{databaseName}.{schemaName}.{tableName}"),
                    new TableReferenceSpecification(table, TableReferenceSpecificationScope.TableSourceServerIdentifier, TableReferenceSpecificationKind.TableSource, $"{serverName.ToUpper()}.{databaseName}.{schemaName}.{tableName}")
                });
            }

            RemoveTableReferenceSpecificationCollisions(contextScope, ref tableReferenceSpecifications);

            var tableReferenceIdentifierByTableMultiPartIdentifier = tableReferenceSpecifications.GroupBy(tableReferenceSpecification => tableReferenceSpecification.Table.MultiPartIdentifier)
                                                                     .ToDictionary(tableMultiPartIdentifier => tableMultiPartIdentifier.Key, grouping =>
            {
                var orderedEnumerable = grouping.OrderBy(tableReferenceSpecification => tableReferenceSpecification.TableReferenceSpecificationScope);
                var tableAlias        = orderedEnumerable.First(tableReferenceSpecification => tableReferenceSpecification.TableReferenceSpecificationKind == TableReferenceSpecificationKind.TableAlias);
                var tableSource       = orderedEnumerable.First(tableReferenceSpecification => tableReferenceSpecification.TableReferenceSpecificationKind == TableReferenceSpecificationKind.TableSource);

                return(new TableReferenceIdentifier
                       (
                           tableAlias: tableAlias.TableAlias,
                           tableSource: tableSource.TableAlias
                       )
                       as ITableReferenceIdentifier);
            });

            return(tableReferenceIdentifierByTableMultiPartIdentifier);
        }