Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема распухания ключа в производных таблицах 
:(
    Опции темы
CyraxZ
Дата 20.3.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Некоторая таблица Т1 имеет простое ключевое поле П1 (т.н. "суррогатный" ключ в терминологии учебников по БД). Некоторая дочерняя таблица Т2 имеет составной ключ, одно из полей которого - поле П1 в роли вторичного ключа. В третью таблицу в состав ключа помимо составного ключа таблицы Т2 входит некоторый простой ключ ещё одной таблицы Т8. Далее 4-я таблица (производная от 3-й), к которой добавляем ещё одно поле в состав ключа. И т.д. В зависимости от предметной области составной ключ некоторой таблицы  может распухать до 5-6 полей, как в моём случае.
Например, ключ может сотоять из полей:
Код сотрудника (FK)
Код столбца некоторого документа
Код (номер) строки документа
Год
Код вида работ (FK)

Т.е. таблица хранит значения полей некоторой таблицы (документа), относящейся к некоторому сотрднику при выполнении некоторого вида работ в таком-то году. Т.е. вполне обычная ситуация.

Можно ввести простой уникальный ключ, а все эти 5 полей перегнать в число неключевых полей.
Есть какие-нибудь общепринятые рекомендации ?

PM MAIL   Вверх
Magnifico
Дата 21.3.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 1
Всего: 17



т.е
имеем Эксель книгу:
Эксель
(
АйДиКниги,
Название книги
)

ЛистыКниги
(
АйДиКниги,
АйДиЛиста,
НазваниеЛиста
)

ЯчейкиЛиста
(
АйДиЛиста,
АйДиЯчейки,
ЗначениеЯчейки
)

при select  t3. ЗначениеЯчейки   from Эксель t1
        inner join ЛистыКниги  t2   on t1.АйДиКниги = t2.АйДиКниги
         inner join ЯчейкиЛиста  t3   on t2.АйДиЛиста = t3.АйДиЛиста

мы однозначно идентифицируем ЗначениеЯчейки определеного листа определенной книги (т.е спускаемся по уровню иерархии)

зачем нам (по твоему примеру) добавлять в таблицу ЯчейкиЛиста  ->  АйДиКниги:
так:
ЯчейкиЛиста
(
 АйДиКниги,
АйДиЛиста,
АйДиЯчейки,
ЗначениеЯчейки
)

переизбыток ключевых полей

добавим таблицу Формулы:

Формула
(
АйДиЯчейки,
АйДиФормулы,
НазваниеФормулы
)
зачем нам сюда запихивать:
 АйДиКниги,
АйДиЛиста
Мы же не собираемся выбирать данные только из одной последней таблицы.

или у кого есть другое мнение  - будет интерсно ?


--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
CyraxZ
Дата 21.3.2008, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Ничего не понял...
PM MAIL   Вверх
Magnifico
Дата 21.3.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 1
Всего: 17



у тебя примерно такая структура

http://ipicture.ru/Gallery/Viewfull/994096.html

можно добавить доп. таблицу чтобы разгрузить таблицу Записи

http://ipicture.ru/Gallery/Viewfull/994100.html


--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
Akina
Дата 21.3.2008, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



И вот это "распухание ключей" делается исключительно для того, чтобы при выборках оставаться в рамках одной таблицы, а не использовать связывание? Как по мне, так это чистый бред. Пора отвыкать от грязных стилей программирования времен Clipper Summer...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
CyraxZ
Дата 23.3.2008, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Цитата

И вот это "распухание ключей" делается исключительно для того, чтобы при выборках оставаться в рамках одной таблицы, а не использовать связывание

Akina, не знаю, что такое Clipper Summer, но ты, как я понял, категорически против естественных ключей.
Здесь стоит выбор между распуханием естественных ключей и длинным связыванием при выборках (в моём случае придётся связывать 3 таблицы в случае с суррогатными ключами против 1 таблицы в случае с естественным ключом из 5 полей).

Оказывается, в нете этот вопрос уже обсасан от и до:
http://www.sqlbooks.ru/readarticle.aspx?pa...file=design01_1
http://www.sqlbooks.ru/readarticle.aspx?pa..._2&sm=id1_2
http://ru.wikipedia.org/wiki/Суррогатный_ключ
http://www.sdteam.com/?tid=709

Итог: однозначное решение в пользу суррогатных ключей...
PM MAIL   Вверх
Akina
Дата 23.3.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(CyraxZ @  23.3.2008,  09:37 Найти цитируемый пост)
ты, как я понял, категорически против естественных ключей

Я - за оптимальность. Иногда такие ключи оптимальны, иногда нет. Да и критерии оптимальности в разных случаях различны - то скорость нужна, то компактность...

Цитата(CyraxZ @  23.3.2008,  09:37 Найти цитируемый пост)
Здесь стоит выбор между распуханием естественных ключей и длинным связыванием при выборках (в моём случае придётся связывать 3 таблицы в случае с суррогатными ключами против 1 таблицы в случае с естественным ключом из 5 полей).

Вас пугает связывание трех таблиц? ну тогда я пас...

Цитата(CyraxZ @  23.3.2008,  09:37 Найти цитируемый пост)
Оказывается, в нете этот вопрос уже обсасан от и до:
[skipped]
Итог: однозначное решение в пользу суррогатных ключей... 

То есть решение Вы уже приняли, и оставалось только подогнать под него факты. ИМХО.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
CyraxZ
Дата 24.3.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Цитата

Вас пугает связывание трех таблиц? ну тогда я пас

Нисколько. Но оба варианта имеют свой вес.

Цитата

То есть решение Вы уже приняли, и оставалось только подогнать под него факты. ИМХО.

Решение я принял, когда почитал эти статьи. Для большинства баз данных оптимальным решением являются суррогатные ключи, что обосновывается в тех статьях. Моя база данных - не исключение (никакой экзотики)...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1119 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.