Реляционная модель допускает произвольно сложные типы.Но если сложный тип имеет некоторую внутреннюю структуру, то
- дБмс игнорирует его или
- дБмс (не пользователь) предоставляет функции для управления им.
Даты, например, имеют внутреннюю структуру.Системы управления базами данных предоставляют функции для управления этой структурой путем ее усечения, извлечения ее частей, добавления и вычитания интервалов и т. Д.
JSON также имеет внутреннюю структуру.Если ваша СУБД поддерживает тип данных JSON, она предоставит функции для управления им.Если это не так, он игнорирует тот факт, что это тип JSON, и просто возвращает сохраненные данные JSON пользователю.
Пока проблем нет.
Но, сказав, что,,.
Пример: {post_id: 123, user_id: 456} создаст сообщение "Дамбо ответил на ваш вопрос Сколько это стоит ...?"
Одна проблема здесь заключается в том, что dbms не может гарантировать, что user_id 456 существует, поэтому вызывающая сторона не может знать, будет ли работать преобразование из идентификационного номера в имя.Он также не может знать, существует ли еще идентификатор сообщения 123.Эти виды ограничений предназначены для внешних ключей, и вы не можете применять ограничения внешнего ключа для идентификаторов, хранящихся в формате JSON.
Ваш основной риск - возвращение глупости (или NULL) вызывающей стороне.В некоторых случаях это совершенно оправданно.(Блоги, например. Кому действительно важно, если вы время от времени получаете бессмысленное сообщение?) В других случаях это может быть катастрофическим.
Если вместо этого вы сохраните текст «Дамбо ответил на ваш вопрос:« Сколько ... »», то не будет никаких шансов на неудачу из-за удаленных пользователей или сообщений.Даже если пост и пользователь были удалены, сообщение «Дамбо ответил на ваш вопрос:« Сколько ... »» все равно будет истинным фактом.(Хотя, возможно, несколько менее полезно, в зависимости от того, как ваша система обрабатывает удаления.)