Связывание дополнительных данных со столбцом MySQL - PullRequest
0 голосов
/ 29 ноября 2010

У меня есть типичная таблица, например,

id(int) name(varchar) address(varchar) date(datetime)

У меня также есть таблица, которая ссылается на функции проверки для каждой, например,

id(int) function(varchar) fail_message(varchar)
   1    email             Please enter a valid email address
   2    required          This field can not be left blank

Я бы хотел иметь возможностьсвяжите каждый столбец из первой таблицы с одним или несколькими этими валидаторами.

Единственный способ, которым я могу думать об этом, - вставить идентификаторы в имена столбцов, например (имя столбца: электронная почта; 1; 2)и отслеживать это через PHP, но это кажется очень грязным.

Есть ли хороший способ сделать это с реляционными базами данных?Подойдет ли реализация NoSQL этой проблеме лучше?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2010

Подобно тому, что сказал Дэн, относительно простым способом реализации ассоциации в sql было бы сделать следующее:

id(int) function_id(int) col_name(varchar)
1       1                address
2       1                second_address
3       2                address
4       2                name

А затем, когда вы захотите выполнить проверку отказа, используйте приведенную выше таблицусвязать сообщение об ошибке с именем столбца (например, «выбрать function_id из вышеуказанной таблицы, где col_name =« адрес »»), а затем запросить таблицу ошибок.Впоследствии эти таблицы можно было бы объединить, используя представление с объединением, чтобы было достаточно одного запроса.

Надеюсь, это поможет.

0 голосов
/ 29 ноября 2010

поместите это в другую таблицу, которая странным образом описывает столбцы для таблиц, это очень похоже на расширение таблицы, в которой перечислены столбцы таблицы с дополнительными столбцами

Допустим, если вы расширите свой пример, скажем, локализованными строками, это будет означатьчто fail_message станет fail_message_id, а таблица fail_message будет иметь столбцы (id, language, message)

...