powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / учет движения
25 сообщений из 26, страница 1 из 2
учет движения
    #34338061
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть таблица учета движения, а также сотрудники и отделы
дело в том что товар может быть взят как конкретно сотрудником так и и просто числиться за отделом.
решение в лоб - кинуть связь от сотрудников в учет и от отделов в учет, но это не красиво..

есть варианты?
спасибо
...
Рейтинг: 0 / 0
учет движения
    #34338073
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно также добавить одно поле которое будет содердать id или из одной или из другой таблицы и еще поле, которое будет показывать куда ушел товар... но как-то коряво
и целостность не поддрежишь :(
...
Рейтинг: 0 / 0
учет движения
    #34338094
Tyo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s uможно также добавить одно поле которое будет содердать id или из одной или из другой таблицы и еще поле, которое будет показывать куда ушел товар... но как-то коряво
и целостность не поддрежишь :(

Спортное предложение: а ввести для каждого отдела по одному фиктивному сотруднику-пустышке и если товар (или что там у вас) числится за отделом -- реально привязывать его к этому фиктивному сотруднику, ну а фиктивного сотрудника уже к отделу...
...
Рейтинг: 0 / 0
учет движения
    #34338862
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно...
ну а еще.... ???
не может быть чтобы эта задача в первый раз встречалась
...
Рейтинг: 0 / 0
учет движения
    #34338914
Tyo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется что все остальные очевидные варианты не гарантируют целостности
...
Рейтинг: 0 / 0
учет движения
    #34339496
MaryCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавить 2 новых ID_сотрудника и ID_отдела и соответсвующие FK, а так же check constraint несущий в себе идею: ((ID_сотрудника is null and not ID_отдела is null) or (not ID_сотрудника is null and ID_отдела is null)). Т.о. целостность будет обеспечена, но останется проблема с извлечением данных.
...
Рейтинг: 0 / 0
учет движения
    #34339502
MaryCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaryCatДобавить 2 новых ID_сотрудника и ID_отдела и соответсвующие FK, а так же check constraint несущий в себе идею: ((ID_сотрудника is null and not ID_отдела is null) or (not ID_сотрудника is null and ID_отдела is null)). Т.о. целостность будет обеспечена, но останется проблема с извлечением данных.

имеется ввиду 2 поля в таблице учета движения
...
Рейтинг: 0 / 0
учет движения
    #34345529
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaryCatДобавить 2 новых ID_сотрудника и ID_отдела и соответсвующие FK, а так же check constraint несущий в себе идею: ((ID_сотрудника is null and not ID_отдела is null) or (not ID_сотрудника is null and ID_отдела is null)). Т.о. целостность будет обеспечена, но останется проблема с извлечением данных.

Моя задача расширяется
Товар может не только числиться за сотрудником или отделом, а также может быть отправлен в другую фирму, страну и так далее...
добавил справочник targetType, где будут храниться описания объектов, за которымы будут числиться товары.
соответсвенно структура с отдельным ФК не подходит так как таблиц

что-то я в тупике
...
Рейтинг: 0 / 0
учет движения
    #34345556
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну сделал вот так
...
Рейтинг: 0 / 0
учет движения
    #34345775
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s u
Моя задача расширяется
Товар может не только числиться за сотрудником или отделом, а также может быть отправлен в другую фирму, страну и так далее...

Этого следовало ожидать. Обычно так и бывает - где два там и много :)
На мой взгляд лучшее решение (если формулировать в терминах ООП) сделать общий класс "места нахождения" и унаследовать от него все остальное:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
table Target(
TargetId        int,
TargetType    int,
TargetName   character -- Это необязательно, но удобно для отображения места нахождения в списочных формах
)

table Department(
DepartmentId  int references Target, -- если "наследовать" явно нельзя, 
-- то можно иметь отдельный идентификатор отдела и отдельную ссылку на таблицу Target
...
)

table Employee(
EmployeeId  int references Target, -- аналогично
...
)

...

table Good(
GoodId     int primary key,
TargetId   int refrernces Target
)
...
Рейтинг: 0 / 0
учет движения
    #34345991
Shoora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Свалить и сотрудников и отделы в одну таблицу. Рядом справочник структурных единиц - отдел, департамент, сотрудник.
...
Рейтинг: 0 / 0
учет движения
    #34346027
Shoora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дочитал топик до конца :)
2Bogdanov Andrey +1
...
Рейтинг: 0 / 0
учет движения
    #34346192
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оба варианта жизненны.
Вариант s u соответствует правилу когда сотрудники, отделы и т.д. первичны и лишь некоторые из них должны быть зарегистрированы как способные участвовать в товародвижении (target).
Вариант Bogdanov Andrey соответсвует правилу когда объект прежде всего должен быть зарегистрирован в обобщенном реестре (Target), а затем про него введена специфическая для типа информация в одной из таблиц исключительных подтипов. При этом его способность к участию в товародвижении либо просто еще один атрибут (Target.may_move_goods) либо неисключительный подтип (table movers ... references target...).
...
Рейтинг: 0 / 0
учет движения
    #34347037
Lamazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот как я примерно поступил при аналогичном случае (в бух программе)
завел таблицу в кторой данные хранятся так (скокращенный вариант).
дата
Сумма
Количество
DS1
DS2
DS3
Debet
KS1
Ks2
KS3
Kredit
IdDoс

дата - дата проводки, сумма- суммовое выражение проводки, количество -- количественное выражение проводки, DS1 (KS1) - вещественная аналитика (т.е. отвечающая на вопрос ЧТО)
DS2 (KS2) - аналитика местоположения (т.е. отвечающая на вопрос ГДЕ (УКОГО от кого)), DS3 (KS3)- аналитика основания (т.е. отвечающая на вопрос на основании ЧЕГО), IDdoc- иддокумента породившего эту запись
Вот пример складского движения (т.е. передаем ВИЛЫ (ОТВЕЧАЕТ ВОПРОС ЧТО) со СКЛАДА (ОТВЕЧАЕТ НА ВОПРОС ОТКУДА)на отдел (сотрудника) ОТВЕЧАЕТ НА ВОПРОС КУДА)



дата -01,01,2006
Сумма -100
Количество - 5
DS1 - ВИЛЫ
DS2 - сотрудник (отдел)
DS3 - 'ПУСТО' хотя можно например учтиывать из какого счета фактуры (для партионного учета) передаются ДАННЫе ВИЛЫ
Debet - 10.1
KS1 - ВИЛЫ
Ks2 - СКЛАД
KS3 - 'ПУСТО' хотя можно например учтиывать из какого счета фактуры (для партионного учета) передаются ДАННЫе ВИЛЫ
Kredit - 10.1
IdDoс - код документа ПЕРЕМЕЩЕНИЯ

канечна оговорюсь что хрнаняться наименования в справочниках а не в этой результирующей таблице
...
Рейтинг: 0 / 0
учет движения
    #34347245
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LamazoidА вот как я примерно поступил при аналогичном случае (в бух программе)
завел таблицу в кторой данные хранятся так (скокращенный вариант).

Из вашего примера совсем непонятно, как по значению того, что находится в поле DS2 понять что же это такое - сотрудник, склад, отдел или еще что-то. У вас должен быть либо единый классификатор всех объектов (то есть тот случай, который я приводил), либо вместе с полем DS2 в таблице проводок должно быть еще одно поле, описывающее тип ссылки, а у самого поля DS2 ссылка неспецифицирована.
...
Рейтинг: 0 / 0
учет движения
    #34347363
Lamazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey LamazoidА вот как я примерно поступил при аналогичном случае (в бух программе)
завел таблицу в кторой данные хранятся так (скокращенный вариант).

Из вашего примера совсем непонятно, как по значению того, что находится в поле DS2 понять что же это такое - сотрудник, склад, отдел или еще что-то. У вас должен быть либо единый классификатор всех объектов (то есть тот случай, который я приводил), либо вместе с полем DS2 в таблице проводок должно быть еще одно поле, описывающее тип ссылки, а у самого поля DS2 ссылка неспецифицирована.
Наверное придется описывать подробно... Код объекта (сотрудника , подразделения, материала... )уникален - в пределах всей системы -это раз далее написан запрос на объединение типа (упрощенно)
SELECT FIO as НАименование, кодсотрудника AS Код FROM сотрудники
UNION ALL
SELECT Otdelname,кодотдела AS Код FROM otdels
UNION ALL
SELECT НАименованиеКонтагента,кодКонтагента AS Код FROM контрагенты
- затем уже этот запрос цепляется к таблице движения по полю DS2 И KS2 и вот результат: все телодвижения видны. Аналогичный запрос по материалам (основные средства, коды затрат на производстве, материалы с услугами)
канечна для разных отчетов этот запрос с разным набором полей
...
Рейтинг: 0 / 0
учет движения
    #34347374
Lamazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к сож недостаток такого хранения - жесткая завязка что в каком поле хранится (DS1, KS1 - не может хранить подразделения и т.д.) но счас веду разработки - где пользователь вообще сам решает где и что хранить
...
Рейтинг: 0 / 0
учет движения
    #34347534
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LamazoidКод объекта (сотрудника , подразделения, материала... )уникален - в пределах всей системы -это раз далее написан запрос на объединение типа (упрощенно)

Ну как я и сказал у вас есть единый классификатор объектов. Просто он не материализован в виде таблицы СУБД. Видимо вы проверку уникальности идентификаторов делаете вне СУБД-шным образом. Или вообще не делаете, полагаясь на, например, Oracle-овый sequence. Это конечно хорошо, но обычный unique-констрейнт понадежнее будет.
...
Рейтинг: 0 / 0
учет движения
    #34348778
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чуток изменил...
Dept и Emp нужны будут для других целей, так что с общей таблицей не стал сливать
в сущности Any subject who can take production будут храниться все прочие объекты, которые могут забрать продукцию
для Dept и Emp targetId будет константой, для каждой таблицы своё постоянное значение
ваши замечания
...
Рейтинг: 0 / 0
учет движения
    #34348789
Lamazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey LamazoidКод объекта (сотрудника , подразделения, материала... )уникален - в пределах всей системы -это раз далее написан запрос на объединение типа (упрощенно)

Ну как я и сказал у вас есть единый классификатор объектов. Просто он не материализован в виде таблицы СУБД. Видимо вы проверку уникальности идентификаторов делаете вне СУБД-шным образом. Или вообще не делаете, полагаясь на, например, Oracle-овый sequence. Это конечно хорошо, но обычный unique-констрейнт понадежнее будет.
Так оно и есть как в оракле (тока у меня ms скюэл+ аксес): написал функцию увеличивающую содержимое таблицы "А" на единицу и возвращающую это значение. А насчет надежности или нет -это предмет споров не очем поэтому каждый выбрает что-либо свое.
...
Рейтинг: 0 / 0
учет движения
    #34348986
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lamazoid
Так оно и есть как в оракле (тока у меня ms скюэл+ аксес): написал функцию увеличивающую содержимое таблицы "А" на единицу и возвращающую это значение. А насчет надежности или нет -это предмет споров не очем поэтому каждый выбрает что-либо свое.

GUID не рассматривали вместо счётчика?
...
Рейтинг: 0 / 0
учет движения
    #34349126
Lamazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
GUID не рассматривали вместо счётчика?
Я еще тот акцесист а там текстовые иннер джоины по GUID почемуто работаю несколько медленнее
чем по числовому - фиг знает почему. вот я по превычке и сделал обычный счетчик - еще это помогло обойтись без еще одной проблемы при переходе с акса на скюл+акс
...
Рейтинг: 0 / 0
учет движения
    #34349494
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s uчуток изменил...Плохо читается из-за неудачных имен.
Any subject who can take production - > Any other subject who can take production
Relations -> Any subject who can take production
Часть targetId на самом деле targetTypeId, другие other_subject_id.
Через некоторое время самому будет сложно отгадывать собственные шарады.
...
Рейтинг: 0 / 0
учет движения
    #34349674
MaryCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s uчуток изменил...


Any other subject which/that can take production

А Вы можете объяснить логический смысл таблицы Types of subjects?
...
Рейтинг: 0 / 0
учет движения
    #34351547
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaryCat

А Вы можете объяснить логический смысл таблицы Types of subjects?

предполагается хранить типы субъектов/объектов
например
Department
Employee
External agent
Company

вообщем, кроме Department и Employee, неструктуированные типы субъектов/объектов и соответсвенно сами субъекты/объекты

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


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