Как лучше такое реализовать?
Пусть есть таблица Т1 (id, f1, f2, f3...) и таблица Т2(id, f). В Т2 поле f должно представлять собой что то вроде указателя на одно из полей в Т1, т.е например у меня есть Т2.id = 13, я ищу запись в Т2, смотрю поле Т2.f, там нахожу, например "f2", и делаю SELECT f2 FROM Т1.
Это можно несложно сделать, если в Т2.f хранить строку и динамически генерировать запрос, меня интересует, можно ли это сделать как-то ещё?
Заранее спасибо.
Может, расскажете исходные условия задачи, т.е. для чего нужно такое решение, т.к. на первый взгляд оно кажется довольно странным.
В качестве таблицы Т1 выступает, скажем, сущность "Продукт". поскольку разные группы продуктов имеют разные характеристики, то нужны шаблоны, т.е например "Диск с фильмом" имеет характеристику "продолжительность" (колонка f1 например), а "книга" - "число страниц" (f2) и "Фамилия автора" (f3).
Я извлекаю продукт, смотрю его шаблон, там сказано, что продукт сделан по шаблну "книга". Поэтому я извлекаю только главные поля и поля f2 и f3. (Возможно, не совсем то, что я описал выше, но идея одна и таже)
т.е. из Вашей "горизонтальной" схемы она превращается в вертикальную
Было: Т1 (id, f1, f2, f3...)
Стало: T1 (Name, Value)
f1 | SomeValue1
f2 | SomeValue2
f3 | SomeValue3
....
Да, понимаю, но учитывая большое число таких параметров и большое число объектов к которым они относятся доставать по несколько таких параметров может быть не эффективно (особенно доставая сразу несколько объектов, например тех же самых книжек), хотелось бы всё иметь в одной таблице и доставать всё нужное одним запросом.
Зачем изобретать велосипед, если все уже давно изобретено до вас? Ваш подход как раз громоздок, неунивесален и нереализуем в рамках реляционного подхода (либо реализуем через 33 забора). Вам при появлении нового свйоства нужно каждый раз менять структуру вашей мега-таблицы. Как уже было сказано, заводится отдельная таблица свойств, а в таблицах-групп продуктов будут ссылки на записи этой таблицы. При добавлении нового свойства - всего лишь нужно будет добавить новую запись в таблице свойств.
Цитата: oxotnik333
Обычно для таких схем есть доп таблица тип параметра/значение...
т.е. из Вашей "горизонтальной" схемы она превращается в вертикальную
Было: Т1 (id, f1, f2, f3...)
Стало: T1 (Name, Value)
f1 | SomeValue1
f2 | SomeValue2
f3 | SomeValue3
....
т.е. из Вашей "горизонтальной" схемы она превращается в вертикальную
Было: Т1 (id, f1, f2, f3...)
Стало: T1 (Name, Value)
f1 | SomeValue1
f2 | SomeValue2
f3 | SomeValue3
....
Данный подход, боюсь, не применим, Value может для одного свойства иметь тип Text, для другого Int, а для третьего Image. Не буду же я каждый раз, когда нужно свойство нового типа новую таблицу создавать. а в моём методе - добавил колонку в таблице и всё.