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

MpaK69

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

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

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

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

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

Как проектируют подобные системы, на примере связанных таблиц???
 

alexhemp

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

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

Запросы с 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).
 

MpaK69

Новичок
в принципе рассматривал два варианта

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

id | feld_name | type

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


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

alexhemp

Новичок
MpaK69

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

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

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