powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД
15 сообщений из 15, страница 1 из 1
Проектирование БД
    #36365638
vikaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все добрый вечер! Нужна помощь!
Есть БД сотрудников:
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE [Employee] (
  [OrganicNumber] INTEGER PRIMARY KEY, //Табельный номер (уникальный)
  [FIO] CHAR( 100 ),  //ФИО
  [Post] CHAR( 50 ),  //Должность 
  [DateOfBirth] DATE); // Дата рождения

к этой таблице таблице нужно прикрутить таблицу мед. осмотра:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE [MedicalInspection] (
  [Ind] integer, // табельный номер
  [MedicalInspectionDate] DATE, //Дата мед. осмотра
  [Hospital] CHAR( 50 ),  // Мед. учреждение
  [Result] CHAR( 50 ), // Результат
  [Restriction] CHAR( 50 ),  // Ограничения
  [DateOfFollowingMedicalInspection] DATE, // дата сл. мед. осмотра
  [PhotoroentgenographyNumber] CHAR( 50 ),  //№ флюорографии
  [PhotoroentgenographyDate] DATE, // дата флюорографии
  [Note] MEMO( 255 ), // примечание
  CONSTRAINT [sqlite_autoindex_MedicalInspection_1] PRIMARY KEY ([Ind], [History]));

Ничего сложно казалось бы нет, если бы, не нужно было организовать историю прохождения мед. осмотра, для каждого сотрудника.
У меня была мысль, создать еще 1 таблицу типа:
Код: plaintext
1.
2.
3.
CREATE TABLE [History_MedicalInspection] (
  [Ind] integer PRIMARY KEY AUTOINCREMENT, //уникальный номер строки
  [Name] CHAR( 50 )); // наименование точки истории
Добавить поле History в таблицу Employee и в таблицу MedicalInspection. В MedicalInspection сохранять только 1 номер из History_MedicalInspection, а в таблице Employee перечислять через запятую, так как история может быть, допустим, из 20 записей и все нужно знать и учитывать.
Зачем так? Просто при добавлении новой точки в истории для сотрудника, я показываю пользователю, какие уже точки существуют, чтобы не пришлось заводить еще. Отсюда точность, что нет строк отличающиеся только 1 буквой (по запаре оператора), + очень просто предоставить список всех созданных точек в истории и еще +, что так как будет записана последовательность, значит так и были созданы точки в истории(не нужно проверять последовательность). Но этот метод мне самому не очень нравиться, так как в посл. придется строку с перечислениями, разбирать по запятым и только потом я смогу использовать данные.
Есть и другой способ, не создавая дополнительной таблицы организовать сохранение всех параметров в MedicalInspection, но как тогда получить список всех точек истории в единичном экземпляре я не знаю, ну и тогда нужно еще заводить поле, по которому нужно будет сортировать в порядке возрастания поля, чтобы точно определить последовательность.
В общем, немного запутался и на каком варианте остановиться не знаю. А возможно есть и другие, но пока они мне в голову не пришли.
Прошу помощи..... заранее спасибо
...
Рейтинг: 0 / 0
Проектирование БД
    #36365667
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хотите сохранять историю изменений медосмотра т.е.
поправили дату флюрографии - запись,
поправили результаты осмотра - запись,
поправили результаты осмотра еще раз - запись,
так?

Значения через запятую нарушают первую нормальную форму и я КРАЙНЕ не рекомендую этого делать.
...
Рейтинг: 0 / 0
Проектирование БД
    #36365683
vikaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257Вы хотите сохранять историю изменений медосмотра т.е.
поправили дату флюрографии - запись,
поправили результаты осмотра - запись,
поправили результаты осмотра еще раз - запись,
так?

