Как я могу иметь столбец с именем table_name в одной таблице, который я могу использовать для ссылки на другие таблицы в mysql DB? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть веб-приложение с несколькими таблицами. Эти таблицы и значения в их столбцах хранятся в таблицах mysql, где каждая таблица mysql представляет одну таблицу в приложении. Допустим, вот что у меня в базе данных mysql:

table1 with column1_1, column1_2, column1_3
table2 with column2_1, column2_2
table3 with column3_1, column3_2, column3_3, column3_4

У меня есть новое требование, в котором я должен иметь возможность разрешить пользователю комментировать любой из столбцов любой из таблиц. , Для этого я создаю mysql таблицу с именем 'comments' со следующими полями:

id
table_name (name of table on which comment is being made)
column_name (name of the column on which comment is being made)

В настоящее время table_name и column_name являются varchar. Мне интересно, если есть способ ограничить столбец table_name для получения значений существующих имен таблиц, а именно. table1, table2 и table3, а также иметь возможность ссылаться на эти таблицы, используя запись в table_name. Аналогично, для column_name я хочу иметь возможность ссылаться на столбец, присутствующий в других таблицах. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 24 апреля 2020

В MySQL, вы можете получить имена таблиц в схеме, используя следующий запрос:

SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';

Вы также можете получить имена столбцы в таблице с запросом:

SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'your_database_name' AND table_name = 'your_table';

В соответствии с документацией MySQL ограничения CHECK не могут содержать пользовательские функции или подзапросы (среди прочего ). Вместо использования ограничения CHECK вы можете написать триггер, который проверяет, является ли вставленный table_name действительным, и, если это так, проверяет, принадлежит ли column_name этой таблице.

...