public NormalizedViewModel NormalizeTable(TableViewModel table)
        {
            var normalizedTable      = new NormalizedViewModel();
            var decompositionElement = new List <string>();

            foreach (var dependencyViewModel in table.Dependencies)
            {
                decompositionElement.AddRange(dependencyViewModel.From);
                decompositionElement.Add(dependencyViewModel.To);
                normalizedTable.TableAttributes.Add(decompositionElement);
                decompositionElement.Clear();
            }

            decompositionElement.AddRange(table.Keys.First());
            normalizedTable.TableAttributes.Add(decompositionElement);
            decompositionElement.Clear();

            normalizedTable.TableAttributes = normalizedTable.TableAttributes.Distinct().ToList();


            return(normalizedTable);
        }
Ejemplo n.º 2
0
        public static NormalizedViewModel NormalizeTable(TableViewModel table)
        {
            var normalizedTable = new NormalizedViewModel {
                SchemaName = table.Name
            };
            var isAlreadyNormalized = true;

            foreach (var dependencyViewModel in table.Dependencies)
            {
                var isKeyPartOfRelationFrom = table.Keys.Any
                                              (
                    key => key.All
                    (
                        partOfKey => dependencyViewModel.From.Any
                        (
                            dependencyElement => partOfKey == dependencyElement
                        )
                    )
                                              );
                var isRelationToPartOfKey = table.Keys.Any
                                            (
                    key => key.Any
                        (partOfKey => dependencyViewModel.To == partOfKey)
                                            );

                if (isKeyPartOfRelationFrom || isRelationToPartOfKey)
                {
                    continue;
                }
                isAlreadyNormalized = false;
                break;
            }

            if (isAlreadyNormalized)
            {
                normalizedTable.TableAttributes.Add(table.Attributes);

                return(normalizedTable);
            }

            foreach (var dependencyViewModel in table.Dependencies)
            {
                var decompositionElement = new List <string>();
                decompositionElement.AddRange(dependencyViewModel.From);
                decompositionElement.Add(dependencyViewModel.To);
                if
                (
                    normalizedTable.TableAttributes.All
                    (
                        tableAttribute => !decompositionElement.All
                        (
                            element => tableAttribute.Any(ta => ta.Equals(element))
                        )
                    )
                )
                {
                    normalizedTable.TableAttributes.Add(decompositionElement);
                }
            }

            if
            (
                normalizedTable.TableAttributes.All
                (
                    tableAttribute => !table.Keys.First().All
                    (
                        keyAttribute => tableAttribute.Any(ta => ta.Equals(keyAttribute))
                    )
                )
            )
            {
                normalizedTable.TableAttributes.Add(table.Keys.First());
            }

            return(normalizedTable);
        }