Вопрос по sql – Дизайн базы данных с переменным количеством полей

1

Я делаю сайт для клиента, но наткнулся на проблему и мне нужен какой-то совет по ней.

Для каждого проекта они хотят иметь возможность устанавливать переменное количество изображений и (иногда) некоторый соответствующий текст.

Я думал о хранении всей информации в одном поле, вместо того, чтобы перевести field_1 в field_99 на тот случай, если им нужно 99 полей.

// database column

'../fotos/foto1.png',
'hier komt tekst',
'../fotos/foto2.png',
'', (empty text)
'../fotos/foto3.png'

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

Какой предпочтительный способ сделать это?

Положите изображения в отдельную таблицу и используйте внешний ключ. toniedzwiedz
Другие ответили на вопрос, но поскольку вы говорите, что делаете это для клиента, я просто хочу убедиться, что вы понимаете, насколько плоха идея объединения нескольких элементов данных или сохранения числовых данных в текстовом поле. Выwill жалею об этом. Если вы уже сделали это в других частях своего приложения, сейчас самое время исправить это, прежде чем это станет еще труднее сделать. Текстовые поля должны хранить только текст. wadesworld

Ваш Ответ

2   ответа
3

Создайте другую таблицу (например, FOTO_CODES) со всеми возможными значениями foto и сгенерируйте для них идентификатор.

Создайте другую дочернюю таблицу, которая будет иметь идентификатор и идентификатор записи основной таблицы из таблицы FOTO_CODES и данных FOTO (изображение).

Это называется нормализацией.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded guy1997
0

Решение, которое вы описали, нарушает принципвалентность и, следовательно, 1NF. У вас проблемы с ведением и запросом данных в этом формате.

Это классическое отношение «один ко многим», которое можно смоделировать двумя способами:

1) Определение отношений:

enter image description here

2) Неидентифицирующие отношения:

enter image description here

У StackOverflow есть свои плюсы и минусы, и на эту тему уже есть множество дискуссий.

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