|
|
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
Появилась нужда создать таблицу которая поле id (guid) которой, является внешним ключем к нескольким таблицам. Создать внешний ключ не получится по известным причинам. Хотел бы узнать мнение - это нормально? т.е. использование такой таблицы и грубо говоря программное связывание. На сколько это влияет на производительность и в каких случаях без этого не обойтись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2010, 11:04 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskini, Не обойтись без этого всегда :) все нормально но лучше эту таблицу вовсе не создавать, а union делать виртуально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2010, 14:56 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskiniПоявилась нужда создать таблицу которая поле id (guid) которой, является внешним ключем к нескольким таблицам. Создать внешний ключ не получится по известным причинам. Хотел бы узнать мнение - это нормально? т.е. использование такой таблицы и грубо говоря программное связывание. На сколько это влияет на производительность и в каких случаях без этого не обойтись Ничего не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2010, 18:43 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskiniСоздать внешний ключ не получится по известным причинам. Включив хрустальный шар, я так подумал и решил, что Вы имеете в виду популярную хрень "хочу, чтобы доктор мог ссылаться на поликлинику, а мог - на больницу". izoldov-roskiniХотел бы узнать мнение - это нормально? Не очень. А то и очень не. izoldov-roskiniНа сколько это влияет на производительность На производительность это непосредственно не влияет. Это влияет на целостность, а вот программная поддержка целостности в этом случае может катастрофически сказываться на производительности. izoldov-roskiniи в каких случаях без этого не обойтись Таких не бывает. Любую структуру, в которой возникает такое поползновение, можно перепроектировать в рамках традиционных подходов. В отдельных случаях можно решить, что такой подход - меньшее зло и/или вопрос слишком незначителен, чтобы ради него городить более аккуратное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2010, 19:44 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
попробую объяснить. Есть таблица например договора, есть таблица входящих писем, и для первого и для вторго типа документов надо хранить сканированные копии, соответственно есть идея использовать одну таблицу для вложений, а не для каждого типа свою. Но если использовать одну таблицу, то построить связи не получится. Как выкрутиться? Дробить типы на таблицы? (типа выделить общие реквизиты), слишком сложная структура получится, да и документов (типов) может быть не одни и не пять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 11:26 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskiniпопробую объяснить. Есть таблица например договора, есть таблица входящих писем, и для первого и для вторго типа документов надо хранить сканированные копии, соответственно есть идея использовать одну таблицу для вложений, а не для каждого типа свою. Но если использовать одну таблицу, то построить связи не получится. Как выкрутиться? Дробить типы на таблицы? (типа выделить общие реквизиты), слишком сложная структура получится, да и документов (типов) может быть не одни и не пять В договоре после со ссылкой на таблицу с вложением и в письмах ссылка. Или я не догоняю чего-то??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 11:31 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskiniсоответственно есть идея использовать одну таблицу для вложений, а не для каждого типа свою Допустим. Хотя в данном случае смысла не видно, хватит blob-поля в той и другой таблице. izoldov-roskiniНо если использовать одну таблицу, то построить связи не получится. Почему же не получится? Самая что ни на есть обычная таблица "сканы" со внешними ключами к той и другой таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 11:39 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
Ivan DurakВ договоре после со ссылкой на таблицу с вложением и в письмах ссылка. Или я не догоняю чего-то??? Лучше наоборот направление, имхо, особенно в договорах - поскольку там наверняка появятся сканы приложений, дополнительных соглашений итп, да и вообще их запросто может быть много страниц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 11:40 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
1. ну блоб поля не есть хорошо, уж в таком случае filestream 2. одно и тоже поле в этой таблице должно быть иметь две связи на две разные таблицы, т.е. поле object_id должно ссылаться и на T1 и на T2. Вот это меня волнует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 11:55 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskini1. ну блоб поля не есть хорошо, уж в таком случае filestream Для ненужных данных - да, filestream лучше. izoldov-roskini2. одно и тоже поле в этой таблице должно быть иметь две связи на две разные таблицы, Плюньте в лицо тому, кто Вам сказал такую глупость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 11:57 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
Что самому себе :) Это мне нужно при использовании общей таблицы чтобы поле указывало на двух возможных родителей (таблицы 2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 12:23 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskiniЧто самому себе :) Это мне нужно при использовании общей таблицы чтобы поле указывало на двух возможных родителей (таблицы 2) Это ошибка проектирования - вам это и говорит softwarer . А вы не понимаете, что нарушаете правила нормализации. Не может один FK указывать на множество таблиц, неоднозначность и соответственно нарушение целостности. А то что вы говорите: авторДробить типы на таблицы? (типа выделить общие реквизиты), слишком сложная структура получится, да и документов (типов) может быть не одни и не пять Это есть правильное решение. Выделяйте таблицу с общими параметрами для всех документов и на нее ссылку из таблицы с файлами. У меня была такая структура в проекте и ничего, все работает очень хорошо. softwarerДля ненужных данных - да, filestream лучше. Позволю не согласится, для разных СУБД и методы разные. В MS SQL запрос к blob полю замучаешься ждать, быстрее получить ссылку на файл и передать его как stream на клиента. Хотя в 2008 эту проблему чуть поправили, но все равно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 12:43 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
baike2000Позволю не согласится, для разных СУБД и методы разные. В MS SQL запрос к blob полю замучаешься ждать, быстрее получить ссылку на файл и передать его как stream на клиента. Хотя в 2008 эту проблему чуть поправили, но все равно... Скорость - это хорошо, но для "бумажных копий документов" она вряд ли сколько-нибудь важна, слишком редко к ним обращаются. А вот "забыли включить в бэкап", "случайно стёрли в файловой системе" и прочие прелести встают в полный рост, почему и - "для ненужных данных". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 12:49 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
softwarer Скорость - это хорошо, но для "бумажных копий документов" она вряд ли сколько-нибудь важна, слишком редко к ним обращаются. А вот "забыли включить в бэкап", "случайно стёрли в файловой системе" и прочие прелести встают в полный рост, почему и - "для ненужных данных". Если в этом смысле, то согласен. Хотя возможно найти компромисс между двумя методами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 14:15 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
> А вот "забыли включить в бэкап", "случайно стёрли в файловой системе" и прочие прелести > встают в полный рост, почему и - "для ненужных данных" "Случайно стереть" в файловой системе сильно сложнее, чем в базе данных. А "забыли включить в бэкап" - дебилов побороть невозможно в принципе, и это не повод грузить базу данных мусором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 19:04 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
После того, как разработчики научатся не грузить БД ни мусором, ни ссылками на мусор, их начнёт куда больше беспокоить сохранность и управляемость оставшихся (немусорных) данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2010, 19:16 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskini, делай как делаешь, это просто РСУБД не может делать то, что ты хочешь ты просто не можешь знать какие таблицы появятся в будущем у пользователя в этом классификаторе, дай возможность создать и включить в классификатор новые таблицы введи немножко метаданных и сгенерируй тригерры для целостности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2010, 00:27 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
ViPRos, т.е. программно поддерживать целостность. На самом деле я такое уже встречал в серьезной системе на БД Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2010, 00:46 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskiniПоявилась нужда создать таблицу которая поле id (guid) которой, является внешним ключем к нескольким таблицам. Создать внешний ключ не получится по известным причинам. Хотел бы узнать мнение - это нормально? т.е. использование такой таблицы и грубо говоря программное связывание. На сколько это влияет на производительность и в каких случаях без этого не обойтись Объект, связанный со многими другими объектами - это не нужда, а часто встречающаяся реальность:) Например, объект Бухгалтерская проводка связан с десятками объектов-операций М:1. Нужда у Вас использовать "реляционную" СУБД. Вот это, действительно, проблема, которая часто будет Вам мешать создавать адекватные приложения:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2010, 10:07 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskini, да, все нормально просто без этого серьезную систему и не напишешь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2010, 17:25 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
izoldov-roskini т.е. программно поддерживать целостность. На самом деле я такое уже встречал в серьезной системе на БД Oracle. Если целостность поддерживается на уровне приложения - это не серьезная, а модная система:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2010, 17:33 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
БредятинаЕсли целостность поддерживается на уровне приложения - это не серьезная, а модная система:)+1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2010, 03:28 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
egorych, один сказал чушь, а другой тут же закивал пофиг чем целостность поддерживается, лишь бы было хватит глубокомысленных кивков субд такое же приложение между прочим, а как допустим МССКЛ обеспечивает целостность убил бы нафиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2010, 17:17 |
|
||
|
Использование внешних ключей
|
|||
|---|---|---|---|
|
#18+
ViPRos, если надо чтобы "лишь бы было" - тогда действительно, пофиг где. А вот если нужна "целостность", тогда стоит делать по нормальному, обеспечивая оную в СУБД. >> а как допустим МССКЛ обеспечивает целостность убил бы нафиг может стоит поучиться его правильно готовить? >> хватит глубокомысленных кивков правда глаза колет? ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2010, 18:26 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=32&tid=1542453]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 433ms |

| 0 / 0 |