Значения через запятую нарушают первую нормальную форму и я КРАЙНЕ не рекомендую этого делать.
Нет, история это значит что в таблице MedicalInspection может быть любое кол-во записей с одинаковым значением Ind.
тогда как в этой таблице:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE [MedicalInspection] (
  [Ind] integer, // табельный номер
  [History_Name] CHAR( 50 ), //Название точки истории
  [MedicalInspectionDate] DATE, //Дата мед. осмотра
  [Hospital] CHAR( 50 ),  // Мед. учреждение
  [Result] CHAR( 50 ), // Результат
  [Restriction] CHAR( 50 ),  // Ограничения
  [DateOfFollowingMedicalInspection] DATE, // дата сл. мед. осмотра
  [PhotoroentgenographyNumber] CHAR( 50 ),  //№ флюорографии
  [PhotoroentgenographyDate] DATE, // дата флюорографии
  [Note] MEMO( 255 ), // примечание
  CONSTRAINT [sqlite_autoindex_MedicalInspection_1] PRIMARY KEY ([Ind], [History]));
найти по 1 значению в строке History_Name?
...
Рейтинг: 0 / 0
Проектирование БД
    #36365689
vikaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. нужно получить список все название которые есть в данном поле, но только в списке должно быть 1 значение (не должны повторяться)
...
Рейтинг: 0 / 0
Проектирование БД
    #36365699
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То бишь, вы хотите данные о последнем медосмотре сделать частью таблицы Employee, плюс иметь список всех медосмотров с датой.
...
Рейтинг: 0 / 0
Проектирование БД
    #36365712
vikaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257То бишь, вы хотите данные о последнем медосмотре сделать частью таблицы Employee, плюс иметь список всех медосмотров с датой.
Практически так, но только не в Employee, а в MedicalInspection. Создавать десятки копий в employee не вижу смысла, строка [OrganicNumber] INTEGER PRIMARY KEY, так что не получиться.....
...
Рейтинг: 0 / 0
Проектирование БД
    #36365841
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikaz Создавать десятки копий в employee не вижу смыслаНе вижу десяток копий. Данные о ПОСЛЕДНЕМ (первом, самом важном, любая агрегатная функция) медосмотре хранятся либо в дополнительной таблице с отношением 1:1 к таблице Employee (гибче) либо как дополнительные столбцы в самой таблице Employee (проще), плюс MedicalInspection с датой и отношением 1:многим.
Кстати, а почему наименования полей для табельного номера различаются? Из мелких отличий растет большой бардак.
...
Рейтинг: 0 / 0
Проектирование БД
    #36365858
vikaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257vikaz Создавать десятки копий в employee не вижу смыслаНе вижу десяток копий. Данные о ПОСЛЕДНЕМ (первом, самом важном, любая агрегатная функция) медосмотре хранятся либо в дополнительной таблице с отношением 1:1 к таблице Employee (гибче) либо как дополнительные столбцы в самой таблице Employee (проще), плюс MedicalInspection с датой и отношением 1:многим.
Кстати, а почему наименования полей для табельного номера различаются? Из мелких отличий растет большой бардак.

