|  | 
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ Помогите пожалуйста у меня тут возник спор по поводу организации отношения между таблицами 1:1. В одной таблице (первичной) я организую поле, которое ссылается на одну запись в другой таблице с соответсвующими ограничениями целостности. Но мне говорят, что надо просто в ссылаемой (во второй) таблице организовать дублирование значения ключа первичной таблицы. Подскажите, как правильно. Заранее спасибо. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 17.07.2003, 20:16 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ Это зависит от назначения таблиц. Если вторая табля явлется справочником, то однозначно, вариант №1. Ведь справочник может подключатся к разным таблам и не должен зависеть ни от чего. Но возможен случай "разделения" таблицы. Допустим,в таблице много полей, причем постоянно используются очень немногие. Пример - база основных средств. Там есть название, номер, разные стоимости и еще может быть куча деталей, типа заводского номера, которые нужны сто лет в обед. Для увеличения скорости выборки можно разделить таблу на две с отношением 1-1. ВОт тут-то вариант 2 предпочтительней. Вторая половинка должна быть однозначно привязана к первой. А это будет всегда, так как у первой "половинки" есть уникальный ключ, который является так же и ключом второй "половинки" ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 17.07.2003, 21:48 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ 2misha_sk Как нравится - так и правильно. Во втором варианте не нужно поле в первой таблице, т.к. первичный ключ второй может являться одновременно и ссылкой на первую. Вроде экономия места. А почему не слить эти таблицы в одну? Что там за структура? Что за смысл у таблиц? ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 18.07.2003, 11:20 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ 2Серега Одна таблица содержит базовую информацию (данные по нити графика подвижной еденицы), а другая расширенную (если определено какой поезд представляет данную нить), т.е. второй иформации может и не быть. Хотя в программе, которая будет вываливать данные в базу, эти данные все равно есть хоть в них и забиты пустые значения. Т.к. часто будет изменяться большой объем данных, мне бы не хотелось хранить все в одной таблицы с более, чем с двумя дестятками столбцов половина из которых пустые. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 22.07.2003, 20:00 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ Узнаю родной МПС. Инфа есть, но ее может не быть, патому как линия грохнулась еще вчера, да и вообще, на это станции компов нет. Правильно Вам народ говорил - в вашем случает - вариант 2. Основная инфа в табле1, В табле2 дополнителная. с первичным ключем эквивалентным ключу таблы1. Связь между таблами по OUTER JOIN. Но, насколько я знаю, там полей не шибко много. Можно в одну таблу сливать. Если хотите, свяжитесь со мной по мылу из профиля. Может быть, по МПСовской сети свяжемся. Если, конечно, Вас это интересует. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 22.07.2003, 21:21 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ 2misha_sk > Т.к. часто будет изменяться большой объем данных, мне бы не хотелось хранить все в одной таблицы с более, чем с двумя дестятками столбцов половина из которых пустые. Это надо пробовать и сравнивать. Да место будет расходоваться менее рационально. Насколько? Зависит от конкретной БД. Пустые поля места (почти) не занимают. Зато с одной таблицей работать проще и производительнее (как правило). Нужно (например) поддерживать меньше индексов. Т.е. при вставке будет обновляться 1 индекс, а не 2 - при больших объемах здорово быстее. Да и на постоянном объединении 2 таблиц можно здорово проиграть в скорости. А стоимость места на винчестерах постоянно падает... 8-) А скорость их работы растет. Если БД - Оракл, то может стоить посмотреть в сторону вложеных таблиц. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 23.07.2003, 10:18 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ Серега  Зато с одной таблицей работать проще и производительнее (как правило). Нужно (например) поддерживать меньше индексов. Т.е. при вставке будет обновляться 1 индекс, а не 2 - при больших объемах здорово быстее. Да и на постоянном объединении 2 таблиц можно здорово проиграть в скорости. С этим можно согласиться только с оговоркой: нам необходимы всегда все данные при запросе, другие запросы не используют данные из этой таблицы. Логичнее было бы разбить данные на несколько таблиц по некоторым определяющим признакам и запросами собирать их. Если нам нужна только часть данных, то перелопатить две таблицы будет легче, чем одну содержащую в три раза больше данных чем эти две. Но все это зависит от конкретной задачи. По поводу места. Место даже может быть сэкономлено. За счет того, что у меньшего количества полей меньше длина строки и, соответственно, мы можем поиграться параметрами PCTFree и PCTUsed, в сторону увеличения заполнения блока. Да и про сцепление строк при частых удалениях, изменениях, вставке забывать не стоит - а это уже производительность. Это я про оракл :) ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 23.07.2003, 15:24 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ 2Jinn >Если нам нужна только часть данных, то перелопатить две таблицы будет легче, чем одну содержащую в три раза больше данных чем эти две. С чего бы это при наличии индекса на поле поиска? >Это я про оракл :) Ну если про него говорить, то там еще такая фича есть как кластеризованные таблицы. И если есть например поле дата, то разбив по ней эту таблицу мы получим офигенный выигрышь в скорости, так как оракл будет читать данные только из соответствующей части таблицы. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.07.2003, 11:48 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ Серега  2Jinn >Если нам нужна только часть данных, то перелопатить две таблицы будет легче, чем одну содержащую в три раза больше данных чем эти две. С чего бы это при наличии индекса на поле поиска? С того, что блоки с данными все равно придется считывать с диска, даже при наличии индекса. При этом считываются не только нужные в запросе, но и все остальные. Индекс всего лишь указатель на то, где эти данные взять. >Это я про оракл :) Ну если про него говорить, то там еще такая фича есть как кластеризованные таблицы. И если есть например поле дата, то разбив по ней эту таблицу мы получим офигенный выигрышь в скорости, так как оракл будет читать данные только из соответствующей части таблицы. Немного не понял. Ты имеешь в виду кластеры или партицированные таблицы? Если последние - то разбивка по полю дата не самый лучший вариант, хотя дату для разбивки можно использовать для указания партиции применяя несложный алгоритм. В то же время данные могут потребоваться из разных партиций, так что выигрыш будет невелик. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.07.2003, 12:25 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ 2Jinn Member Откуда: С-Петербург Сообщений: 44 Серега 2Jinn >С того, что блоки с данными все равно придется считывать с диска, даже при наличии индекса. При этом считываются не только нужные в запросе, но и все остальные. Индекс всего лишь указатель на то, где эти данные взять. Дык зато объединять ничего не надо, а читать все равно придется много. Хотя бы не 1 индекс а минимум 2. И при обильной записи меньше индексов перестраивать. Но... Да пробовать надо, так на 100% не посоветуешь. >Немного не понял. Ты имеешь в виду кластеры или партицированные таблицы? Если последние Их родимых. Сори за неправильное выражение. Не работал с ними, только читал. >В то же время данные могут потребоваться из разных партиций, так что выигрыш будет невелик. Но не из всех же сразу. Наверное чаще всего запрашиваются недавние данные. А запросы типа "дай все что есть, а я тут посмотрю" чего хочешь уронят. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.07.2003, 17:07 |  | ||
| 
Реализация отношения один к одному | |||
|---|---|---|---|
| #18+ Серега  Да пробовать надо, так на 100% не посоветуешь. Именно так. В некоторых случаях получается существенный выигрыш, хотя 100% гарантии дать нельзя. Плоские таблицы (все данные собраны в кучу) хороши для архвов, в тех случаях когда данные уже не меняются и мы имеем, фактически, выходную форму. >Немного не понял. Ты имеешь в виду кластеры или партицированные таблицы? Если последние Их родимых. Сори за неправильное выражение. Не работал с ними, только читал. >В то же время данные могут потребоваться из разных партиций, так что выигрыш будет невелик. Но не из всех же сразу. Наверное чаще всего запрашиваются недавние данные. А запросы типа "дай все что есть, а я тут посмотрю" чего хочешь уронят. Выигрыш от партицирования таблиц, для запросов, незначителен или отсутствует при наличии индексов. Проявляется он в другом: оптимизация удаления данных (вместо delete используем truncate), возможность расположения одной таблицы в разных таблспейсах (на разных дисках). Очень выгодно применять для хранения больших объемов информации с конечным сроком хранения (бухгалтерия, биллинговые системы, сбор данных etc.) ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.07.2003, 18:25 |  | ||
|  | 

| start [/forum/topic.php?fid=32&fpage=179&tid=1546895]: | 0ms | 
| get settings: | 8ms | 
| get forum list: | 13ms | 
| check forum access: | 4ms | 
| check topic access: | 4ms | 
| track hit: | 35ms | 
| get topic data: | 10ms | 
| get forum data: | 2ms | 
| get page messages: | 46ms | 
| get tp. blocked users: | 2ms | 
| others: | 231ms | 
| total: | 355ms | 

| 0 / 0 | 
