|
|
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Добрый день, Есть таблица ДокументыДвиженияОборудования, которая ссылается на ТипыДокументов (порт -> вышка, вышка -> поставщик, судно -> судно, вышка -> вышка, и т.д). Соответсвенно, в зависимости от типа source & destination у документов разные, при чем это не только разные адреса (freetext), а ссылки на конкретные объекты, у которых уже потом могут быть разные адреса (поставщик) или не быть адреса вообще (судно), и прочие другие аттрибуты. Пока кроме как тупо делать в ДокументыДвиженияОборудования {..., VendorSourceId nullable, RigSourceId nullable, WellSourceId nullable, VessekSourceId nullable, VendorDestinationId nullable, RigDestinationId nullable, WellDestinationId nullable, VessekDestinationId nullable} ничего не придумывается. Хотя нет, придумалось это вынести в отдельную таблицу, но от того в каком месте бред - его менъше не становится. Кроме того, типов (соответсвенно соурсов и дестинейшинов) со временем может быть больше. Другая проблема - документ обязан иметь один и только один source / destination (как быть тут с not null и integrity)? Заранее спасибо за советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 10:34 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Если делать кучу разных полей, то с not null и integrity довольно просто, в старые времена это называлось arc constraint: check nvl2(source_1, 1, 0) + nvl2(source_2, 1, 0) + nvl2(source_3, 1, 0) + .... = 1. Кучи полей можно избежать, если сделать у источников-приёмников сквозную нумерацию (то есть непересекающиеся id). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 10:41 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
softwarerсделать у источников-приёмников сквозную нумерациюНо тогда это будет просто список возможных объектов, не ясно на что ссылающихся... Да и EF станет несколько сложнее (или при чем тут вообще EF? :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 11:03 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful Calfsoftwarerсделать у источников-приёмников сквозную нумерациюНо тогда это будет просто список возможных объектов, не ясно на что ссылающихся... На что ссылаются, будет видно из типа документа и контролироваться join-ом (вот для последнего и нужна сквозная нумерация, чтобы из-за ошибки не прилинковать не ту запись). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 11:08 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
softwarerконтролироваться join-ом Это как? Надеюся я не так понял... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 12:30 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfДобрый день, Есть таблица ДокументыДвиженияОборудования, которая ссылается на ТипыДокументов (порт -> вышка, вышка -> поставщик, судно -> судно, вышка -> вышка, и т.д). Соответсвенно, в зависимости от типа source & destination у документов разные, при чем это не только разные адреса (freetext), а ссылки на конкретные объекты, у которых уже потом могут быть разные адреса (поставщик) или не быть адреса вообще (судно), и прочие другие аттрибуты. Пока кроме как тупо делать в ДокументыДвиженияОборудования {..., VendorSourceId nullable, RigSourceId nullable, WellSourceId nullable, VessekSourceId nullable, VendorDestinationId nullable, RigDestinationId nullable, WellDestinationId nullable, VessekDestinationId nullable} ничего не придумывается. Хотя нет, придумалось это вынести в отдельную таблицу, но от того в каком месте бред - его менъше не становится. Кроме того, типов (соответсвенно соурсов и дестинейшинов) со временем может быть больше. Другая проблема - документ обязан иметь один и только один source / destination (как быть тут с not null и integrity)? Заранее спасибо за советы. Пока, не видно той проблемы, о которой Вы написали. Она скрыта за семантической проблемой. Что такое "вышка" или "судно". И что такое "поставщик"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 13:49 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Пункты (подразделения, склады - используйте принятый термин): 1) Свои и чужие. 2) Статические и динамические. Например, автопогрузчик - свое динамическое подразделение. Не видно никакой проблемы перемещения материи между пунктами) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 13:57 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Бредятина, Вы предлагаете, вышки, судна, порты, терминалы - запихать в одну таблицу пункты (аля контрагенты) и использовать ключ (тип пункта) ? Тогда уточню (сорри не упомянул сразу) - уже есть отдельные таблицы для каждого из типов пунктов (как для отдельных бизнесс объектов) и менять их крайне не рекомендовано... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 14:31 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfЭто как? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 14:38 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
softwarer, -- Ищем перемещения с корабля на склад А откуда мне знать, что не наоборот? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 14:42 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfБредятина, Вы предлагаете, вышки, судна, порты, терминалы - запихать в одну таблицу пункты (аля контрагенты) и использовать ключ (тип пункта) ? Тогда уточню (сорри не упомянул сразу) - уже есть отдельные таблицы для каждого из типов пунктов (как для отдельных бизнесс объектов) и менять их крайне не рекомендовано... Для меня это очевидно и без уточнения)) Более того, перемещением может заниматься, в частности, человек (умещается в кармане или не слишком тяжело). Очевидно же, что уже итак есть такой объект - Человек. Объект Пункт (назовем так) имеет: 1) группу вычисляемых характеристик (их значения определяются путем извлечения определенных характеристики по одной из возможных связей, например, Наименование может быть Петров Сергей Николаевич); 2) группу характеристик для "самодостаточного" экземпляра объекта (не имеющего ни одной связи) - при этом, значения вычисляемых характеристик, конечно, все равно вычисляются; 3) и каждый экземпляр может иметь связь с ОДНИМ экземпляром ОДНОГО из "базовых" объектов (а может и не иметь - для "самодостаточных"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 14:42 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfА откуда мне знать, что не наоборот? Ну так Вы сначала сформулируйте, что хотите найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 15:37 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
softwarer, Как? Вот если есть связь - все понятно. А так пришел кто-то, хочет найти сендера - и как ему знать что в зависимости от некоего поля надо искать тоже самое в разных таблицах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 18:44 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Бредятина, Да. И как хранить это все? Если Петров Сергей Николаевич (из сущности HumanResources) учавствовал в двух перемещениях, в качестве пунктов? Вписать его АйДи (Int=55) в пункт? Как потом узнать что это айди human resours'a, а не терминала за айди 55 из таблицы Bases? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 18:50 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfБредятина, Вы предлагаете, вышки, судна, порты, терминалы - запихать в одну таблицу пункты (аля контрагенты) и использовать ключ (тип пункта) ? Тогда уточню (сорри не упомянул сразу) - уже есть отдельные таблицы для каждого из типов пунктов (как для отдельных бизнесс объектов) и менять их крайне не рекомендовано... Бредятина дело говорит, вам нужно унифицировать объекты через обобщенную таблицу. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. Объекты тоже унифицировать по примеру выше. Общая таблица `пункты` и частные таблицы `судно`, `вышка` и т.д. Что касается HumanResources, то один человек может участвовать в нескольких перемещениях и в одном перемещении может участвовать несколько человек. Тут напрашивается связь многие-ко-многим с таблицей `документы_движения` ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 19:27 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfБредятина, Да. И как хранить это все? Если Петров Сергей Николаевич (из сущности HumanResources) учавствовал в двух перемещениях, в качестве пунктов? Вписать его АйДи (Int=55) в пункт? Как потом узнать что это айди human resours'a, а не терминала за айди 55 из таблицы Bases? Вы только не обижайтесь, пожалуйста. То ли Вы не читаете сообщения, то ли не знакомы с основами БД((( Документ: накладная на перемещение {Дата перемещения, ...} Пункт {Наименование, ..., Наименование пункта, ...} --- Документ: накладная на перемещение <-- Из/ Из которого (М:1) --- Пункт Документ: накладная на перемещение <-- В/ В который (М:1) --- Пункт Пункт --- Является/Является (1:1) --- Человек Пункт --- Является/Является (1:1) --- Судно Идентификаторы не могут никуда вписываться, так как принципиально не являются свойствами сущностей. Я теперь понимаю Ваши проблемы, ведь Вы не используете базы данных, а используете "реляционную технологию". Так нужно в самом первом сообщении сразу об этом говорить. Ведь раздел называется "Проектирование баз данных", а не "Проектирование реляционных баз данных")) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2014, 21:58 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
JeStone Код: sql 1. И для каждого нового типа - по новой таблице? о.О Бредятина, Запахло EAV или я не понял? Пункт --- Является/Является (1:1) --- Судно - этого точно не понял :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 00:54 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfJeStone Код: sql 1. И для каждого нового типа - по новой таблице? о.О Бредятина, Запахло EAV или я не понял? Пункт --- Является/Является (1:1) --- Судно - этого точно не понял :( Значит я угадал - не понимаете(( Обычная БД, обычные сущности, обычные связи. Причем, первые две Вы вроде бы поняли, а последние - вроде бы не поняли)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 10:29 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Бредятинаа последние - вроде бы не понялиНу и кто из нас не читает сообщения? ;) Я же так прямо и написал - этого точно не понял. Прошу мол, разжевать. Ну или хотябы подсказать как именно выполнать жевательные движения :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 12:12 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfИ для каждого нового типа - по новой таблице? о.О А что вас смущает? Это вполне распространенный прием. Вы же сами писали автору документов разные, при чем это не только разные адреса (freetext), а ссылки на конкретные объекты, у которых уже потом могут быть разные адреса (поставщик) или не быть адреса вообще (судно), и прочие другие аттрибуты. Или вы планируете хранить это все в сильно разреженной таблице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 12:14 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
JeStoneЭто вполне распространенный прием.Ну да, я много видел баз, где движение по складам организовано через 100 таблиц - склад1, склад2, ... . Есть в этом и повод поржать, о очевидные преимущества, но к такой структуре приду в последнюю очередь. JeStoneв сильно разреженной таблицеНет, думаю хранить EqMovements (DocId = {1, 2, ...}, MovementType = {BS2RG, BS2BS, ...}, SenderObjectId {Id = 1, 2, ...}, DestinationObjectId {Id = 1, 2, ... }), где SenderObjectId может быть Id из таблицы BASES или RIGS или др. Этот вариант тоже не нравится - нет ссылочной целостности. Другой - хранить EqMovements и отдельно EqMovementParticipants (EqMovementId, ParticipatnType {Sender, Receiver, Owner, Vendor, Approval, Prerequestor, Requestor, Holder...}, ParticipantId {Id = 1, 2, ...}), где ParticipantId может быть Id из вообще любой таблицы, причем даже той, которой уже давно не существует, что тоже не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 12:33 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfЯ же так прямо и написал - этого точно не понял. Прошу мол, разжевать. ЧАЛ гонит про свой любимый мумпс. Если коротко, то его идентификатор - это указатель, который соответственно может указывать на произвольную область памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 12:50 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful Calf, все 3 варианта нормальные для целосности при желании можно и триггеры сгенерировать ( а так нафиг не нужны, лучше в приложени за этим следить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 14:19 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
Cheerful CalfБредятинаа последние - вроде бы не понялиНу и кто из нас не читает сообщения? ;) Я же так прямо и написал - этого точно не понял. Прошу мол, разжевать. Ну или хотябы подсказать как именно выполнать жевательные движения :) Конечно, Вы))... Повторю, добавив в раздел сущностей еще две (думал, что это очевидно: Документ: накладная на перемещение {Дата перемещения, ...} Пункт {Наименование, ..., Наименование пункта, ...} Человек {Фамилия, Имя, Отчество, ...} Судно {Имя, ...} --- Документ: накладная на перемещение <-- Из/ Из которого (М:1) --- Пункт Документ: накладная на перемещение <-- В/ В который (М:1) --- Пункт Пункт --- Является/Является (1:1) --- Человек Пункт --- Является/Является (1:1) --- Судно В данном фрагменте схемы БД четыре сущности (типа сущности) и четыре связи. Уточните, что Вам конкретно непонятно?) Я не могу просто поверить, что какие-то связи между типами сущностей понятны, а какие-то - непонятны(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 14:21 |
|
||
|
Внешний ключ (и все-таки, как правильно) ?
|
|||
|---|---|---|---|
|
#18+
softwarerCheerful CalfЯ же так прямо и написал - этого точно не понял. Прошу мол, разжевать. ЧАЛ гонит про свой любимый мумпс. Если коротко, то его идентификатор - это указатель, который соответственно может указывать на произвольную область памяти. Просто уже смешно из-за столь глубокого не понимания основ БД. Какой еще "мумпс"?? "Его идентификатор"?? "Указатель на область памяти"?? Что за бред, когда речь идет абсолютно на логическом уровне. Есть сущности и связи между ними, и нет (и даже теоретически не может быть) никаких указателей. И никаких проблем, в отличие от "реляционной технологии", бесконечные проблемы которой здесь и обсуждают перманентно)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2014, 14:25 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=24&tid=1540709]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
110ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 443ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...