Столкнулся со следующим вопросом, в базе данных намечаются следующие таблицы,
Например:
Users
Posts
Companies
Groups
У каждой из этих таблиц, помимо основных полей, должно быть поле description - краткое описание/пояснение соответствующей сущности. Тип этого поля - text.
Есть несколько вариантов:
1) Добавляем поле text в каждую из таблиц:
Users (description)
2) Создаем для каждой таблицы, дополнительную таблицы с описанием:
Users (description_id)
Users_description (id, description)
3) Создаем отдельную таблицу для полей descriptions всего сайта
Descriptions (id description)
Users (description_id)
Groups (description_id)
4) Вариация 3-его пункта, с вынесением связи в таблицу descriptions
Descriptions (id, sourceType, sourceId, description)
Где sourceType in ('users', 'groups', 'posts', ... ), a sourceId = идентификатор нужной entity
Мне нравится вариант номер 3 и 4.
Какой вариант предпочтительнее с вашей стороны?
1) Да помоему тут очевидно все. У вас описание для каждой сущности свое, так и добавляйте его в кортеж. Соответственно первый вариант самый приемлимый.
2) Нафига ?
3) У вас в таком случае должны быть сквозные айдишники.
4) Ваще не понял.
Помоему вы просто перетрудились и в вашей голове мысли образовали протуберанцы :)
Конечно, первый вариант. Остальные можно рассматривать только если уж хочется ну идеальнейшей оптимизации, но.
1. Эти поля у вас наверняка в запросах участвовать не будут, ни индексов, ни оптимизации им просто не нужно.
2. На выборку данных из них, если она все же потребуется, например, для создания описания базы, нужны будут запросы похитрей. На их создание и на реализацию всего, кроме первого варианта - потребуется время, которое лучше пустить на разработку базы
3. Все эти хитрые запросы не будут восприняты ни одной системой автоматической генерации описаний.
4. Вряд ли описания настолько часто совпадают и их настоль много, что оптимизация их ускорит выборку.