powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация отношения один к одному
11 сообщений из 11, страница 1 из 1
Реализация отношения один к одному
    #32211517
misha_sk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста у меня тут возник спор по поводу организации отношения между таблицами 1:1.
В одной таблице (первичной) я организую поле, которое ссылается на одну запись в другой таблице с соответсвующими ограничениями целостности.
Но мне говорят, что надо просто в ссылаемой (во второй) таблице организовать дублирование значения ключа первичной таблицы.
Подскажите, как правильно.
Заранее спасибо.
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32211541
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Это зависит от назначения таблиц. Если вторая табля явлется справочником, то однозначно, вариант №1. Ведь справочник может подключатся к разным таблам и не должен зависеть ни от чего.

Но возможен случай "разделения" таблицы. Допустим,в таблице много полей, причем постоянно используются очень немногие. Пример - база основных средств. Там есть название, номер, разные стоимости и еще может быть куча деталей, типа заводского номера, которые нужны сто лет в обед. Для увеличения скорости выборки можно разделить таблу на две с отношением 1-1. ВОт тут-то вариант 2 предпочтительней. Вторая половинка должна быть однозначно привязана к первой. А это будет всегда, так как у первой "половинки" есть уникальный ключ, который является так же и ключом второй "половинки"
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32211827
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2misha_sk
Как нравится - так и правильно. Во втором варианте не нужно поле в первой таблице, т.к. первичный ключ второй может являться одновременно и ссылкой на первую. Вроде экономия места.
А почему не слить эти таблицы в одну? Что там за структура? Что за смысл у таблиц?
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32214968
misha_sk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Серега
Одна таблица содержит базовую информацию (данные по нити графика подвижной еденицы), а другая расширенную (если определено какой поезд представляет данную нить), т.е. второй иформации может и не быть. Хотя в программе, которая будет вываливать данные в базу, эти данные все равно есть хоть в них и забиты пустые значения. Т.к. часто будет изменяться большой объем данных, мне бы не хотелось хранить все в одной таблицы с более, чем с двумя дестятками столбцов половина из которых пустые.
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32215003
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Узнаю родной МПС. Инфа есть, но ее может не быть, патому как линия грохнулась еще вчера, да и вообще, на это станции компов нет.

Правильно Вам народ говорил - в вашем случает - вариант 2. Основная инфа в табле1, В табле2 дополнителная. с первичным ключем эквивалентным ключу таблы1. Связь между таблами по OUTER JOIN.
Но, насколько я знаю, там полей не шибко много. Можно в одну таблу сливать.

Если хотите, свяжитесь со мной по мылу из профиля. Может быть, по МПСовской сети свяжемся. Если, конечно, Вас это интересует.
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32215183
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2misha_sk
> Т.к. часто будет изменяться большой объем данных, мне бы не хотелось хранить все в одной таблицы с более, чем с двумя дестятками столбцов половина из которых пустые.
Это надо пробовать и сравнивать. Да место будет расходоваться менее рационально. Насколько? Зависит от конкретной БД. Пустые поля места (почти) не занимают. Зато с одной таблицей работать проще и производительнее (как правило). Нужно (например) поддерживать меньше индексов. Т.е. при вставке будет обновляться 1 индекс, а не 2 - при больших объемах здорово быстее. Да и на постоянном объединении 2 таблиц можно здорово проиграть в скорости.
А стоимость места на винчестерах постоянно падает... 8-) А скорость их работы растет.

Если БД - Оракл, то может стоить посмотреть в сторону вложеных таблиц.
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32215846
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серега

Зато с одной таблицей работать проще и производительнее (как правило). Нужно (например) поддерживать меньше индексов. Т.е. при вставке будет обновляться 1 индекс, а не 2 - при больших объемах здорово быстее. Да и на постоянном объединении 2 таблиц можно здорово проиграть в скорости.

