Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
проектирование бд
|
|||
|---|---|---|---|
|
#18+
такая задачка: для бд учётной программы нужно наладить приход/расход товара. Расход делается на свои торговые точки (внутреннее перемещение) и на клиентов. Ну и приход соответственно и возврат и всякое там такое. Данные о своих точках и фирмах-клиентах разные. А и на тех и на других проводится отпуск товара. Т.е. было бы не плохо если бы это были разные таблицы - но с одним первичным ключём - для упрощения обеспечения целостности данных. Варианты реализации: 1. вынести первичный ключ и название фирмы/точки в отдельную таблицу - а от неё сделать потомков с данными о точках и о фирмах. 2. вынести первичный ключ и название фирмы/точки в отдельную таблицу - и сделать 2 связанные таблицы и нажить себе много гемороя :). Вопреки моим ожиданиям вариант с наследованием что-то не работает - или как говорится лыжи не едут :) вот примерчик как это могло бы быть: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. подскажите пожалуйста как сделать это лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2006, 21:21 |
|
||
|
проектирование бд
|
|||
|---|---|---|---|
|
#18+
автор Варианты реализации: 1. вынести первичный ключ и название фирмы/точки в отдельную таблицу - а от неё сделать потомков с данными о точках и о фирмах. 2. вынести первичный ключ и название фирмы/точки в отдельную таблицу - и сделать 2 связанные таблицы и нажить себе много гемороя :). С этого бы и начинали :-) И не стоит треды плодить. Гимморой люди наживают, когда думают что теория - не для них. В реальной жизни это игнорирование элементарной физкультуры и гигиены, а, в нашем случае, игнорирование нормальных форм. Забудьте про наследование - это нестандартная фича постгреса, и применима она в редких случаях (в число которых, ваш - не входит. имхо). Сядьте, составте список сущностей и их атрибутов, которые вам нужны, и попробуйте из этого создать нормализированную (до 3 формы хотя б) структуру. При этом вспоминать о наследовинии, массивах и даже хранимых процедурах - вредно! Задумываться об "сложных материях" ( если понадобиться, конечно, что не факт) нужно только после того, как получите полностью нормализированную схему! Ваша задача имеет несколько решений, одно из которых я вам даже нарисовал. Но попробуйте сами разобраться - вам же самим будет приятно :-) А схемку я выложу завтра. Хотя, думаю, если поискать в разделе "Проектирование БД", то можно найти много чего интересного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2006, 23:36 |
|
||
|
проектирование бд
|
|||
|---|---|---|---|
|
#18+
ну собственно почему я к наследованию склоняюсь в данном случае: там в потомках столбцы будут у каждого свои - и на многие из них должно быть not null - причём именно для конкретной специализации. Т.е. кроме того, что у нескольких таблиц первичный ключ общий должен быть - там ещё констрайнты у каждого свои. Общие токо ключ и названия. Таким образом эти данные в одной таблице хранить очень не удобно. Т.е. делить их придётся - так или иначе. И мне кажется что проще будет наследованием это сделать, чем связными таблицами. Токо тут ручками придётся делать уникальность названия во всех таблицах. Точнее как сказать то - в рамках всех 3-х таблиц чтоли. Хотя при варианте связаных таблиц так извращаться не нужно :). Зато при наследовании не нужно отдельно вставлять данные в две таблицы. Ну тоисть допустим юзер вставляет контрагента: нужно тогда вставить в таблицу с ключём первичным и названием (общую для всех) запись - и в таблицу с контрагентами. А при наследовании это дело автоматом делается. Токо получается что при наследовании целостность данных и уникальность названия нужно контролировать триггерами/рулами. Ну и вроде как вообще структура данных проще и прозрачнее получается. Как кто думает лучше сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 20:25 |
|
||
|
проектирование бд
|
|||
|---|---|---|---|
|
#18+
5.8.1. Caveats ... A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children. This is true on both the referencing and referenced sides of a foreign key constraint. Thus, in the terms of the above example: ... These deficiencies will probably be fixed in some future release, but in the meantime considerable care is needed in deciding whether inheritance is useful for your problem. если ничего не найдете в контрибах, следует признать, что в вашем случае пользоваться наследованием имеет смысл весьма ограниченно - как способом задания чеков, структур и т.п. т.к. реализация многотабличного пк или фк самопалом скорее всего более трудоемка, чем создание стандартной звезды. А наследование применять только в кач-ве шаблона (например создаете таблицу (таблицы) _в которую_никогда_не_вставляете_данных_, и от нее (их - наследование в пг множественное) наследуете как "ядро" звезды, так и подчиненные). Кое какие запросы к детям тогда можно будет строить и на основе "шаблонных таблиц". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:49 |
|
||
|
проектирование бд
|
|||
|---|---|---|---|
|
#18+
короче мнения разделились. ну т.к. никто не сказал, что с наследованием так делать полностью низзя - то я буду таки наследованием это делать - а его сырость буду дополнять триггерами и рулами. всем спасибо! а! - ещё там схемку вроде как Jelis выложить обещал! интересно было бы посмотреть - если не затруднит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 19:08 |
|
||
|
проектирование бд
|
|||
|---|---|---|---|
|
#18+
aovкороче мнения разделились. ну т.к. никто не сказал, что с наследованием так делать полностью низзя - то я буду таки наследованием это делать - а его сырость буду дополнять триггерами и рулами. всем спасибо! а! - ещё там схемку вроде как Jelis выложить обещал! интересно было бы посмотреть - если не затруднит. :-) Извините. Это я в воскресение думал "в понедельник приду на работу и тогда...". Только у нас тут из-за саммита 5 выходных, город как во время чумы вымер, кто сматался подальше, кто поближе. Чета я ночю писал и не усек этого совсем, а в понедельник и сам подальше "в леса" уехал. Касательно проблеммы.... Как я понимаю вы паритесь из-за того, что у вас есть "Накладные" которые могут принадлежать как "Фирмам", так и "Точкам". (Кстати, а эти "накладные" одинаковые, или тоже разные?) 1. Можно просто в "накладной" сделать два поля "фирма" и "точка" и триггером смотреть что бы оба одновременно не были заполненны (решение, но не очень, до 3 нормальной формы не дотягивает) 2. Можно помимо 3 уже имеющихся таблиц, сделать еще две таблицы связки "Накладные_фирм" и "Накладные_точек" (на мой взгляд получше, но вообщемто тоже не помешало бы присматривать что бы в двух таблицах не появилась одна накладная. ИМХО вполне рабочий вариант) 3. А можно вообще выделить новую сущность "Юридическое_лицо" и с ним связывать "Накладные". А уже дальше "Юридическое_лицо" разруливать на "Фирмы" и "Точки" 4. Это что в голову приходит.... думаю еще пару рабочих вариантов придумать можно :-) То, что количество таблиц увеличиваеться, это совсем не "проблемма" - их можно прекрасно ( по 2-3-4 и т.д.) засунуть в представления и из приложения работать с представлениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 20:24 |
|
||
|
проектирование бд
|
|||
|---|---|---|---|
|
#18+
Я когда в постгресе увидел наследование - чуть не описался от щастья. Сразу забабахал схему, где от прототипа любого справочника с единственным полем ID наследовался справочник "субъекты", от "субъектов" - физики и юрики. Справочник "контактная информация", наследованный от прототипа, и имеющий foreign key на "субъектов", и справочник "комментарии", имеющий foreign key на прототипа... Думал - састье пришло, одним куском кода вешаю любые свойства на любую сущность... пока create tablle contacts не попробовал сделать... потом посмотрел на план выполнения запроса select * from прототип, и понял, что счастья не будет. Надо всегда дочитывать открытую страницу документации до конца - иначе разочарования в жизни становятся слишком частыми... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 21:54 |
|
||
|
проектирование бд
|
|||
|---|---|---|---|
|
#18+
Мда... Признаться, моя радость от знакомства с posgres'ом поутихла... :( Какие еще грабли поджидают наивного читателя маловразумительной документации? Я уже несколько дней прихожу в восторг от красоты PG, и хотелось бы знать - действительно это все работает? У кого-то есть реальный опыт написания систем на PG? Стоит ли переходить на него с MSSQL? Переходить заставляет жадность заказчиков, которым дорого покупать MS легально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 17:23 |
|
||
|
проектирование бд
|
|||
|---|---|---|---|
|
#18+
Вадим ПрудивусМда... Признаться, моя радость от знакомства с posgres'ом поутихла... :( Какие еще грабли поджидают наивного читателя маловразумительной документации? Я уже несколько дней прихожу в восторг от красоты PG, и хотелось бы знать - действительно это все работает? У кого-то есть реальный опыт написания систем на PG? Стоит ли переходить на него с MSSQL? Переходить заставляет жадность заказчиков, которым дорого покупать MS легально. 1. Граблей - много. Очень. Читать доки нужно внимательно и с должным почтением. На счет маловразумительности - смотря с чем сравнивать, если с BOL, то PG отдыхает, если с Ораклом - то я бы уже поспорил :). 2. Я прихожу в восторг около 2-х лет, особенно на контрасте с Ораклом :) радость периодически омрачается непониманием природы некоторых вещей, что лечится внимательным чтением доки :) 3. Опыт есть. Полет нормальный. 4. Стоит-ли переходить? - Дело личное, близкое к религии :) Как по мне, так в PG нет кучи ограничений которые есть в MS (имеется в виду 2k, c 2005 не работал) и работать с ним удобно и комфортно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2006, 18:35 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34156318&tid=2005829]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
87ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 457ms |

| 0 / 0 |
