Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > проверьте мой SQL код (создание бд)


Автор: delphi_ 25.5.2011, 20:01
элементарный пример бд http://s002.radikal.ru/i200/1105/4a/454575a53152.png


правильно ли я делаю в постгресе (код выдает power arhitect) - меня интересует создание связей - как я
понимаю он делает соединение по индексам (?) - но все спорные поля я специально сделал латинскими,и все равно он откуда-то
берет кириллицу для создания связей.вопрос-откуда?

нужно для диплома,после аксеса как-то все непривычно (после легких пассов руками в редакторе схемы тамошней)

Код



CREATE TABLE public.Родственные связи (
                ID_rodstv_svyaz INTEGER NOT NULL,
                Наим_родств_связей VARCHAR NOT NULL,
                CONSTRAINT rpdstvenniesvyziindex PRIMARY KEY (ID_rodstv_svyaz)
);


CREATE TABLE public.Главная (
                ID_man INTEGER NOT NULL,
                Имя VARCHAR NOT NULL,
                Фамилия VARCHAR NOT NULL,
                Отчество VARCHAR NOT NULL,
                Дата_рождения DATE NOT NULL,
                Улица VARCHAR NOT NULL,
                Дом INTEGER NOT NULL,
                Строение INTEGER NOT NULL,
                Этаж INTEGER NOT NULL,
                Серия_паспорта INTEGER NOT NULL,
                Номер_паспорта INTEGER NOT NULL,
                Квартира_в_собств BOOLEAN NOT NULL,
                Выдан VARCHAR NOT NULL,
                Кем_Выдан VARCHAR NOT NULL,
                Когда_выдан DATE NOT NULL,
                Инвалидность VARCHAR NOT NULL,
                Пенс_удостоверение INTEGER NOT NULL,
                Дата_оформления DATE NOT NULL,
                CONSTRAINT glavnaya_index PRIMARY KEY (ID_man) 


CREATE TABLE public.Родственники (
                ID_zapisi_rodstv INTEGER NOT NULL,
                ID_rodstv_svyaz INTEGER NOT NULL,
                ID_man INTEGER NOT NULL,
                Фамилия VARCHAR NOT NULL,
                Имя VARCHAR NOT NULL,
                Отчество VARCHAR NOT NULL,
                CONSTRAINT rodstvenniki_index PRIMARY KEY (ID_zapisi_rodstv)
);


ALTER TABLE public.Родственники ADD CONSTRAINT _______________________________fk   откуда тут кириллица?
FOREIGN KEY (ID_rodstv_svyaz)
REFERENCES public.Родственные связи (ID_rodstv_svyaz)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

ALTER TABLE public.Родственники ADD CONSTRAINT _____________________fk  откуда тут кириллица2?
FOREIGN KEY (ID_man)
REFERENCES public.Главная (ID_man)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

Автор: LSD 26.5.2011, 09:47
Цитата(delphi_ @  25.5.2011,  21:01 Найти цитируемый пост)
правильно ли я делаю в постгресе

Неправильно. Все названия только таблиц, колонок и т.д. только латиницей, никаких исключений smile 

Автор: delphi_ 26.5.2011, 12:21
верно,попробую на простом примере

3 таблицы-  главная,машины,цвета

человек может иметь МНОГО машин,машина может иметь только ОДИН ЦВЕТ

вот такая вот схема

http://s55.radikal.ru/i147/1105/bf/b8b7776c8942.png

Код

CREATE TABLE color
(
  color_id integer,
  color_name text,
  PRIMARY KEY (color_id)
);
CREATE TABLE cars
(
  id_zapisi integer,
  id_man integer,
  car_model text,
  color_id text,
  PRIMARY KEY (id_zapisi)
);
CREATE TABLE main
(
  id_man integer,
  name text,
  surname serial,
  adress text,
  PRIMARY KEY (id_man)



верно ли я мыслю? можно ли соединять id_man в таблицах и color_id ? программа мне этого сделать не дает.проблемы в логике? в access+.net все 100% пашет на аналогичном примере

Автор: LSD 26.5.2011, 12:39
Цитата(delphi_ @  26.5.2011,  13:21 Найти цитируемый пост)
можно ли соединять id_man в таблицах и color_id ?

Что значит "соединять" join?

Автор: delphi_ 26.5.2011, 12:44
имею ввиду создать связи один-ко-многим

Автор: Akina 26.5.2011, 12:59
Уж не хочешь ли ты создать два FK из разных таблиц на одно и то же поле?

Автор: LSD 26.5.2011, 14:41
Цитата(delphi_ @  26.5.2011,  13:44 Найти цитируемый пост)
имею ввиду создать связи один-ко-многим 

Связь один-ко-многим не создается таким образом. Тебе нужно в child таблицу добавить поле которое будет ссылаться на parent таблицу. PK->PK это только один-к-одному связь.

Автор: delphi_ 4.6.2011, 17:09
да,там я чегой-то напутал.вполне все ок работало,но сейчас получил еще более странную проблему для меня...


есть три маленькие таблицы таблицы.у человека может быть несколько родственников,у родственника-один тип родственных связей-отец,сын и так далее

скрин схемы для наглядности http://i043.radikal.ru/1106/28/62c4ff4cad3e.png


(я знаю , что русские буквы в бд-жесть.но мои преподы так не думают.да и нагляднее так)

главная
Код


CREATE TABLE public."Главная" (
  "ID_человека" INTEGER NOT NULL, 
  "Имя" TEXT, 
  "Фамилия" TEXT, 
  "Отчество" TEXT, 
  "Дата_рождения" DATE, 
  .................
  
  CONSTRAINT "Главная_pkey" PRIMARY KEY("ID_человека")


родственники

Код


CREATE TABLE public."Родственники" (
  "ID_записи_родственники" INTEGER NOT NULL, 
  "ID_человека" INTEGER, 
  "Фамилия" TEXT, 
  "Имя" TEXT, 
  "Отчество" TEXT, 
  "ID_тип_родственника" SMALLINT, 
  CONSTRAINT "Родственники_pkey" PRIMARY KEY("ID_записи_родственники"), 
  CONSTRAINT "Родственники_fk" FOREIGN KEY ("ID_человека")
    REFERENCES public."Главная"("ID_человека")
    ON DELETE CASCADE
    ON UPDATE CASCADE
    NOT DEFERRABLE, 
  CONSTRAINT "Родственники_fk1" FOREIGN KEY ("ID_тип_родственника")
    REFERENCES public."Служебная_родственники"("ID_тип_родственника")
    ON DELETE CASCADE
    ON UPDATE CASCADE
    NOT DEFERRABLE
) WITHOUT OIDS;



Служебная_родственники

Код


CREATE TABLE public."Служебная_родственники" (
  "ID_тип_родственника" SMALLINT NOT NULL, 
  "Тип_родственных_связей" TEXT, 
  CONSTRAINT "Служебная_родственники_pkey" PRIMARY KEY("ID_тип_родственника")
) WITHOUT OIDS;




проблема вот в чем- через ODBC я успешно вывожу и обновляю данные (!!!) в приложении, НО я не могу выполнить элементарный запрос к базе

Код

SELECT     "ID_человека", Имя  FROM Главная


ошибка -> ERROR: relation "public.главная" does not exist
LINE 1: SELECT "ID_человека", Имя FROM "public".Главная

зачем ему нужно relation ? что я неправильно сделал?

Автор: LSD 6.6.2011, 09:47
Раз уж ты при создании имена таблиц (колонок и т.д.) указываешь в кавычках, то и в запросах они должны идти в кавычках в том же регистре что и в оригинале.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)