или я чего-то не понимаю, или лыжи не едут! :(
для одного сотрудника может быть не 1 медосмотр, а 20 (а может и больше). Если мы добавим дополнительные поля к employee, то для каждого нового мед. осмотра для определенного сотрудника, придется практически повторять все значения, кроме последних, где будет другое значение имени мед. осмотра. Этого мне не нужно.

Поля отличаются по имени, т.к. если в коде:
Код: plaintext
1.
select * from employee db1, MedicalInspection db2 where db1.OrganicNumber=db2.Ind
имена полей будут одинаковые, движок SQLite ругается, что имеются одинаковые поля
...
Рейтинг: 0 / 0
Проектирование БД
    #36365969
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikaz придется практически повторять все значения, кроме последних, где будет другое значение имени мед. осмотра.А зачем повторять. а почему бы не обновить?
И я по прежнему не понимаю условий задачи, вынужден гадать, и предлагаю решения своего (а не вашего) понимания задачи.
...
Рейтинг: 0 / 0
Проектирование БД
    #36366021
vikaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257vikaz придется практически повторять все значения, кроме последних, где будет другое значение имени мед. осмотра.А зачем повторять. а почему бы не обновить?
И я по прежнему не понимаю условий задачи, вынужден гадать, и предлагаю решения своего (а не вашего) понимания задачи.
Потому что передо мной стоит такая задача. Нужно не только обновлять, нужно еще вести историю, всех мед. осмотров для каждого сотрудника. Жаль, что я так и не смог донести до Вас , то что хотел.... ЖАЛЬ!
...
Рейтинг: 0 / 0
Проектирование БД
    #36366093
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikaz Нужно не только обновлять, нужно еще вести историю, всех мед. осмотров для каждого сотрудника.Ну так ведите в таблице MedicalInspection
Я до сих пор не понимаю что вы называете наименование точки истории
Я предположил, что вы хотите видеть агрегированные результаты ОДНОГО медосмотра (последнего, первого, самого важного, первого после нового года ...) для каждого сотрудника, это можно сделать заведя дополнительную таблицу или расширив таблицу сотрудников.
...
Рейтинг: 0 / 0
Проектирование БД
    #36366133
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikaz wrote:

> Ничего сложно казалось бы нет, если бы, не нужно было организовать
> историю прохождения мед. осмотра, для каждого сотрудника.
> У меня была мысль, создать еще 1 таблицу типа:
>
> CREATE TABLE [History_MedicalInspection] (
> [Ind] integer PRIMARY KEY AUTOINCREMENT, //уникальный номер строки
> [Name] CHAR(*50*)); // наименование точки истории
>
> Добавить поле History в таблицу Employee и в таблицу MedicalInspection.
> В MedicalInspection сохранять только 1 номер из
> History_MedicalInspection,

Не надо никакой третьей таблицы, и добавлений. Ты вторую нормально оформи,
и всё будет уже хорошо. Где там поле History ?
Добавляй, и будет тебе хорошо.

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

А за такое просто на месте надо что-нибудь отрыват.
Почему -- уже сказали.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проектирование БД
    #36366190
vikaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
vikaz wrote:

> Ничего сложно казалось бы нет, если бы, не нужно было организовать
> историю прохождения мед. осмотра, для каждого сотрудника.
> У меня была мысль, создать еще 1 таблицу типа:
>
> CREATE TABLE [History_MedicalInspection] (
> [Ind] integer PRIMARY KEY AUTOINCREMENT, //уникальный номер строки
> [Name] CHAR(*50*)); // наименование точки истории
>
> Добавить поле History в таблицу Employee и в таблицу MedicalInspection.
> В MedicalInspection сохранять только 1 номер из
> History_MedicalInspection,

Не надо никакой третьей таблицы, и добавлений. Ты вторую нормально оформи,
и всё будет уже хорошо. Где там поле History ?
Добавляй, и будет тебе хорошо.

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

А за такое просто на месте надо что-нибудь отрыват.
Почему -- уже сказали.


Это была только мысль, отрывать ничего не нужно, пригодится. Почему так делать не нужно - понял! Буду реализовывать, будут вопросы, задам. Всем спасибо!
...
Рейтинг: 0 / 0
Проектирование БД
    #36366849
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikaz wrote:

> Это была только мысль, отрывать ничего не нужно, пригодится. Почему так
> делать не нужно - понял!

Прочитай что-то про первую нормальную форму таблиц. Вкратце -- такие
поля ты не сможешь обрабатывать запросами, сможешь только читать
и писать, всё остальное -- вне БД.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проектирование БД
    #36368543
vikaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
vikaz wrote:

> Это была только мысль, отрывать ничего не нужно, пригодится. Почему так
> делать не нужно - понял!

Прочитай что-то про первую нормальную форму таблиц. Вкратце -- такие
поля ты не сможешь обрабатывать запросами, сможешь только читать
и писать, всё остальное -- вне БД.

Спасибо, уже прочитали и все реализовал как надо. :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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