- Что это значит, что что-то транзитивно в программировании?
- Еще в рубрике
- Другие вопросы
- Что это значит, что что-то транзитивно в программировании?
- 2 ответа
- Что это значит, что что-то транзитивно в программировании?
- 2 ответа
- Ещё вопросы
- Что такое транзитивная зависимость в базе данных
- Избегайте переходных зависимостей, чтобы помочь обеспечить нормализацию
- Пример транзитивной зависимости
- Избежание переходных зависимостей
- Почему транзитивные зависимости плохой дизайн базы данных
Что это значит, что что-то транзитивно в программировании?
Что это значит, что что-то транзитивно в отношении программирования? Примером может служить следующий (отсюда):
Я знаю о разработке этого конкретного заявления, однако, я стремлюсь к более обобщенному объяснению программирования.
Бинарное отношение ~ транзитивно тогда и только тогда, когда a ~ b и b ~ c влечет a ~ c .
(Например, «выше, чем» транзитивен «, живет по соседству с» нет «). В этом частном случае A using B, а B using C, и он имеет тот же эффект, что и A, using C напрямую.
Transitive — это термин из формальной логики. Это означает, что «если A имеет транзитивное отношение к B и B, то такое же отношение к C, то A имеет такое отношение к C». Например, равенство является транзитивным отношением. если A == B и B == C то транзитивность — это то, что позволяет A == C быть истинным. Аналогично, менее чем транзитивное отношение, что означает, что если A < B и B < C то A < C . Для использования директив смысл заключается в том, что если область содержит директиву-указатель, которая назначает имя пространства имен, которое содержит директиву для второго имени пространства имен, эффект выглядит так, как если бы директивы по использованию из второго пространства имен отображались в первом, В коде это означает, что
namespace B
int foo;
>namespace A
using namespace B;
>using namespace A;
int main()
foo = 42; // resolves to B::foo
>
В приведенном выше foo в main() разрешает A::foo . Поскольку A имеет using namespace B , foo в main() также разрешает B::foo . Транзитивность — это формальное название того, что заставляет все работать.
Еще в рубрике
Другие вопросы
Что это значит, что что-то транзитивно в программировании?
Что это означает, что что-то транзитивно в отношении программирования? Пример следующий ( отсюда):
Директивы using транзитивны для целей неквалифицированного поиска:
Мне известно о разработке этого конкретного заявления, однако я стремлюсь к более общему объяснению, связанному с программированием.
2 ответа
Бинарные отношения ~ транзитивен тогда и только тогда, когда a ~ b а также b ~ c подразумевает a ~ c ,
(Например, «выше, чем» транзитивен; «живет по соседству» — нет.)
В этом особом случае А является using B, а B это using С, и это имеет тот же эффект, что и А using С напрямую.
Транзитивный это термин из формальной логики. Это означает, что «если A имеет переходное отношение к B, а B имеет такое же отношение к C, то A имеет такое отношение к C».
Например, равенство — это переходные отношения. если A == B а также B == C тогда транзитивность — это то, что позволяет A == C чтобы быть правдой. Точно так же, менее чем переходные отношения, что означает, что если A < B а также B < C затем A < C ,
Для директив using значение заключается в том, что если область содержит директиву using, которая назначает имя пространства имен, которая сама содержит директиву using для имени второго пространства имен, то эффект заключается в том, что директивы using из второго пространства имен появляются в первом,
namespace B < int foo; >namespace A < using namespace B; >using namespace A; int main() < foo = 42; // resolves to B::foo >
В приведенном выше foo в main() решает в A::foo , поскольку A имеет using namespace B , foo в main() также разрешает B::foo , Транзитивность — это формальное название того, что заставляет все это работать.
Что это значит, что что-то транзитивно в программировании?
Что это значит, что что-то транзитивно в отношении программирования? Примером может служить следующий (отсюда):
Я знаю о разработке этого конкретного заявления, однако, я стремлюсь к более обобщенному объяснению программирования.
2 ответа
Бинарное отношение ~ транзитивно тогда и только тогда, когда a ~ b и b ~ c влечет a ~ c .
(Например, «выше, чем» транзитивен «, живет по соседству с» нет «).
В этом частном случае A using B, а B using C, и он имеет тот же эффект, что и A, using C напрямую.
Transitive — это термин из формальной логики. Это означает, что «если A имеет транзитивное отношение к B и B, то такое же отношение к C, то A имеет такое отношение к C».
Например, равенство является транзитивным отношением. если A == B и B == C то транзитивность — это то, что позволяет A == C быть истинным. Аналогично, менее чем транзитивное отношение, что означает, что если A < B и B < C то A < C .
Для использования директив смысл заключается в том, что если область содержит директиву-указатель, которая назначает имя пространства имен, которое содержит директиву для второго имени пространства имен, эффект выглядит так, как если бы директивы по использованию из второго пространства имен отображались в первом,
namespace B < int foo; >namespace A < using namespace B; >using namespace A; int main() < foo = 42; // resolves to B::foo >
В приведенном выше foo в main() разрешает A::foo . Поскольку A имеет using namespace B , foo в main() также разрешает B::foo . Транзитивность — это формальное название того, что заставляет все работать.
Ещё вопросы
- 1 Ошибка, когда прямоугольная область интереса выходит за границы — opencv
- 1 Требования к паролю при создании учетной записи в Firebase
- 1 Как нетти управляют здоровьем Socket
- 1 Как я могу найти CDP-код native_request_wait в Android SDK?
- 0 Как преобразовать дату SQL-запроса в угловое целое более эффективно
- 0 MySQL: как убедиться, что обновление всегда выполняется перед выбором?
- 0 JQuery 1.9.1 DatePicker установить опцию даты
- 0 Код Jquery для разделения ссылки href
- 0 glibc обнаружил free () неверный размер (быстрый) ошибка?
- 1 Java-программа не зацикливается на цикле while — переходит прямо к оператору if
- 1 вызов метода рендеринга из другого класса
- 0 Угловой JS передает массив строк в директиву
- 1 Создать текстовую область и кнопку анализа
- 1 Нужно конвертировать действительные значения даты и вывести ошибочные значения в Python
- 1 Получить значение из ListBox, содержащего TextBlocks, используя SelectedItem в WPF
- 1 Таймер Java не работает. Вызов нескольких таймеров одновременно
- 0 Фокус и перезапись
- 1 Как добавить бесконечное количество изображений на холст html5?
- 0 Как сделать родительский ли активным, когда ребенок меняется
- 0 Передать переменную в контроллер codeigniter по умолчанию
- 1 Как удалить выбранные строки из фрейма данных при условии
- 0 Не могу получить подготовленное заявление для печати в php
- 1 Замена «*» в фрейме данных панд
- 1 Специальный символ Python YAML и несколько строк
- 0 Извлечение JSON в транспортир и сравнение его с данными, отправленными из серверной части
- 1 Рекурсивный метод изменения словаря во время итерации
- 0 Разбор с помощью fscanf (), игнорирующий пробелы или пропущенные значения?
- 1 Отсутствует метод getRequestBuilder в классе RemoteMessageProto
- 1 TensorFlow: bincount с опцией оси
- 1 Получить историю уведомлений от Firebase
- 0 Обработчик событий Jquery не работает при вызове со страницы
- 0 Угловая маршрутизация мини контролера до пункта маршрута
- 0 используя AS3 для отправки данных в php файл
- 1 Ожидается ошибка преобразования JSON: после ключа
- 1 Как заставить стороннюю функцию javascript, которая делает асинхронное поведение вести себя как http-запрос angular2?
- 1 Ошибка Python Selenium: «WebDriverException: исполняемый файл ‘login’ должен быть в PATH».
- 1 Использование System.Diagnostic.Process.Start и присвоение параметров во внешнем .exe файле
- 0 c # genereic sql context patameter
- 1 Функции Pandas не показывают данные для всех столбцов
- 1 java.lang.NoSuchFieldError: имя во время выполнения в спящем проекте
- 1 Как изменить / обновить данные и состояние записи объекта Dynamics crm с Активного на Неактивный с помощью Javascript
- 0 Что означают числа с утверждениями равенства в предложении WHERE в SQL (WHERE 2> 1)?
- 0 Ошибка при установке jquery для узла js
- 0 OpenCV QT дисплей видео
- 1 Как машинописный текст разрешает импорт @ angular / core / testing и как упаковывается угловое ядро?
- 1 Некоторые поля в документе могут быть пустыми, и если я пытаюсь получить результат, приложение вылетает из-за nullPointerException [duplicate]
- 0 отображать высоту div в соответствии с высотой другого div
- 1 Преобразование части строк информационного кадра из чисел в дату и время, но получили странные числа
- 1 Вернуть строку с разделителями-запятыми, используя только значения
- 0 Отдельное число от строки в smarty
Что такое транзитивная зависимость в базе данных
Избегайте переходных зависимостей, чтобы помочь обеспечить нормализацию
Транзитивная зависимость в базе данных – это косвенная связь между значениями в одной и той же таблице, которая вызывает функциональную зависимость. Чтобы достичь стандарта нормализации третьей нормальной формы (3NF), вы должны устранить любые переходные зависимости.
По своей природе транзитивная зависимость требует трех или более атрибутов (или столбцов базы данных), которые имеют функциональную зависимость между ними, что означает, что столбец A в таблице опирается на столбец B через промежуточный столбец C. Давайте посмотрим, как это может работать.
Пример транзитивной зависимости
Auth_001 | Орсон Скотт Кард | Игра Эндера | Соединенные Штаты |
Auth_001 | Орсон Скотт Кард | Игра Эндера | Соединенные Штаты |
Auth_002 | Маргарет Этвуд | История о горничной | Канада |
- Книга → Автор : . Здесь атрибут Книга определяет атрибут Автор . Если вы знаете название книги, вы можете узнать имя автора. Однако Автор не определяет Книгу , поскольку автор может написать несколько книг. Например, только потому, что мы знаем имя автора Орсон Скотт Кард, мы до сих пор не знаем название книги.
- Автор → Author_Nationality : Аналогично, атрибут Author определяет Author_Nationality , но не наоборот; только то, что мы знаем национальность, не означает, что мы можем определить автора.
Но эта таблица вводит транзитивную зависимость:
- Книга → Author_Nationality: Если мы знаем название книги, мы можем определить национальность через столбец Автор.
Избежание переходных зависимостей
Чтобы обеспечить третью нормальную форму, давайте удалим транзитивную зависимость.
Мы можем начать с удаления столбца Book из таблицы Authors и создания отдельной таблицы Books:
Book_001 | Игра Эндера | Auth_001 |
Book_001 | Дети разума | Auth_001 |
Book_002 | История о горничной | Auth_002 |
Auth_001 | Орсон Скотт Кард | Соединенные Штаты |
Auth_002 | Маргарет Этвуд | Канада |
Это исправило это? Давайте рассмотрим наши зависимости сейчас:
- Book_ID → Книга:Книга зависит от Book_ID .
- Других зависимостей в этой таблице не существует, поэтому мы в порядке. Обратите внимание, что внешний ключ Author_ID связывает эту таблицу с таблицей AUTHORS через ее первичный ключ Author_ID . Мы создали отношения, чтобы избежать транзитивной зависимости, ключевого дизайна реляционных баз данных.
Таблица АВТОРОВ .
- Author_ID → Автор:Автор зависит от Author_ID .
- Автор → Author_Nationality: Национальность может быть определена автором.
- Author_ID → Author_Nationality: Национальность можно определить по Author_ID через Author приписывать. У нас все еще есть транзитивная зависимость.
Нам нужно добавить третью таблицу для нормализации этих данных:
Coun_001 | Соединенные Штаты |
Coun_002 | Канада |
Auth_001 | Орсон Скотт Кард | Coun_001 |
Auth_002 | Маргарет Этвуд | Coun_002 |
Теперь у нас есть три таблицы, использующие внешние ключи для связи между таблицами:
- Внешний ключ таблицы BOOK Author_ID связывает книгу с автором в таблице AUTHORS.
- Внешний ключ таблицы AUTHORS Country_ID связывает автора со страной в таблице COUNTRIES.
- Таблица COUNTRIES не имеет внешнего ключа, поскольку в этом дизайне нет необходимости ссылаться на другую таблицу.
Почему транзитивные зависимости плохой дизайн базы данных
Какова ценность избегания транзитивных зависимостей, чтобы помочь обеспечить 3NF? Давайте снова рассмотрим нашу первую таблицу и посмотрим на проблемы, которые она создает:
Auth_001 | Орсон Скотт Кард | Игра Эндера | Соединенные Штаты |
Auth_001 | Орсон Скотт Кард | Дети разума | Соединенные Штаты |
Auth_002 | Маргарет Этвуд | История о горничной | Канада |
Такая конструкция может способствовать аномалиям и несоответствиям данных, например:
- Если вы удалили две книги «Дети разума» и «Игра Эндера», вы полностью удалили из базы данных автора «Карту Орсона Скотта» и его гражданство.
- Вы не можете добавить нового автора в базу данных, если вы также не добавите книгу; Что делать, если автор еще не опубликован или вы не знаете название книги, которую она написала?
- Если «Орсон Скотт Кард» изменил свое гражданство, вам придется изменить его во всех записях, в которых он появляется. Наличие нескольких записей с одним и тем же автором может привести к получению неточных данных: что, если лицо, занимающееся вводом данных, не понимает, что для него существует несколько записей, и изменяет данные только в одной записи?
- Вы не можете удалить такую книгу, как «Сказка о служанке», не удалив также полностью автора.
Это всего лишь несколько причин, по которым нормализация и избежание транзитивных зависимостей защищают данные и обеспечивают согласованность.