|
|
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
Уважаемые знатоки! Прошу совета насчет ведения кассы фирм где в обороте две валюты. Фирма занимается торговлей, приход соответственно от продажи товара, расходы(за аренду помещения, комм. услуги, и тд). Правильно ли будет, если: создать две таблицы приход(код_филиала, дата, сумма, валюта...), расход(код_филиала, дата, сумма, валюта...). сумма(приход)-сумма(расход)=касса. или же создать отдельные таблицы приход/расход для каждой валюты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2006, 17:31 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
curiousxpУважаемые знатоки! Прошу совета насчет ведения кассы фирм где в обороте две валюты. Фирма занимается торговлей, приход соответственно от продажи товара, расходы(за аренду помещения, комм. услуги, и тд). Правильно ли будет, если: создать две таблицы приход(код_филиала, дата, сумма, валюта...), расход(код_филиала, дата, сумма, валюта...). сумма(приход)-сумма(расход)=касса. или же создать отдельные таблицы приход/расход для каждой валюты? Лучше одну, для документов (приходных и расходный) а там будет код операции (приход, расход) и код валюты, а валюты с их кодами и операции со своими в другие таблцы-справочники. Это позволит потом без проблем добавлять валюты и операции (например возврат от клиента) не создавая новых таблиц и ничего не переделывая просто ставя код новой операции или валюты в главную таблицу где это нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2006, 17:38 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
Думаю, что легче будет создать справочник валют и работать с их идентификаторами. Далее нуден полный набор полей таблиц с которыми вы собираетесь работать. Просто бывают случаи, что приходится еще и нормализовать их. Может также придется ввести новые стправочники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2006, 17:59 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
barrabas curiousxp...создать две таблицы приход(код_филиала, дата, сумма, валюта...), расход(код_филиала, дата, сумма, валюта...). или же создать отдельные таблицы приход/расход для каждой валюты? Лучше одну, для документов (приходных и расходный) а там будет код операции (приход, расход) и код валюты, а валюты с их кодами и операции со своими в другие таблцы-справочники. Это позволит потом без проблем добавлять валюты и операции (например возврат от клиента) не создавая новых таблиц и ничего не переделывая просто ставя код новой операции или валюты в главную таблицу где это нужно. По поводу того, что разбивать на таблицы по числу валют не нужно - полностью согласен. Нужна ссылка на код валюты + справочник валют... Еще можно добавить поле пересчета суммы к какой-либо "эталонной" валюте на дату документа (или же сделать таблицу курсов на все даты). А вот одна таблица и для прихода, и для расхода - очень не советую. Потому что обычно в приходах и расходах используются разные параметры операций, число полей и т.п. - и не всегда умно хранить их в одной таблице, коверкая ее структуру. А выборка из такой таблицы может оказаться еще неприятнее (в плане разных трактовок одного поля в зависимости от типа операции)... Хотя все зависит от Вашей конкретики... Но (ИМХО) масштабируемость и возможность развития такой системы будет плохая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2006, 18:24 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
Al_BЕще можно добавить поле пересчета суммы к какой-либо "эталонной" валюте Я бы постарался избежать понятия "эталонной" валюты. Практика недавнего прошлого показала, что ее довольно неприятно менять на ходу эксплуатации системы. Al_BА вот одна таблица и для прихода, и для расхода - очень не советую. Потому что...... Имхо эти подходы в целом эквивалентны, и решение действительно стоит выбирать исходя из конкретики. Варианты: 1. Одна "широкая" таблица с некоторым количеством "иногда незаполняемых" полей 2. Одна таблица "общих полей" и некоторое количество "расширяющих таблиц", содержащих специфику конкретных типов документов и привязанных к общей один к одному 3. Несколько разных таблиц и вьюха/вьюхи, объединяющие общие поля из них в единый список в принципе позволяют решить одни и те же задачи. Лично мне наиболее симпатичен второй вариант, но в зависимости от специфики (сколько общих полей, насколько похожи разные документы, что удобнее для используемых инструментов), думаю, можно построить примеры "best suited" ситуаций для каждого из вариантов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2006, 19:18 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
авторА вот одна таблица и для прихода, и для расхода - очень не советую..... А как насчет 2-х таблиц, имеется ввиду приход/расход? Хотя мне кажется вариант с одной таблицей тоже не плохой, если допустим: таблица касса(код_филиала, дата, сумма, валюта, признак_приход_расход, инфо1, инфо2) инфо1- общяя инф-я в зависимости от операций. Например, если приход(продажа...), если расход(аренда, покупка_матер....) инфо2- конкретная инф-я прихода/расхода (от продажи стир. машины.../на бензин, аванс для сотр ФИО.....) Все поля будут обязательно заполняться, ну разве что инфо2, и то редко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2006, 20:32 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
Al_BА вот одна таблица и для прихода, и для расхода - очень не советую. А если нужно будет еще операцию добавить что новую таблицу создавать (Акт инвентаризации например)? Одна таблица мне кажется лучше, а выбрать из нее очень просто (не понимаю в чем сложность) по коду операции, если нужны специфические поля для какой либо операции то пусть будут, просто не заполняешь их в других случаях. Про валют: я бы сделал таблицу с курсами на каждый день (или на дни изменения курса). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2006, 09:41 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
Если в дальнейшем предполагается бухгалтерская оценка операций, то нужны две суммы в каждой операции - в валюте операции и в валюте баланса. Таблицу операций лучше иметь единую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2006, 14:19 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
softwarer Al_BЕще можно добавить поле пересчета суммы к какой-либо "эталонной" валюте Я бы постарался избежать понятия "эталонной" валюты. Практика недавнего прошлого показала, что ее довольно неприятно менять на ходу эксплуатации системы. Ну вроде бы на территории РФ рубли пока что никто не отменял ;) (хотя и можно вспомнить шутку "не знаю, как у вас в Москве, а у нас в России..." :) ) В любом случае даже при "замене" евро обратно на доллар проще будет сделать одно обновление по одному курсу, чем пересчитывать это по очереди из рублей, тенге, гривен и т.п. softwarer Al_BА вот одна таблица и для прихода, и для расхода - очень не советую. Потому что...... Имхо эти подходы в целом эквивалентны, и решение действительно стоит выбирать исходя из конкретики. Варианты: 1. Одна "широкая" таблица с некоторым количеством "иногда незаполняемых" полей 2. Одна таблица "общих полей" и некоторое количество "расширяющих таблиц", содержащих специфику конкретных типов документов и привязанных к общей один к одному 3. Несколько разных таблиц и вьюха/вьюхи, объединяющие общие поля из них в единый список Согласен. А я и не настаивал. И тоже подчеркивал, что нужно смотреть конкретную ситуацию. В простейшем случае все будет эквивалентно. Сложности могут начаться при большом количестве операций, т.е. размере таблицы (хотя я и верю в силу индексов), при излишней "креативности" руководства, бухгалтерии и т.п.. Например, единые ограничения на поля ты не всегда сможешь наложить, если информация в таблице разнотипная (типа того, что получение денег может идти только через банк и всегда требовать ИНН плательщика, а операция выдачи денег допускается и обычным частным лицам, у которых даже фамилия не нужна). Ну и плюс определенный риск, если человеку надо будет вручную рыться в таблицах, а он вдруг пропустит в запросе критерий отбора по типу операции :) Но это все ИМХО. Пусть автор оценит все мнения - и на их основе выберет свой оптимальный вариант... (Это типа пожелания удачи) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2006, 15:24 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
Al_BСложности могут начаться при большом количестве операций, т.е. размере таблицы (хотя я и верю в силу индексов), при излишней "креативности" руководства, бухгалтерии и т.п.. Например, единые ограничения на поля ты не всегда сможешь наложить, если информация в таблице разнотипная (типа того, что получение денег может идти только через банк и всегда требовать ИНН плательщика, а операция выдачи денег допускается и обычным частным лицам, у которых даже фамилия не нужна). Ну и плюс определенный риск, если человеку надо будет вручную рыться в таблицах, а он вдруг пропустит в запросе критерий отбора по типу операции :) Но это все ИМХО. Пусть автор оценит все мнения - и на их основе выберет свой оптимальный вариант... (Это типа пожелания удачи) Про индексы ты зря, реально сокращают время обработки в разы. А про ИНН и фамилии, это дело для других таблиц. В "таблице операций" должно быть не много полей (10-20 с системными - кто ввсел инфу и дата ввода и редактирования), главное должно быть: код типа документа (приход, расход и т.д.), инкримент суммы, декримент суммы, остаток (инкримент для прихода, декримент для расхода, остаток для инвентаризации), код клиента (а там храни хоть фамилии и ИНН хоть адреса любовниц), код операции (приход от банка ХХХ, возврат от клиента по ОТК и т.д. а там храни счета по которым банк работает и т.д.), проведен ли документ или нет, дата документа, ну еще несколько креативных аналитических признаков, можно еще сделать таблицу со строками документа где будет детализация, например по акту возврата вернули 3 одеяла на суммы 2222 и 1 покрывало на 1212. Причем также нужно использовать коды товаров и иметь таблицу номенклатуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2006, 15:36 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
barrabas Про индексы ты зря, реально сокращают время обработки в разы. Я ведь и написал, что верю в силу индексов :) Более того, сам ими активно пользуюсь. Особенно, если коды операций прихода/расхода не пересекать по значениям... barrabas В "таблице операций" должно быть не много полей (10-20 с системными - кто ввсел инфу и дата ввода и редактирования), главное должно быть: код типа документа (приход, расход и т.д.), инкримент суммы, декримент суммы, остаток (инкримент для прихода, декримент для расхода, остаток для инвентаризации), код клиента (а там храни хоть фамилии и ИНН хоть адреса любовниц), код операции (приход от банка ХХХ, возврат от клиента по ОТК и т.д. а там храни счета по которым банк работает и т.д.), проведен ли документ или нет, дата документа, ну еще несколько креативных аналитических признаков, можно еще сделать таблицу со строками документа где будет детализация, например по акту возврата вернули 3 одеяла на суммы 2222 и 1 покрывало на 1212. Причем также нужно использовать коды товаров и иметь таблицу номенклатуры. Итого по описанию имеем уже две или даже три суммы (читай - поля), из которых заполняется одна :) Потом окажется, что "креативные аналитические признаки" различаются для прихода и расхода... Причем даже и по типу данных... Дальше придем к тому, что при возврате обязательно должна быть указана причина и т.п.. А максимального удовольствия достигнем в тот день, когда выяснится (НАПРИМЕР), что для операций прихода какое-нибудь поле "user" должно ссылаться на таблицу сотрудников, а для операций расхода оно же должно ссылаться на таблицу клиентов. А эти таблицы по каким-либо причинам объединить ну никак невозможно... И более того, когда нам придется получить все эти данные в одном запросе, да еще и по какой-либо хитрой связке... Предлагаю все-таки оставить выбор за автором топика. Я не буду спорить о данном конкретном случае с таблицей кассы, но мое личное мнение, что в целом (раз уж мы сидим в ветке "Проектирование БД") не стоит объединять в одну таблицу принципиально разные процессы, даже если они и имеют определенный набор похожих общих параметров... Пусть это ИМХО, но я слишком много сталкивался с неприятностями после таких объединений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2006, 19:02 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
"... И более того, когда нам придется получить все эти данные в одном запросе, да еще и по какой-либо хитрой связке... " Вдогонку хочу добавить - и если еще потребуется построить схему данных на базе... С проверкой соответствий, каскадными удалениями и т.п.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2006, 19:07 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
Al_BА максимального удовольствия достигнем в тот день, когда выяснится (НАПРИМЕР), что для операций прихода какое-нибудь поле "user" должно ссылаться на таблицу сотрудников, а для операций расхода оно же должно ссылаться на таблицу клиентов. А эти таблицы по каким-либо причинам объединить ну никак невозможно... И более того, когда нам придется получить все эти данные в одном запросе, да еще и по какой-либо хитрой связке... поле user это поле user а поле "клиент" это поле "клиент", одно поле должно брать данные только из одной таблицы для любыл операций. Мы и так объединили эти документы по одному признаку - "Финансовые документы", основное приемущество что можно без проблем добавить дополнительную операцию не создавая новую таблицу таблицу и не переделывая все запросы (ели нужно просто изменить условие). Al_B Предлагаю все-таки оставить выбор за автором топика. уж что верно, то верно. Al_B Пусть это ИМХО, но я слишком много сталкивался с неприятностями после таких объединений. Желеть тебя не буду, криво наверное сделали, у меня все без проблем работает и никаких неприятностей. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2006, 10:02 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
Полностю поддерживаю идею одной таблици и справок, так у нас, так в банках, так везде, лучше и не придумаєш ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2006, 10:08 |
|
||
|
состояние кассы фирмы
|
|||
|---|---|---|---|
|
#18+
Al_BНу вроде бы на территории РФ рубли пока что никто не отменял ;) Не отменял. В них просто никто не считает :)) Al_BВ любом случае даже при "замене" евро обратно на доллар проще будет сделать одно обновление по одному курсу, Э-э, это далеко не одно обновление по одному курсу. В известном мне случае это полтора месяца напряженной работы. Только первый приходящий в голову пример - старые документы с их "эквивалент ... по курсу ...". Al_Bчем пересчитывать это по очереди из рублей, тенге, гривен и т.п. Хм. Думаю, насчет количества пересчетов в каждом случае поспорить можно, но не нужно :) Ограничусь следующим: моя позиция состоит в том, что "сразу сделать хорошо и потом спокойно спать по ночам" куда приятнее, нежели "сделать быстро, а потом срочно переделывать как надо". Эталонная валюта с моей точки зрения этому подходу не соответствует. Впрочем, в любом случае тут решать автору топика. Al_BСложности могут начаться при ...... Безусловно. В то же время есть достаточно инструментов, чтобы противостоять этим сложностям - то же партиционирование. Вообще говоря, если у нас есть набор таблиц и (может быть, если нужна) объединяющая их вьюха, мы можем заменить их общей таблицей (с именем вьюхи) и модифицируемыми вьюхами (с именами таблиц) так, что наш программный код этого практически не заметит. Сложности точно так же могут возникнуть и с разнесенными документами, например, нужно будет помнить все места, куда нужно внести дополнения при появлении очередного типа документов (очередной таблицы). Например, часть кода мы будем вынуждены тупо отдублировать, либо писать динамический sql с подстановкой имен таблиц. Ну а триггера - так точно дублировать. А если у них еще и основные поля по-разному называются... Кстати, тоже болезнь - если есть пятьдесят однотипных таблиц, в одной-двух поле PRICE будет написано с грамматической ошибкой, и неопытный руководитель может поддаться на "ну пусть так останется, не переписывать же то, что уже есть". Ну или например "документом-основанием для документа X могут быть документы следующих 8 типов" - с разными таблицами это бизнес-правило реализуется не очень комфортно. Именно поэтому я предпочитаю подход под номером два: свести подобные части документов в одну общую таблицу, а специфику разнести по расширяющим. Это несколько усложняет "простой" DML (редактирование документов), но позволяет наиболее естественно и удобно прописать бизнес-логику, в том числе обойтись без кучи проверок на тип документа, необходимых при "черезчур универсальной" таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2006, 12:02 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33500540&tid=1545437]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 452ms |

| 0 / 0 |
