Есть ли разница между объединениями и таблицами ссылок по верстаку или это одно и то же?

Я потратил много времени, исследуя эту ситуацию для своих собственных нужд. Это и несколько других потоков SO очень помогли мне, поэтому я хотел поделиться тем, что я придумал.

Хотя доступ к интерполированной строке запроса является значительным преимуществом при устранении неполадок, мы хотели иметь возможность для ведения журнала только определенных запросов (поэтому использование журналов базы данных для этой цели не было идеальным). Мы также хотели иметь возможность использовать журналы для воссоздания условий таблиц в любой момент времени, поэтому нам нужно было убедиться, что интерполированные строки были экранированы должным образом. Наконец, мы хотели расширить эту функциональность до всей нашей базы кода, чтобы перезаписать ее как можно меньше (сроки, маркетинг и т. Д., Вы знаете, как это делается).

Мое решение было расширить функциональность объекта PDOStatement по умолчанию для кэширования параметризованных значений (или ссылок), и когда оператор выполняется, используйте функциональные возможности объекта PDO для правильного выхода из параметров, когда они будут введены обратно в строку запроса. Затем мы могли бы связать себя, чтобы выполнить метод объекта-оператора и записать фактический запрос, который был выполнен в это время ( или, по крайней мере, как можно точнее воспроизведения) .

Как я уже сказал, мы не хотели модифицировать всю базу кода, чтобы добавить эту функциональность, поэтому мы перезаписываем стандартные методы bindParam() и bindValue() объекта PDOStatement, выполняем кэширование связанных данных, затем вызываем parent::bindParam() или parent :: bindValue(). Это позволило нашей существующей базе кода продолжать функционировать как обычно.

Наконец, когда вызывается метод execute(), мы выполняем нашу интерполяцию и предоставляем результирующую строку как новое свойство E_PDOStatement->fullQuery. Это может быть выведено для просмотра запроса или, например, записано в файл журнала.

Расширение вместе с инструкциями по установке и настройке доступно на github:

https://github.com/noahheck/E_PDOStatement

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Очевидно, как я уже упоминал, я написал это расширение. Поскольку он был разработан с помощью многих потоков здесь, я хотел опубликовать свое решение здесь, если кто-то еще сталкивается с этими потоками, как и я.

0
задан Boris.stavrev92 24 February 2019 в 17:35
поделиться

1 ответ

Объединения, внешние ключи и первичные ключи - все тесно связанные понятия в реляционной базе данных.

Первичный ключ однозначно идентифицирует строки в данной таблице.

Внешний внешний ключ обозначает первичный ключ в другой таблице .

A Join - это способ извлечения данных из нескольких таблиц.

Я не очень часто использовал SQL Workbench, но я предполагаю, что таблица ссылок ссылается на таблицу, содержащую несколько внешних ключей , чтобы создать отношение «многие ко многим» между двумя таблицами. [1122 ]

Например:

Таблица User

CREATE TABLE User(
    userId INT PRIMARY KEY,
    username VARCHAR(40)
);

Таблица Post

CREATE TABLE Post(
    postId INT PRIMARY KEY,
    postContents VARCHAR(max)
);

Таблица UserPost

CREATE TABLE UserPost(
    userId INT FOREIGN KEY REFERENCES User(userId),
    postId INT FOREIGN KEY REFERENCES Post(postId)
);
[1127 ] Таблица UserPost будет «таблицей ссылок», которая связывает вместе таблицы User и Post, чтобы указать, сколько сообщений может иметь любой пользователь.

Затем вы можете найти все сообщения данного пользователя с SQL-запросом, как показано ниже, используя ссылки UserPost - вместе User и Post

SELECT u.username, p.postContents FROM User u
  JOIN UserPost up ON up.userId = u.userId
  JOIN Post p ON up.postId = p.postId

Так Таким образом, таблица ссылок позволяет нам использовать объединения для объединения информации из нескольких таблиц. Из-за этого таблицы ссылок чаще называют «таблицами соединений». См. этот пост для более подробной информации о таблицах соединения.

0
ответ дан clurd 24 February 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: