|
|
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
create table spr (id serial, name varchar(20)); create table people (id serial references spr(id), name varchar(20)); Так нужно создавать таблицу spr: create table spr (id serial primary key, name varchar(20)) ? Без primary key не создается references! primary key создает лишний индекс! Нужен ли вообще на практике references? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 13:28 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
Конечно без первичного ключа не получится ссылки. Индекс не лишний Нужен - это поддержка целостности данных. Если вам на целостность наплевать с высокой колокольни, то можете не делать. Но готовьтесь разруливать ситуации, когда в пиплах будет лежать то, чего нет в спр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 13:34 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
pamirКонечно без первичного ключа не получится ссылки. Индекс не лишний Нужен - это поддержка целостности данных. Если вам на целостность наплевать с высокой колокольни, то можете не делать. Но готовьтесь разруливать ситуации, когда в пиплах будет лежать то, чего нет в спр. Тип serial (integer DEFAULT nextval('tablename_colname_seq') NOT NULL) создает индекс на поле id. Primary key создает такой же индекс на id. Один из индексов явно лишний! Прочитал в Inet, что в Oracle на таблицы c небольшим кол-вом записей не делают вообще индексов, а вводят какой-то хитрый тип данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 13:59 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
Из документации PostgreSQL 8.1.9: Note: Prior to PostgreSQL 7.3, serial implied UNIQUE. This is no longer automatic. If you wish a serial column to be in a unique constraint or a primary key, it must now be specified, same as with any other data type. А если нужно serial и одновременно primary key? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 14:01 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
WinLinПрочитал в Inet, что в Oracle на таблицы c небольшим кол-вом записей не делают вообще индексов, а вводят какой-то хитрый тип данных.Скорее всего Вы имеете ввиду не хитрый тип данных, а хитрый тип таблиц IOT (индекс-ориентированные таблицы). Но это оракл, и с такими таблицами тоже надо быть осторожным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 14:16 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
Забудем про Oracle :) Что с PgSQL делать, когда нужна последовательность и первичный ключ? Создать последовательность, первичный ключ разными командами и не использовать serial? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 14:20 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
WinLinТип serial (integer DEFAULT nextval('tablename_colname_seq') NOT NULL) создает индекс на поле id. Можно поинтересоваться - как вы это увидели? Сейчас полазил PgAdmin'ом, нашел только констрейнты типа primary key. Никаких лишних индексов не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 14:21 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
pamir WinLinТип serial (integer DEFAULT nextval('tablename_colname_seq') NOT NULL) создает индекс на поле id. Можно поинтересоваться - как вы это увидели? Сейчас полазил PgAdmin'ом, нашел только констрейнты типа primary key. Никаких лишних индексов не вижу. Правда Ваша, нет там дополнительных индексов. Это я напутал, сам создал в программе лишний индекс. Сейчас из DBF перегоняю в PgSQL. Еще трудность возникла: в DBF можно было найти max(date) из индекса и далее считать все оставшиеся поля, PgSQL не дает считывать дополнительных полей: Разрешено: select id,max(dt) from people group by id; Нужно: select id,max(dt), p1, p2, p3 from people group by id; people(id, p1, p2, p3) и infprog(id, people_id, dt, p1, p2, p3 ...) infprog.people_id могут повторяться, people.id и infprog.id - уникальные. Нужно из infprog выбрать по max(dt) значения p1 ... p20 и занести в people, связав people.id и infprog.people_id. 1) Создал две функции по people_id ищем max(dt), по max(dt) и people_id ищем infprog.id 2) Навернул update с двумя вложенными select Исполнения update не дождался в обоих случаях. В таблице всего 8000 записей! 3) Cоздал временную таблицу temp(people_id,infprog_id) и потом по ней искал связи, сделав предварительно индексы people_id и infprog_id. Время выполнения секунд 10. Как в таких случаях поступают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 15:18 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
можно так например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 17:24 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
а чтовы использовать остальные поля можно выборку предыдущего поста сделать временным видом, и использовать как хотишь Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 17:28 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
ещё так можно: Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 18:51 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
Ёшещё так можно: Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. Спасибо за помощь, все работает! Понравилась идея использования "limit=1 order by dt desc". Проблемой соблюдения стандарта SQL наверно уже не буду озадачиваться, только PgSQL и ничего более :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 09:56 |
|
||
|
Два вопроса от "чайника" (primary key, references)
|
|||
|---|---|---|---|
|
#18+
pamir WinLinТип serial (integer DEFAULT nextval('tablename_colname_seq') NOT NULL) создает индекс на поле id. Можно поинтересоваться - как вы это увидели? Сейчас полазил PgAdmin'ом, нашел только констрейнты типа primary key. Никаких лишних индексов не вижу. PgAdmin-ом автосоздаваемые индексы и не увидите - они их, суки, принципиально прячут! пруф: http://grokbase.com/t/postgresql/pgadmin-support/041wj72rwh/indexes-generated-for-primary-key-are-not-show-by-pgadminiii И лишь запрос к словарю Код: plsql 1. покажет правду ((( (да, знаю что некропост. Но блин сам сегодня нарвался!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2016, 20:35 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=92&tid=1997236]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 318ms |

| 0 / 0 |
