Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Добрый день :) Начинаю изучать наследование таблиц в Постгре - хотелось бы узнать возможно ли следующее: Создаю таблицу user_base c ключевым полем id от нее наследую таблицу user с ключевым полем id Создаю таблицу device_base c ключевым полем id и внешним ключем id_user CONSTRAINT fk_id_user FOREIGN KEY (id_user) REFERENCES user_base (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION очень надеялась, что device_base будет воспринимать пользователей, как user_base, так и user но :( при создании записи в таблице device_base с id_user из user -- говорит о неправильном внешнем ключе.... постгре, конечно, прав, но как мне реализовать такую схему наследования? PS: Мжет кто-нибудь порекомендует форумы по Постгре :) чувствую зависла в теме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 10:13 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Вот ссылка по теме http://www.postgresql.org/docs/current/static/ddl-inherit.html 5.8.1 Specifying that another table's column REFERENCES cities(name) would allow the other table to contain city names, but not capital names. There is no good workaround for this case. Выходит, нельзя так сделать...:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 12:27 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Ми There is no good workaround for this case.решение - произвести таки доп таблицу (центровую таблицу звезды с полем id, на которую вторичными ссылаться как из user так и из user_base (к соотвествующим таблам написать триггера беворе инсерт(/апдейт)/дилет - на пополнение(/апдейт)/очищение этой центральной таблички (ктстати, если не проверять при инсерте наличия id, тот этот же механизм обеспечит отсутствие дублей id в разных таблах иерархии(того же можно добиться и иным триггером)). Далее вязаться device_base-ом на эту "центровую таблицу". (формально все ограничения целостности будут соблюдены). Вообще говоря - видимо было бы чудно если бы центровая "таблица" была бы index-organized -"таблицей" (т.е. попросту - индексом). Но видимо тут у разработчиков проблемы с. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:04 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
решение - произвести таки доп таблицу Можно так. Но при таком подходе наследование user от user_base и не требуется вовсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:20 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Ми решение - произвести таки доп таблицу Можно так. Но при таком подходе наследование user от user_base и не требуется вовсе. требуется - для выборок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:35 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
может не заморачиваться с fk? а реализовать проверку на триггерах? или check? кстати с наследованием триггеров - в Postgre - беда-печаль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:39 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Ми не требуется вовсе.требуется и удобно - немног о разные понятия. звзда известна и без наследования, но наследование поставляет некие (возможно - эфемерные) удобства. например выборка по условию из вью с UNION не обязательно задействует индексы (где-то тут было, кажется для 8.1.), а для выборки через предка - использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:18 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
assaвыборка по условию из вью с UNION не обязательно задействует индексы (где-то тут было, кажется для 8.1.)ЗЫ это конечно можно отнести на счет недоработок оптимизатора, ну, дык - инструмент таков, каков он есть, и, если уж выбран, приходится пользовать именно его особенности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:21 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Млин бред какой-то.... Че мозг новичку парить... Легко, это наследование сделать можно, более подробно распиши организацию и структуру таблиц, в ответ получишь готовое решение... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2007, 07:41 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
кукусяочень надеялась, что device_base будет воспринимать пользователей, как user_base, так и user но :( при создании записи в таблице device_base с id_user из user -- говорит о неправильном внешнем ключе.... постгре, конечно, прав, но как мне реализовать такую схему наследования? Как я понял из написанного вами, вытекают следующее варианты: /* Если используем один обьедененный внешний ключ */ -- Таблица User Drop Sequence If Exists "uid" Cascade; Create Sequence "uid" Increment 1 Start 1; Drop Table If Exists "User" Cascade; Create Table "User" ( uid integer default nextval('"uid"') not null, uname character varying(100) not null, constraint "UserPK" primary key(uid), constraint "UserU" unique(uname) ) without OIDS; -- Таблица UserBase Drop Sequence If Exists "ubid" Cascade; Create Sequence "ubid" Increment 1 Start 1; Drop Table If Exists "UserBase" Cascade; Create Table "UserBase" ( uid integer not null, ubid integer default nextval('"ubid"') not null, ubname character varying(100) not null, constraint "UserBaseFK" foreign key(uid) references "User" on delete cascade, constraint "UserBasePK" primary key(uid,ubid), constraint "UserBaseU" unique(ubname) ) without OIDS; -- Таблица DeviceBase Drop Sequence If Exists "did" Cascade; Create Sequence "did" Increment 1 Start 1; Drop Table If Exists "DeviceBase" Cascade; -- Если наследуем таблицу User Create Table "DeviceBase" ( uid integer not null, did integer default nextval('"did"') not null, dname character varying(100) not null, constraint "DeviceBaseFK" foreign key(uid) references "User" on delete cascade, constraint "DeviceBasePK" primary key(did,uid), constraint "DeviceBaseU" unique(dname) ) without OIDS; -- Если наследуем таблицу UserBase Create Table "DeviceBase" ( uid integer not null, ubid integer not null, did integer default nextval('"did"') not null, dname character varying(100) not null, constraint "DeviceBaseFK" foreign key(uid,ubid) references "UserBase" on delete cascade, constraint "DeviceBasePK" primary key(did,uid,ubid), constraint "DeviceBaseU" unique(dname) ) without OIDS; /* Если не используем обьедененный внешний ключ */ -- Таблица User Drop Sequence If Exists "uid" Cascade; Create Sequence "uid" Increment 1 Start 1; Drop Table If Exists "User" Cascade; Create Table "User" ( uid integer default nextval('"uid"') not null, uname character varying(100) not null, constraint "UserPK" primary key(uid), constraint "UserU" unique(uname) ) without OIDS; -- Таблица UserBase Drop Sequence If Exists "ubid" Cascade; Create Sequence "ubid" Increment 1 Start 1; Drop Table If Exists "UserBase" Cascade; Create Table "UserBase" ( uid integer not null, ubid integer default nextval('"ubid"') not null, ubname character varying(100) not null, constraint "UserBaseFK" foreign key(uid) references "User" on delete cascade, constraint "UserBasePK" primary key(uid), constraint "UserBaseU" unique(ubname) ) without OIDS; -- Таблица DeviceBase Drop Sequence If Exists "did" Cascade; Create Sequence "did" Increment 1 Start 1; Drop Table If Exists "DeviceBase" Cascade; -- Если наследуем таблицу User Create Table "DeviceBase" ( uid integer not null, did integer default nextval('"did"') not null, dname character varying(100) not null, constraint "DeviceBaseFK" foreign key(uid) references "User" on delete cascade, constraint "DeviceBasePK" primary key(did), constraint "DeviceBaseU" unique(dname) ) without OIDS; -- Если наследуем таблицу UserBase Create Table "DeviceBase" ( ubid integer not null, did integer default nextval('"did"') not null, dname character varying(100) not null, constraint "DeviceBaseFK" foreign key(ubid) references "UserBase" on delete cascade, constraint "DeviceBasePK" primary key(did), constraint "DeviceBaseU" unique(dname) ) without OIDS; -- Если наследуем обе таблицы Create Table "DeviceBase" ( uid integer not null, ubid integer not null, did integer default nextval('"did"') not null, dname character varying(100) not null, constraint "DeviceBaseFK1" foreign key(uid) references "User" on delete cascade, constraint "DeviceBaseFK2" foreign key(ubid) references "UserBase" on delete cascade, constraint "DeviceBasePK" primary key(did), constraint "DeviceBaseU" unique(dname) ) without OIDS; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2007, 08:44 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Только не понимаю зачем тут наследование когда ссылочная целостность вполне подойдет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2007, 09:48 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
кстати насчет наследования. что-то тут не то с первичными ключами. вот пример. Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2007, 09:18 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
ZemAкстати насчет наследования. что-то тут не то с первичными ключами. вот пример. Код: plaintext Да. В PostgreSQL ключи являются атрибутом отношения, и на наследования им чихать и плевать. Межотношенейских (мультитабличных по сути) ключей в PostgreSQL нет. Есть всякие "левые" способы обхода этого явления, на форуме обсуждались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2007, 09:41 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Ребят мне может кто-нибудь обьяснить зачем в данном случае наследование, может я конечно чего-то не догоняю а? Чем ссылки то не подойдут а? И насколько понял покрутя PostgreSQL и почитая мануалы, c реализацтей наследований не совсем все гладко выходит, есть подводные камни, так за чем, штаны через голову надевать? И в дабавок советовать это новичку, чтоб он 20000 раз наткнулся на тебе же грабли, как и все в свое время? Просто логики не вижу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2007, 11:52 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Сорри за офф топ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2007, 11:54 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
bsdi4Ребят мне может кто-нибудь обьяснить зачем в данном случае наследование, может я конечно чего-то не догоняю а? Чем ссылки то не подойдут а? И насколько понял покрутя PostgreSQL и почитая мануалы, c реализацтей наследований не совсем все гладко выходит, есть подводные камни, так за чем, штаны через голову надевать? И в дабавок советовать это новичку, чтоб он 20000 раз наткнулся на тебе же грабли, как и все в свое время? Просто логики не вижу... там где наследование используется к месту - очень важаня фича, которой нет других больших серверах баз. Я ствлю эксперименты с полнтектсовым поиском для большой базы. Так вот делил базу для быстрого добавления данных и ускорения поиска по совету коллег из форума используя наследование... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2007, 13:24 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
bsdi4 Winnipuh bsdi4Ребят мне может кто-нибудь обьяснить зачем в данном случае наследование, может я конечно чего-то не догоняю а? Чем ссылки то не подойдут а? И насколько понял покрутя PostgreSQL и почитая мануалы, c реализацтей наследований не совсем все гладко выходит, есть подводные камни, так за чем, штаны через голову надевать? И в дабавок советовать это новичку, чтоб он 20000 раз наткнулся на тебе же грабли, как и все в свое время? Просто логики не вижу... там где наследование используется к месту - очень важаня фича, которой нет других больших серверах баз. Я ствлю эксперименты с полнтектсовым поиском для большой базы. Так вот делил базу для быстрого добавления данных и ускорения поиска по совету коллег из форума используя наследование... Так вот уебок, прочитай первый пост и заткни хлебало! а для тех кто в танке мы говорим имеено про него. и не флуди, гандон. я не знаю к кому именно вы обращаетесь, но прочитал первый пост: "Начинаю изучать наследование таблиц в Постгре ..." - хорошо изучаете, начали с ключевых слов :-))))))) и подпись у вас правильная, удачи вам в изучении! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2007, 15:28 |
|
||
|
Наследование таблиц
|
|||
|---|---|---|---|
|
#18+
Winnipuh bsdi4 Winnipuh bsdi4Ребят мне может кто-нибудь обьяснить зачем в данном случае наследование, может я конечно чего-то не догоняю а? Чем ссылки то не подойдут а? И насколько понял покрутя PostgreSQL и почитая мануалы, c реализацтей наследований не совсем все гладко выходит, есть подводные камни, так за чем, штаны через голову надевать? И в дабавок советовать это новичку, чтоб он 20000 раз наткнулся на тебе же грабли, как и все в свое время? Просто логики не вижу... там где наследование используется к месту - очень важаня фича, которой нет других больших серверах баз. Я ствлю эксперименты с полнтектсовым поиском для большой базы. Так вот делил базу для быстрого добавления данных и ускорения поиска по совету коллег из форума используя наследование... Так вот уебок, прочитай первый пост и заткни хлебало! а для тех кто в танке мы говорим имеено про него. и не флуди, гандон. я не знаю к кому именно вы обращаетесь, но прочитал первый пост: "Начинаю изучать наследование таблиц в Постгре ..." - хорошо изучаете, начали с ключевых слов :-))))))) и подпись у вас правильная, удачи вам в изучении! Ой епт... японский гвоздь !!!! это не тебе! Прости пожалуйста! Я тут перепутал нафиг Copy Paste, меня тут один мурло просто задалбал! Ради бога прости!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2007, 15:58 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34968685&tid=2004833]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 253ms |
| total: | 408ms |

| 0 / 0 |
