|
|
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
необходимо создать базу данных. первая таблица содержит: Фамилию Имя Отчество и дату рождения. вторая таблица: автомобиль закрепленный за за сотрудником который содержится в первой таблице, вин машины, гос номер. третья таблица: ежемесячный пробег автомобиля. С разработкой базы данных имел маленький опыт. мысли следующие: первая таблица содержит следующую информацию: ФИО ДР и id, фио и ДР является первичным ключем. вторая таблица: ссылка на ID сотрудника из первой таблице, гос номер и вин машины (являются первичным ключем), и id машины для внешнего ключа третьей таблицы. третья таблица: ссылка на id машины, пробег на начало или конец месяца, месяц. Прошу помощи знающих людей как это всё реализовать. сервер баз данных - posgresql. Не понимаю как реализуются связи между таблицами, объясните пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 18:55:46 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 19:11:17 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
а на русском ничего нет на эту тему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2013, 19:14:59 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 10:26:05 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
получилось у меня следующее: 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) ); кто что скажет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 16:04:54 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
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 человек два полных тезки. Угадай их фамилию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 18:06:26 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
CONSTRAINT car_pkey PRIMARY KEY (car_id, date, km) --уверен что двух одинаковых пробегов за одну дату не будет? То есть одно авто не пробежит 81 км один раз и 81 км другой раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 18:08:45 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
у меня почему то внешний ключь без CONSTRAINT fio_fio_id_key UNIQUE (fio_id) этого создаваться не хотел. тут просто pkey создавался так что бы из тестовых файлов старую информацию перетащить. еще такой вопрос: есть тестовый файл там вся эта информация в строку содержится. как мне её теперь в Бд перегнать? я так понял что мне надо сначала добавить ФИО, потом получить через селект fio_id и заполнять следующую таблицу? или как то можно проще информацию заносить в БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 18:27:08 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
Структуру файла в студию. Что с нормализацией данных? Все данные в одном файле или данные по трем табличкам в трех файлах? Пока что чистый бред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 18:35:54 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
evgen25у меня почему то внешний ключь без CONSTRAINT fio_fio_id_key UNIQUE (fio_id) этого создаваться не хотел. Потому что, во второй раз повторяю, внешний ключ создается по первичному ключу. Но новички сильны в своих незнаниях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 18:37:46 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, сонный уже. в файле все в одну строчку. Иванова Иван Иванович А000АА/00 пробег 4000 км (например) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 19:15:24 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, первичным ключем я исключаю дублирования записей. и потом не думаю что два Ивановых Иван Иванычей роделись в один день (по этому и делал первичный ключ по ФИО и ДР) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 19:17:17 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
может можно как то и по другому дублирование записей исключить, еще вот можно проверять на совпадение записей в БД и записей. но первичный ключ мне понравился больше. наверное еще какие то решения можно придумать на эту тему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 06:30:10 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
1. Никто без тебя не разобьет данные строки файла на поля. Разбивай как хочешь. 2. Для каждой строки: 2.1. Insert into fio(...,...) values(...,...) returning fio_id 2.2. используя предыдущий резалт, заполняем таблицу 2, тоже используя returning 2.3. используя 2 предыдущих резалта ... p.s. первичный ключ - это КЛЮЧ. для доступа. ускоренного. А ограничение - это ограничение. constraint. не путать. и применять 1 там где надо 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 15:47:35 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, спасибо что с инсертом помогли разобраться. P.S. А все же избежать дублирования записей в БД? что бы не было потом записи вида Иванова Иван Иваныча 1970.01.01 гр. с десятью экземплярами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 17:53:32 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
а если мне сделать индекс UNIQUE для ФИО и ДР записей, мне он обеспечит уникальность записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2013, 20:34:35 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
Нет, нет и еще раз нет. 1. В таблице с сотрудниками первичным ключом, обеспечивающим уникальность записей должен быть id serial not null primary key, it's must тем более, что на него будут ссылаться данные из других таблиц. 2. unique index облегчает поиск по БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 12:52:40 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
YuriyRusinov, то что id должен быть primary key это я уже понял. у меня теперь другой вопрос. как мне избежать дублирования записей в БД, что бы не было 10 ивановых иван иванычей? сейчас информация хранится грубо говоря в тестовом файле, эти все данные надо перетаскивать в БД. написал парсер который разбирает строчку из файла и ложит все в нужные колонки БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2013, 20:09:20 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
evgen25а если мне сделать индекс UNIQUE для ФИО и ДР записей, мне он обеспечит уникальность записей? Да, обеспечит, конечно. Лично я бы предпочел сделать неуникальный индекс по ФИО (он все равно зачем-нибудь понадобится) и возложить проверку на приложение, но подход с уникальным индексом по ФИО/ДР тоже имеет право на существование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2013, 20:25:46 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, возникла такая сложность. если я делаю уникальный ключ по фио и при вставке делаю возврат значения id, то когда в базе данный уже есть запись ФИО и ДР то БД говорит что уже есть такая запись, но возвращает мне id. тот который был бы если бы запись занеслась в базу. то есть возвращает не существующий id. такой вопрос. как сделать так что бы БД сначало провиряла есть ли такая запись, если есть то вернуть её id. если нет, то добавить запись и вернуть id этой записи. я так понимаю что надо смотреть в сторону триггеров и функций. но чет пока в голове не укладывается как это реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2013, 17:37:24 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
evgen25Hawkmoon, возникла такая сложность. если я делаю уникальный ключ по фио и при вставке делаю возврат значения id, то когда в базе данный уже есть запись ФИО и ДР то БД говорит что уже есть такая запись, но возвращает мне id. тот который был бы если бы запись занеслась в базу. то есть возвращает не существующий id. такой вопрос. как сделать так что бы БД сначало провиряла есть ли такая запись, если есть то вернуть её id. если нет, то добавить запись и вернуть id этой записи. я так понимаю что надо смотреть в сторону триггеров и функций. но чет пока в голове не укладывается как это реализовать. прочел выше сообщения, жизненный опыт подсказывает , что уникальным становится в последствии только уникальный ID, счетчик какой-нибудь (в зависимости от БД) который ее движок контролирует. Все остальное - это нам так кажется, что быть не может. Я реально встречал в своей жизни двух Иван Ивановичев Ивановых, почему их БД не может встретить? Если есть хоть одна триллионная вероятность и Вы знаете об этом, исключите ее сразу!!! При чем делать для этого ни чего не нужно, уже все придумано давно. ФИО не надо делать уникальным полем , уникальное поле -ИДЕНТИФИКАТОР записи. p.s. Я может параноиком покажусь, но я к каждой таблице создаю ее уникальное поле записи.... где нибудь, когда нибудь оно пригождается и реально является уникальным.... можете обвинить меня в расточительности ресурсов СУБД, p.s. Таблица имеет поле ID, надеюсь оно имеет у Вас тип Serial, при его создании у Вас родиться в базе и соответствующая последовательность... Вы можете ее вычислять (какой она станет при следующем инсерте), автогенерить да в обще кучу чего делать снимая все вопросы ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2013, 20:58:23 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
evgen25, А Вы под какую-то среду разработки пишите интерфейс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2013, 21:04:19 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
kill_zdm, доступ к базе через web интерфейс, os - linux. заполнения базы идет из тестовых файлов через обработку скрипта написанного на perl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2013, 06:04:58 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
kill_zdm, все отчеты на данный момент времени ведутся в экселе, я их перевозу в тестовые файлы и обрабатываю скриптом. по этому. все фамилии повторяются каждый месяц иногда не по разу. БД имеет следующую структуру: поля в базе такие Фамилия (varchar), Имя(varchar), Отчество(varchar), дата рождения(date), id(serial). id является первичным ключем, все остальные поля объедены в уникальный ключ (что бы избежать дублирование записей). так вот. проблема следующая. в базе содержится иванов иван иваныч, скрипт его заново с файла пытается в базу положить. база не дает, говоря при этом что такая запись уже имеется. НО возвращает при этом id который был бы если бы эта запись в базу занеслась!!! по этому, надо или перед вставкой делать селект для поиска уже имеющейся записи и возвращать id этой записи, а если записи такой нет, то её занести. на стороне клиента такую проверку делать бы не хотелось, хочется сделать проверку на стороне сервера. что бы не гонять лишний трафик по сети. я так думаю, что если будет проверка со стороны сервера, то я так же инсертом делаю вставку в БД. БД делает проверку есть ли такая запись. если есть то возвращает id этой записи, если такой записи нет то заносит значения в таблицу и возвращает id новой записи. может я конечно ошибаюсь насчет логики работы. вроде как подобную проверку можно реализовать триггером и триггерной функцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2013, 06:17:56 |
|
||
|
разработка БД для автопредприятия.
|
|||
|---|---|---|---|
|
#18+
добрый день. столкнулся с такой проблемой. значения в базе данных в некоторых колонкак лежат как пустые, а в некоторых лежит значение NULL. соответсвенно приходится писать разные селекты SELECT * FROM ... WHERE a IS NULL; в другом случае SELECT * FROM ... WHERE b=''; как привести формат хранения к одному виду. хотелось бы, что бы в столбце лежали пустые значения, а не NULL. тип данных vchar. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2014, 12:41:10 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38417291&tid=1998673]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
190ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 554ms |

| 0 / 0 |
