powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / разработка БД для автопредприятия.
25 сообщений из 46, страница 1 из 2
разработка БД для автопредприятия.
    #38412267
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
необходимо создать базу данных. первая таблица содержит: Фамилию Имя Отчество и дату рождения. вторая таблица: автомобиль закрепленный за за сотрудником который содержится в первой таблице, вин машины, гос номер. третья таблица: ежемесячный пробег автомобиля.
С разработкой базы данных имел маленький опыт. мысли следующие:
первая таблица содержит следующую информацию: ФИО ДР и id, фио и ДР является первичным ключем. вторая таблица: ссылка на ID сотрудника из первой таблице, гос номер и вин машины (являются первичным ключем), и id машины для внешнего ключа третьей таблицы. третья таблица: ссылка на id машины, пробег на начало или конец месяца, месяц.
Прошу помощи знающих людей как это всё реализовать. сервер баз данных - posgresql.
Не понимаю как реализуются связи между таблицами, объясните пожалуйста.
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38412276
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38412280
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а на русском ничего нет на эту тему?
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38412640
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38415747
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
получилось у меня следующее:
CREATE TABLE fio (
famaly character varying NOT NULL,
name character varying NOT NULL,
fname character varying NOT NULL,
bdate date NOT NULL,
fio_id serial,
CONSTRAINT fio_pkey PRIMARY KEY (famaly, name, fname),
CONSTRAINT fio_fio_id_key UNIQUE (fio_id)

);

