|
|
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Для реализации языковой версионности, создал 2 таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Допустимо ли что в таблице rubrics присутствует одно поле??? Если нет, то как сделать правильно, с учётом того что ID будет использоваться в других таблицаx (PK). Если допустимо, тогда дополнительный вопрос: Как можно "вставить" в эту таблицу пустые данные, чтобы использовалась секвенция для поля ID. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 11:12 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
anydasa, Возможность вставки в такую таблицу звисит от СУБД. По ДДЛ Вашу СУБД я определить не могу (Оракл?), но в МССКЛ, например, можно. В любом случае никто не мешает добавить в "public.rubrics" еще одно поле без особой смысловой нагрузки. авторЕсли допустимо, тогда дополнительный вопрос: Как можно "вставить" в эту таблицу пустые данные, чтобы использовалась секвенция для поля ID.Недопустимо. Такие вещи спрашивайте в профильной ветке. Вот очем стОит поговорить: Какая-то странная у Вас реализация "языковой версионности". Для чего это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 11:22 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Senya_Lanydasa, Возможность вставки в такую таблицу звисит от СУБД. По ДДЛ Вашу СУБД я определить не могу (Оракл?), но в МССКЛ, например, можно. PostgreSQL Senya_L Вот очем стОит поговорить: Какая-то странная у Вас реализация "языковой версионности". Для чего это? Собственно поэтому и спрашиваю. Раньше как то не задумывался, да и потом, я не единственный кто так делает, причём далеко. База для сайта. Сайт мультиязычный. Это не единственный случай в базе, таких пар около десяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 11:33 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
anydasaРаньше как то не задумывался, да и потом, я не единственный кто так делает, причём далеко.Если "все" так делают, то это не повод поступать также. :) Да еще пары таких табличек создавать. Такое проделывают обычно когда требуется идентификатор уникальный в пределах нескольких таблиц, а СУБД не поддерживает секуинсы. Из Ваших пояснений, а точнее их отсутствия :), непонятно - зачем? Кстати, Постгрес поддерживает CREATE SEQUENCE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 11:52 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Senya_LДа еще пары таких табличек создавать. Такое проделывают обычно когда требуется идентификатор уникальный в пределах нескольких таблиц, а СУБД не поддерживает секуинсы. Из Ваших пояснений, а точнее их отсутствия :), непонятно - зачем? Кстати, Постгрес поддерживает CREATE SEQUENCE?Если избавиться от таблицы "Рубрики", то как потом из других таблиц ссылаться на рубрику, без учета языка? FK на таблицу "rubrics_txt" только по "id_rubrics" создать не удасться. Либо придется обходиться без FK и вручную контролировать целостность, либо создавать такую таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 12:00 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Senya_L Да еще пары таких табличек создавать. Такое проделывают обычно когда требуется идентификатор уникальный в пределах нескольких таблиц, а СУБД не поддерживает секуинсы. НЕ понял! Senya_Lнепонятно - зачем? Если рубрики делать одной таблицей, то как мне сделать уникальный идентификатор, если уникальность задаётся на два поля, id_rubrics, s_lang. Ведь, рубрика, независимо от версии языка, остаётся та же. Senya_LКстати, Постгрес поддерживает CREATE SEQUENCE? Поддерживает, был вопрос как мне им воспользоваться. Уже решил: Код: plaintext Код: plaintext Вобщем, вопрос КАК , уже решён. Осталось услышать мнения о самом подходе реализации версионности. Была ещё мысль делать через общий словарик, где будут храниться все переводы всех таблиц. А у родителей создавать кода (Россия = russia ; IT,программисты - it_programm ; и тп.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 12:16 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
anydasaSenya_L Да еще пары таких табличек создавать. Такое проделывают обычно когда требуется идентификатор уникальный в пределах нескольких таблиц, а СУБД не поддерживает секуинсы. НЕ понял! Тынц anydasaЕсли рубрики делать одной таблицей, то как мне сделать уникальный идентификатор, если уникальность задаётся на два поля, id_rubrics, s_lang. Ведь, рубрика, независимо от версии языка, остаётся та же.Или я не понимаю, или Вы мудрите. Есть же PK Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 13:02 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Senya_LНу так можно же создать столбец, назовем его prev_version_id которое FK, ссылающееся на предыдущую версию рубрики. Этого не требуется. FK можно создать только на уникальный ключ, а уникальность у нас это id_rubrics,s_lang, следовательно FK на id_rubrics нельзя, так как он не единственный участник в PK т.е. не уникальный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 13:15 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
anydasaSenya_LНу так можно же создать столбец, назовем его prev_version_id которое FK, ссылающееся на предыдущую версию рубрики. Этого не требуется. FK можно создать только на уникальный ключ, а уникальность у нас это id_rubrics,s_lang, следовательно FK на id_rubrics нельзя, так как он не единственный участник в PK т.е. не уникальный.И что из этого? Используйте суррогатный первичный ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 13:18 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Senya_LИ что из этого? Используйте суррогатный первичный ключ. Как сказал Bely , - "Если избавиться от таблицы "Рубрики", то как потом из других таблиц ссылаться на рубрику, без учета языка?" Задача сослаться на рубрику, а не на языковую версию рубрики ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 13:21 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
anydasaSenya_LИ что из этого? Используйте суррогатный первичный ключ. Как сказал Bely , - "Если избавиться от таблицы "Рубрики", то как потом из других таблиц ссылаться на рубрику, без учета языка?" Задача сослаться на рубрику, а не на языковую версию рубрикиПоймите, мой хрустальный шар замутнен пятничными флюидами. Я не могу догадаться про постановку задачи. Я Вам предлагаю добавить столбец, обычный последовательно нумеруемый айдишник. Версии образуют цепочку (кстати, на поле prev_version_id должен быть наложен уникальный констрейнт, чтобы получилась именно цепочка). Последняя запись в этой цепочке - текущая актуальная версия рубрики с определенным языком. Т.е. чтобы сослаться на рубрику выбираете пару значений id_rubrics,s_lang и ищете последнюю в последовательности версий запись. Кстати, для экономичности можно версионность вести не через prev_version_id, а через next_version_id. У последней версии это поле будет НУЛЛ. Улавливаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 13:28 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Senya_L Поймите, мой хрустальный шар замутнен пятничными флюидами. Я не могу догадаться про постановку задачи. Я Вам предлагаю добавить столбец, обычный последовательно нумеруемый айдишник. Версии образуют цепочку (кстати, на поле prev_version_id должен быть наложен уникальный констрейнт, чтобы получилась именно цепочка). Последняя запись в этой цепочке - текущая актуальная версия рубрики с определенным языком. Т.е. чтобы сослаться на рубрику выбираете пару значений id_rubrics,s_lang и ищете последнюю в последовательности версий запись. Кстати, для экономичности можно версионность вести не через prev_version_id, а через next_version_id. У последней версии это поле будет НУЛЛ. Улавливаете? Честно говоря не понял ничего. Но смыл то в чём, что у версии будет уник номер. У нас есть другие таблицы, которые хотят сослаться на рубрики, и как это сделать с вашем вариантом? Т.е. это конечно можно, но как потом работать? Впринципе и это можно, но не кажется ли Вам, что гараздо легче использовать схему двух таблиц??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 13:44 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
anydasaВпринципе и это можно, но не кажется ли Вам, что гараздо легче использовать схему двух таблиц???Не кажется. Толку от нее никакого. Вот пример (ДДЛ для Файерберда) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 13:56 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Senya_L, Допустим. А теперь представим что у нас есть таблизца "Объявы" которая связана через "Объява_ref_Рубрика". ОТ "Объява" ID и от "Рубрика" оба в PK, короче много ко многим. У нас может быть объява лежать с разными номерами ID RUBRICS, т.к. сущности разные, но рубрика будет одна. И это плохо ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 14:25 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
anydasaSenya_L, Допустим. А теперь представим что у нас есть таблизца "Объявы" которая связана через "Объява_ref_Рубрика". ОТ "Объява" ID и от "Рубрика" оба в PK, короче много ко многим. У нас может быть объява лежать с разными номерами ID RUBRICS, т.к. сущности разные, но рубрика будет одна. И это плохо ИМХО.Не нравится, что одну и ту же "Объява" можно связать с несколькими "Рубрика", которые всего лишь являются разными версиями? Это действительно нехорошо, согласен. Но декларативными ограничениями не ограничиваются способы поддержания целостности данных. ;) Есть триггеры, есть ХП. ЗЫ. Кстати, я вот понимаю, а что в Вашей "парно-табличной" схеме помешает сделать то же самое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 14:44 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
> Допустимо ли что в таблице rubrics присутствует одно поле??? Допустимо. Но не рационально. В базе данных есть смысл поддерживать глобальные управляющие идентификаторы для более сложных задач (например, история изменений). Локализацию проще реализовать, перенеся соответствующий идентификатор в таблицу rubrics_txt. Получится иерархия, с которой будет удобно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 15:00 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Допустимо ли что в таблице rubrics присутствует одно поле??? Допустимо. Но не рационально. В базе данных есть смысл поддерживать глобальные управляющие идентификаторы для более сложных задач (например, история изменений). Локализацию проще реализовать, перенеся соответствующий идентификатор в таблицу rubrics_txt. Получится иерархия, с которой будет удобно работать.У автора не иерархия, у него версионность рубрикатора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 16:17 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Senya_L ЗЫ. Кстати, я вот понимаю, а что в Вашей "парно-табличной" схеме помешает сделать то же самое? Не уверен что понял Ваш вопрос правильно. Сделать что, привязки? Так я связывать буду с rubrics.id тут он уникален. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 16:18 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
anydasaSenya_L ЗЫ. Кстати, я вот понимаю, а что в Вашей "парно-табличной" схеме помешает сделать то же самое? Не уверен что понял Ваш вопрос правильно. Сделать что, привязки? Так я связывать буду с rubrics.id тут он уникален.Вроде понятно выражаюсь. Пятница, видимо сказывается. :) Что мне помешает создать связи для одной и той же Объявы к разным версиям одной и той же Рубрики? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 16:25 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Senya_LВроде понятно выражаюсь. Пятница, видимо сказывается. :) :) Видимо Senya_LЧто мне помешает создать связи для одной и той же Объявы к разным версиям одной и той же Рубрики? Как, если языки описываются в таблице rubrics_txt, а связываем мы с rubrics? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 16:33 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
Я Вас неправильно понял. Мы про разные версии говорим. Разбейте таблицу Рубрик-ткст на две или сделайте иерархический справочник. Иначе с 3НФ у Вас будут нелады. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 16:51 |
|
||
|
1 поле в таблице??? допустимо?
|
|||
|---|---|---|---|
|
#18+
> У автора не иерархия, у него версионность рубрикатора. Дружище, приведенное решение - исчерпывающе пОлно для сформулированной задачи. Просто читайте и запоминайте. У автора проблемы с терминологией. Никакой "языковой версионности" не существует. В этом контексте есть две независимые задачи - мультиязычность (эту задачу решает автор вопроса) и версионность. Они никак друг с другом не связаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2009, 16:28 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=93&tid=1543437]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 349ms |

| 0 / 0 |
