Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ограничение на количество записей в таблице / 5 сообщений из 5, страница 1 из 1
06.11.2014, 17:30:56
    #38797567
Viacheslav_mihalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение на количество записей в таблице
Доброго времени суток,

Подскажите пожалуйста: можно ли с помощью встроенных инструментов (CONSTRAINT, INDEX) наложить ограничение на следующую таблицу DOCTOR_PHOTOS, чтобы у каждого DOCTOR_ID было бы не больше 10 PHOTO?

Код: plsql
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
CREATE TABLE "DOCTOR_PHOTOS"
(
  "ID" bigint NOT NULL DEFAULT nextval('"DOCTOR_PHOTOS_seq"'::regclass),
  "DOCTOR_ID" bigint NOT NULL,
  "PHOTO" character varying(64),
  "IS_PRIMARY" boolean,
  "EXPIRATION_TIME" timestamp without time zone,
  "IS_ICON" boolean,
  CONSTRAINT "DOCTOR_PHOTOS_pkey" PRIMARY KEY ("ID"),
  CONSTRAINT "DOCTOR_ID3" FOREIGN KEY ("DOCTOR_ID")
      REFERENCES "DOCTORS" ("ID") MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT positive_doctor_id CHECK ("DOCTOR_ID" > 0)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "DOCTOR_PHOTOS"
  OWNER TO postgres;

-- Index: "fki_DOCTOR_ID3"

-- DROP INDEX "fki_DOCTOR_ID3";

CREATE INDEX "fki_DOCTOR_ID3"
  ON "DOCTOR_PHOTOS"
  USING btree
  ("DOCTOR_ID");

-- Index: original_is_icon_photo

-- DROP INDEX original_is_icon_photo;

CREATE UNIQUE INDEX original_is_icon_photo
  ON "DOCTOR_PHOTOS"
  USING btree
  ("DOCTOR_ID", "IS_ICON")
  WHERE "IS_ICON" = true;

-- Index: original_no_photo_is_icon_false

-- DROP INDEX original_no_photo_is_icon_false;

CREATE UNIQUE INDEX original_no_photo_is_icon_false
  ON "DOCTOR_PHOTOS"
  USING btree
  ("DOCTOR_ID", "PHOTO" COLLATE pg_catalog."default")
  WHERE "PHOTO"::text = 'No_photo'::text AND "IS_ICON" = false;

-- Index: original_primary_photo

-- DROP INDEX original_primary_photo;

CREATE UNIQUE INDEX original_primary_photo
  ON "DOCTOR_PHOTOS"
  USING btree
  ("DOCTOR_ID", "IS_PRIMARY")
  WHERE "IS_PRIMARY" = true;
...
Рейтинг: 0 / 0
06.11.2014, 18:20:12
    #38797644
?Ы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение на количество записей в таблице
Viacheslav_mihalich,

заведите photo_num NOT NULL IN (0,9)
и unique на ("DOCTOR_ID",photo_num)

-- и всё.

как вариант -- добавить ("DOCTOR_ID",("ID"%10)) -- и мучиться с тем, что вставка фото будет срабатывать не на каждом nextval('"DOCTOR_PHOTOS_seq"'::regclass)


иначе -- через check + ф-ю, подсчитывающую count(). не слишком жестко
...
Рейтинг: 0 / 0
06.11.2014, 20:45:14
    #38797771
Viacheslav_mihalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение на количество записей в таблице
?Ы,

Спасибо.

Да, это как вариант, но хотелось бы обойтись без добавления дополнительных полей.

пока что вижу решение в написании хранимки на добавление фотки доктора с ручной проверкой на лимит в 10 фоток для каждого доктора. До этого добавлял фото просто через insert без хранимки.
...
Рейтинг: 0 / 0
06.11.2014, 22:58:57
    #38797855
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение на количество записей в таблице
Viacheslav_mihalich , ну так триггер прицепите на before insert fo each row.
...
Рейтинг: 0 / 0
06.11.2014, 23:23:40
    #38797866
неонка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение на количество записей в таблице
V&N Viacheslav_mihalich , ну так триггер прицепите на before insert fo each row.зачем триггер, да ?
чека по ф-ии достаточно (унутре у него, у чека, неонка, т.е. тот же триггер, но зато ручками следить не надо)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ограничение на количество записей в таблице / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]