CREATE TABLE car (
gosnomer character varying NOT NULL,
vin character varying NOT NULL,
car_id serial,
fio_id integer NOT NULL
CONSTRAINT car_fio_id_fkey FOREIGN KEY (fio_id) REFERENCES fio(fio_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT car_pkey PRIMARY KEY (gosnomer, vin)
);

CREATE TABLE probeg (
car_id integer NOT NULL,
date date NOT NULL,
km integer NOT NULL
CONSTRAINT probeg_car_id_fkey FOREIGN KEY (car_id) REFERENCES car(car_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT car_pkey PRIMARY KEY (car_id, date, km)
);

кто что скажет?
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38415984
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen25получилось у меня следующее:
CREATE TABLE fio (
famaly character varying NOT NULL,
name character varying NOT NULL,
fname character varying NOT NULL,
bdate date NOT NULL,
fio_id serial,
CONSTRAINT fio_pkey PRIMARY KEY (famaly, name, fnamefio_id),
CONSTRAINT fio_fio_id_key UNIQUE (fio_id) --На случай двух иван иванычей ивановых, constraint unique лишняя
);


CREATE TABLE car (
gosnomer character varying NOT NULL,
vin character varying NOT NULL,
car_id serial,
fio_id integer NOT NULL
CONSTRAINT car_fio_id_fkey FOREIGN KEY (fio_id) REFERENCES fio(fio_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT car_pkey PRIMARY KEY (gosnomer, vin car_id) --нужен constraint - добавь отдельный
);

CREATE TABLE probeg (
car_id integer NOT NULL,
date date NOT NULL,
km integer NOT NULL
CONSTRAINT probeg_car_id_fkey FOREIGN KEY (car_id) REFERENCES car(car_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT car_pkey PRIMARY KEY (car_id, date, km) --уверен что двух одинаковых пробегов за одну дату не будет?
);


Общая логика: если поле где-то будет использоваться как внешний ключ, объяви его как первичный ключ (он же индекс). Быстрее будет. constraint'ы пишешь отдельно, но constraint по ФИО - чересчур. У нас среди 50 человек два полных тезки. Угадай их фамилию.
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38415987
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CONSTRAINT car_pkey PRIMARY KEY (car_id, date, km) --уверен что двух одинаковых пробегов за одну дату не будет?
То есть одно авто не пробежит 81 км один раз и 81 км другой раз?
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38416008
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня почему то внешний ключь без CONSTRAINT fio_fio_id_key UNIQUE (fio_id) этого создаваться не хотел. тут просто pkey создавался так что бы из тестовых файлов старую информацию перетащить. еще такой вопрос:
есть тестовый файл там вся эта информация в строку содержится. как мне её теперь в Бд перегнать? я так понял что мне надо сначала добавить ФИО, потом получить через селект fio_id и заполнять следующую таблицу? или как то можно проще информацию заносить в БД
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38416018
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структуру файла в студию.

Что с нормализацией данных?
Все данные в одном файле или данные по трем табличкам в трех файлах?

Пока что чистый бред.
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38416023
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen25у меня почему то внешний ключь без CONSTRAINT fio_fio_id_key UNIQUE (fio_id) этого создаваться не хотел.

Потому что, во второй раз повторяю, внешний ключ создается по первичному ключу. Но новички сильны в своих незнаниях.
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38416047
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hawkmoon,

сонный уже. в файле все в одну строчку. Иванова Иван Иванович А000АА/00 пробег 4000 км (например)
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38416050
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hawkmoon,

первичным ключем я исключаю дублирования записей. и потом не думаю что два Ивановых Иван Иванычей роделись в один день (по этому и делал первичный ключ по ФИО и ДР)
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38416272
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может можно как то и по другому дублирование записей исключить, еще вот можно проверять на совпадение записей в БД и записей. но первичный ключ мне понравился больше. наверное еще какие то решения можно придумать на эту тему
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38417007
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Никто без тебя не разобьет данные строки файла на поля. Разбивай как хочешь.
2. Для каждой строки:
2.1. Insert into fio(...,...) values(...,...) returning fio_id
2.2. используя предыдущий резалт, заполняем таблицу 2, тоже используя returning
2.3. используя 2 предыдущих резалта ...

p.s. первичный ключ - это КЛЮЧ. для доступа. ускоренного. А ограничение - это ограничение. constraint. не путать. и применять 1 там где надо 1
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38417291
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hawkmoon,

спасибо что с инсертом помогли разобраться.
P.S. А все же избежать дублирования записей в БД? что бы не было потом записи вида Иванова Иван Иваныча 1970.01.01 гр. с десятью экземплярами?
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38417414
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если мне сделать индекс UNIQUE для ФИО и ДР записей, мне он обеспечит уникальность записей?
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38418769
YuriyRusinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, нет и еще раз нет.
1. В таблице с сотрудниками первичным ключом, обеспечивающим уникальность записей должен быть id serial not null primary key, it's must тем более, что на него будут ссылаться данные из других таблиц.
2. unique index облегчает поиск по БД.
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38420845
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuriyRusinov,

то что id должен быть primary key это я уже понял. у меня теперь другой вопрос. как мне избежать дублирования записей в БД, что бы не было 10 ивановых иван иванычей? сейчас информация хранится грубо говоря в тестовом файле, эти все данные надо перетаскивать в БД. написал парсер который разбирает строчку из файла и ложит все в нужные колонки БД
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38420855
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen25а если мне сделать индекс UNIQUE для ФИО и ДР записей, мне он обеспечит уникальность записей?

Да, обеспечит, конечно.

Лично я бы предпочел сделать неуникальный индекс по ФИО (он все равно зачем-нибудь понадобится) и возложить проверку на приложение, но подход с уникальным индексом по ФИО/ДР тоже имеет право на существование.
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38427013
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hawkmoon,
возникла такая сложность. если я делаю уникальный ключ по фио и при вставке делаю возврат значения id, то когда в базе данный уже есть запись ФИО и ДР то БД говорит что уже есть такая запись, но возвращает мне id. тот который был бы если бы запись занеслась в базу. то есть возвращает не существующий id. такой вопрос. как сделать так что бы БД сначало провиряла есть ли такая запись, если есть то вернуть её id. если нет, то добавить запись и вернуть id этой записи. я так понимаю что надо смотреть в сторону триггеров и функций. но чет пока в голове не укладывается как это реализовать.
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38427249
kill_zdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen25Hawkmoon,
возникла такая сложность. если я делаю уникальный ключ по фио и при вставке делаю возврат значения id, то когда в базе данный уже есть запись ФИО и ДР то БД говорит что уже есть такая запись, но возвращает мне id. тот который был бы если бы запись занеслась в базу. то есть возвращает не существующий id. такой вопрос. как сделать так что бы БД сначало провиряла есть ли такая запись, если есть то вернуть её id. если нет, то добавить запись и вернуть id этой записи. я так понимаю что надо смотреть в сторону триггеров и функций. но чет пока в голове не укладывается как это реализовать.

прочел выше сообщения, жизненный опыт подсказывает , что уникальным становится в последствии только уникальный ID, счетчик какой-нибудь (в зависимости от БД) который ее движок контролирует. Все остальное - это нам так кажется, что быть не может. Я реально встречал в своей жизни двух Иван Ивановичев Ивановых, почему их БД не может встретить? Если есть хоть одна триллионная вероятность и Вы знаете об этом, исключите ее сразу!!! При чем делать для этого ни чего не нужно, уже все придумано давно. ФИО не надо делать уникальным полем , уникальное поле -ИДЕНТИФИКАТОР записи.
p.s. Я может параноиком покажусь, но я к каждой таблице создаю ее уникальное поле записи.... где нибудь, когда нибудь оно пригождается и реально является уникальным.... можете обвинить меня в расточительности ресурсов СУБД,


p.s. Таблица имеет поле ID, надеюсь оно имеет у Вас тип Serial, при его создании у Вас родиться в базе и соответствующая последовательность... Вы можете ее вычислять (какой она станет при следующем инсерте), автогенерить да в обще кучу чего делать снимая все вопросы ;)
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38427257
kill_zdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen25,

А Вы под какую-то среду разработки пишите интерфейс?
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38427496
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kill_zdm,

доступ к базе через web интерфейс, os - linux. заполнения базы идет из тестовых файлов через обработку скрипта написанного на perl
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38427501
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kill_zdm,

все отчеты на данный момент времени ведутся в экселе, я их перевозу в тестовые файлы и обрабатываю скриптом. по этому. все фамилии повторяются каждый месяц иногда не по разу. БД имеет следующую структуру: поля в базе такие Фамилия (varchar), Имя(varchar), Отчество(varchar), дата рождения(date), id(serial). id является первичным ключем, все остальные поля объедены в уникальный ключ (что бы избежать дублирование записей). так вот. проблема следующая. в базе содержится иванов иван иваныч, скрипт его заново с файла пытается в базу положить. база не дает, говоря при этом что такая запись уже имеется. НО возвращает при этом id который был бы если бы эта запись в базу занеслась!!! по этому, надо или перед вставкой делать селект для поиска уже имеющейся записи и возвращать id этой записи, а если записи такой нет, то её занести. на стороне клиента такую проверку делать бы не хотелось, хочется сделать проверку на стороне сервера. что бы не гонять лишний трафик по сети. я так думаю, что если будет проверка со стороны сервера, то я так же инсертом делаю вставку в БД. БД делает проверку есть ли такая запись. если есть то возвращает id этой записи, если такой записи нет то заносит значения в таблицу и возвращает id новой записи. может я конечно ошибаюсь насчет логики работы. вроде как подобную проверку можно реализовать триггером и триггерной функцией.
...
Рейтинг: 0 / 0
разработка БД для автопредприятия.
    #38631808
evgen25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день. столкнулся с такой проблемой. значения в базе данных в некоторых колонкак лежат как пустые, а в некоторых лежит значение NULL. соответсвенно приходится писать разные селекты SELECT * FROM ... WHERE a IS NULL; в другом случае SELECT * FROM ... WHERE b=''; как привести формат хранения к одному виду. хотелось бы, что бы в столбце лежали пустые значения, а не NULL. тип данных vchar.
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / разработка БД для автопредприятия.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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