Как проектируют таблицы с непостоянным кол-вом полей

  • Автор темы Автор темы MpaK69
  • Дата начала Дата начала

MpaK69

Новичок
Как проектируют таблицы с непостоянным кол-вом полей

Попытаюсь обяснить проще, есть CMS, есть некие типы разделов, например Новости и Статьи

у новостей
3 поля, Заголовок, Дата и Текст

у статьи Заголовок, Текст, Изображение, Приложенный Файл

конечно проще было бы разделить на 2 разные таблицы, но, к примеру различных типов разделов больше 5-6 у каждого разные поля и т.п. В дальнешем делать поиск составляя сложные запросы из union или join не то...

Как проектируют подобные системы, на примере связанных таблиц???
 
Базы данных проектируют исходя из теории реляционных БД.
Понятия "переменного числа атрибутов" там нет.

В данном случае - у тебя имеются данные разных типов, следовательно им место в разных таблицах, ибо это разные сущности.

Запросы с JOIN - они совсем не сложные, а не сделав разделение - ты потом получишь на порядки больше проблем при развитии системы

в твоем случае я бы сделал так

1. Таблица "Текст", поля TEXT_ID(INT), TEXT_DATA(MEDIUMTEXT).
Хранит тексты на сайте. Нужно для унификации работы с BLOB полями - банально чтобы выборка из основной таблицы не тормозила на больших объемах (мало ли лента новосте

2. Таблица "Изображения", поля IMAGE_ID(INT), IMAGE_TYPE(char(4)), IMAGE_NAME(char(255))
Хранит информацию о закачанных картинках.

2. Таблица "Файлы", поля FILE_ID(INT), FILE_TYPE(char(30)), FILE_NAME(char(255))
Хранит информацию о закачанных картинках.

3. Таблица новости, поля NEWS_ID(INT), NEWS_TITLE(char(255)), NEWS_DATE (DATETIME), TEXT_ID(INT)

4. Таблица статьи, поля ARTICLE_ID(INT), ARTICLE_TITLE(char(255)), TEXT_ID(INT), IMAGE_ID (INT), FILE_ID(INT).
 
в принципе рассматривал два варианта

создать таблицы для различных типов типа

id | feld_name | type

далее делать select * from 'filed1', 'field2', 'field3' WHERE id = 10


и второй вариант, ложить в одну таблицу в поле logtext xml поля
потом доставать через like '%<field_name>value</fieldname>%'
 
MpaK69

В базе XML-ю не место. Он предназначен в первую очередь для ОБМЕНА разнородными данными между разными системами.

Но впрочем хочешь - через одно место - делай.

Опять-же вывод разных объектов должен быть разным.
 
Сверху