С этим можно согласиться только с оговоркой: нам необходимы всегда все данные при запросе, другие запросы не используют данные из этой таблицы. Логичнее было бы разбить данные на несколько таблиц по некоторым определяющим признакам и запросами собирать их. Если нам нужна только часть данных, то перелопатить две таблицы будет легче, чем одну содержащую в три раза больше данных чем эти две. Но все это зависит от конкретной задачи.
По поводу места. Место даже может быть сэкономлено. За счет того, что у меньшего количества полей меньше длина строки и, соответственно, мы можем поиграться параметрами PCTFree и PCTUsed, в сторону увеличения заполнения блока. Да и про сцепление строк при частых удалениях, изменениях, вставке забывать не стоит - а это уже производительность.

Это я про оракл :)
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32216648
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Jinn
>Если нам нужна только часть данных, то перелопатить две таблицы будет легче, чем одну содержащую в три раза больше данных чем эти две.
С чего бы это при наличии индекса на поле поиска?

>Это я про оракл :)
Ну если про него говорить, то там еще такая фича есть как кластеризованные таблицы. И если есть например поле дата, то разбив по ней эту таблицу мы получим офигенный выигрышь в скорости, так как оракл будет читать данные только из соответствующей части таблицы.
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32216732
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серега
2Jinn
>Если нам нужна только часть данных, то перелопатить две таблицы будет легче, чем одну содержащую в три раза больше данных чем эти две.
С чего бы это при наличии индекса на поле поиска?

С того, что блоки с данными все равно придется считывать с диска, даже при наличии индекса. При этом считываются не только нужные в запросе, но и все остальные. Индекс всего лишь указатель на то, где эти данные взять.

>Это я про оракл :)
Ну если про него говорить, то там еще такая фича есть как кластеризованные таблицы. И если есть например поле дата, то разбив по ней эту таблицу мы получим офигенный выигрышь в скорости, так как оракл будет читать данные только из соответствующей части таблицы.

Немного не понял. Ты имеешь в виду кластеры или партицированные таблицы? Если последние - то разбивка по полю дата не самый лучший вариант, хотя дату для разбивки можно использовать для указания партиции применяя несложный алгоритм. В то же время данные могут потребоваться из разных партиций, так что выигрыш будет невелик.
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32217293
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Jinn
Member

Откуда: С-Петербург
Сообщений: 44
Серега
2Jinn
>С того, что блоки с данными все равно придется считывать с диска, даже при наличии индекса. При этом считываются не только нужные в запросе, но и все остальные. Индекс всего лишь указатель на то, где эти данные взять.
Дык зато объединять ничего не надо, а читать все равно придется много. Хотя бы не 1 индекс а минимум 2. И при обильной записи меньше индексов перестраивать. Но... Да пробовать надо, так на 100% не посоветуешь.


>Немного не понял. Ты имеешь в виду кластеры или партицированные таблицы? Если последние
Их родимых. Сори за неправильное выражение. Не работал с ними, только читал.

>В то же время данные могут потребоваться из разных партиций, так что выигрыш будет невелик.
Но не из всех же сразу. Наверное чаще всего запрашиваются недавние данные. А запросы типа "дай все что есть, а я тут посмотрю" чего хочешь уронят.
...
Рейтинг: 0 / 0
Реализация отношения один к одному
    #32217411
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серега

Да пробовать надо, так на 100% не посоветуешь.

Именно так. В некоторых случаях получается существенный выигрыш, хотя 100% гарантии дать нельзя. Плоские таблицы (все данные собраны в кучу) хороши для архвов, в тех случаях когда данные уже не меняются и мы имеем, фактически, выходную форму.

>Немного не понял. Ты имеешь в виду кластеры или партицированные таблицы? Если последние
Их родимых. Сори за неправильное выражение. Не работал с ними, только читал.

>В то же время данные могут потребоваться из разных партиций, так что выигрыш будет невелик.
Но не из всех же сразу. Наверное чаще всего запрашиваются недавние данные. А запросы типа "дай все что есть, а я тут посмотрю" чего хочешь уронят.

Выигрыш от партицирования таблиц, для запросов, незначителен или отсутствует при наличии индексов. Проявляется он в другом: оптимизация удаления данных (вместо delete используем truncate), возможность расположения одной таблицы в разных таблспейсах (на разных дисках). Очень выгодно применять для хранения больших объемов информации с конечным сроком хранения (бухгалтерия, биллинговые системы, сбор данных etc.)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация отношения один к одному
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]