|
|
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
Все добрый вечер! Нужна помощь! Есть БД сотрудников: Код: plaintext 1. 2. 3. 4. 5. к этой таблице таблице нужно прикрутить таблицу мед. осмотра: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Ничего сложно казалось бы нет, если бы, не нужно было организовать историю прохождения мед. осмотра, для каждого сотрудника. У меня была мысль, создать еще 1 таблицу типа: Код: plaintext 1. 2. 3. Зачем так? Просто при добавлении новой точки в истории для сотрудника, я показываю пользователю, какие уже точки существуют, чтобы не пришлось заводить еще. Отсюда точность, что нет строк отличающиеся только 1 буквой (по запаре оператора), + очень просто предоставить список всех созданных точек в истории и еще +, что так как будет записана последовательность, значит так и были созданы точки в истории(не нужно проверять последовательность). Но этот метод мне самому не очень нравиться, так как в посл. придется строку с перечислениями, разбирать по запятым и только потом я смогу использовать данные. Есть и другой способ, не создавая дополнительной таблицы организовать сохранение всех параметров в MedicalInspection, но как тогда получить список всех точек истории в единичном экземпляре я не знаю, ну и тогда нужно еще заводить поле, по которому нужно будет сортировать в порядке возрастания поля, чтобы точно определить последовательность. В общем, немного запутался и на каком варианте остановиться не знаю. А возможно есть и другие, но пока они мне в голову не пришли. Прошу помощи..... заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 17:33 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
Вы хотите сохранять историю изменений медосмотра т.е. поправили дату флюрографии - запись, поправили результаты осмотра - запись, поправили результаты осмотра еще раз - запись, так? Значения через запятую нарушают первую нормальную форму и я КРАЙНЕ не рекомендую этого делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 17:46 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
SERG1257Вы хотите сохранять историю изменений медосмотра т.е. поправили дату флюрографии - запись, поправили результаты осмотра - запись, поправили результаты осмотра еще раз - запись, так? Значения через запятую нарушают первую нормальную форму и я КРАЙНЕ не рекомендую этого делать. Нет, история это значит что в таблице MedicalInspection может быть любое кол-во записей с одинаковым значением Ind. тогда как в этой таблице: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 17:52 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
т.е. нужно получить список все название которые есть в данном поле, но только в списке должно быть 1 значение (не должны повторяться) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 17:54 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
То бишь, вы хотите данные о последнем медосмотре сделать частью таблицы Employee, плюс иметь список всех медосмотров с датой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 18:00 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
SERG1257То бишь, вы хотите данные о последнем медосмотре сделать частью таблицы Employee, плюс иметь список всех медосмотров с датой. Практически так, но только не в Employee, а в MedicalInspection. Создавать десятки копий в employee не вижу смысла, строка [OrganicNumber] INTEGER PRIMARY KEY, так что не получиться..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 18:09 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
vikaz Создавать десятки копий в employee не вижу смыслаНе вижу десяток копий. Данные о ПОСЛЕДНЕМ (первом, самом важном, любая агрегатная функция) медосмотре хранятся либо в дополнительной таблице с отношением 1:1 к таблице Employee (гибче) либо как дополнительные столбцы в самой таблице Employee (проще), плюс MedicalInspection с датой и отношением 1:многим. Кстати, а почему наименования полей для табельного номера различаются? Из мелких отличий растет большой бардак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 19:47 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
SERG1257vikaz Создавать десятки копий в employee не вижу смыслаНе вижу десяток копий. Данные о ПОСЛЕДНЕМ (первом, самом важном, любая агрегатная функция) медосмотре хранятся либо в дополнительной таблице с отношением 1:1 к таблице Employee (гибче) либо как дополнительные столбцы в самой таблице Employee (проще), плюс MedicalInspection с датой и отношением 1:многим. Кстати, а почему наименования полей для табельного номера различаются? Из мелких отличий растет большой бардак. или я чего-то не понимаю, или лыжи не едут! :( для одного сотрудника может быть не 1 медосмотр, а 20 (а может и больше). Если мы добавим дополнительные поля к employee, то для каждого нового мед. осмотра для определенного сотрудника, придется практически повторять все значения, кроме последних, где будет другое значение имени мед. осмотра. Этого мне не нужно. Поля отличаются по имени, т.к. если в коде: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 20:03 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
vikaz придется практически повторять все значения, кроме последних, где будет другое значение имени мед. осмотра.А зачем повторять. а почему бы не обновить? И я по прежнему не понимаю условий задачи, вынужден гадать, и предлагаю решения своего (а не вашего) понимания задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 21:42 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
SERG1257vikaz придется практически повторять все значения, кроме последних, где будет другое значение имени мед. осмотра.А зачем повторять. а почему бы не обновить? И я по прежнему не понимаю условий задачи, вынужден гадать, и предлагаю решения своего (а не вашего) понимания задачи. Потому что передо мной стоит такая задача. Нужно не только обновлять, нужно еще вести историю, всех мед. осмотров для каждого сотрудника. Жаль, что я так и не смог донести до Вас , то что хотел.... ЖАЛЬ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 22:25 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
vikaz Нужно не только обновлять, нужно еще вести историю, всех мед. осмотров для каждого сотрудника.Ну так ведите в таблице MedicalInspection Я до сих пор не понимаю что вы называете наименование точки истории Я предположил, что вы хотите видеть агрегированные результаты ОДНОГО медосмотра (последнего, первого, самого важного, первого после нового года ...) для каждого сотрудника, это можно сделать заведя дополнительную таблицу или расширив таблицу сотрудников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 00:10 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 01:11 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
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 записей и все нужно > знать и учитывать. А за такое просто на месте надо что-нибудь отрыват. Почему -- уже сказали. Это была только мысль, отрывать ничего не нужно, пригодится. Почему так делать не нужно - понял! Буду реализовывать, будут вопросы, задам. Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 06:03 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
vikaz wrote: > Это была только мысль, отрывать ничего не нужно, пригодится. Почему так > делать не нужно - понял! Прочитай что-то про первую нормальную форму таблиц. Вкратце -- такие поля ты не сможешь обрабатывать запросами, сможешь только читать и писать, всё остальное -- вне БД. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 12:47 |
|
||
|
Проектирование БД
|
|||
|---|---|---|---|
|
#18+
MasterZiv vikaz wrote: > Это была только мысль, отрывать ничего не нужно, пригодится. Почему так > делать не нужно - понял! Прочитай что-то про первую нормальную форму таблиц. Вкратце -- такие поля ты не сможешь обрабатывать запросами, сможешь только читать и писать, всё остальное -- вне БД. Спасибо, уже прочитали и все реализовал как надо. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 06:46 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36366133&tid=1542937]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
163ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 461ms |

| 0 / 0 |
