powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Споры о первичном ключе
25 сообщений из 165, страница 4 из 7
Споры о первичном ключе
    #33027254
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankie
Хм. До тех пор, пока Вы сами и один пишете программу, сами и один эксплуатируете и сами и один пользуетесь результатами - нет абсолютно ничего предосудительного в абсолютно любом использовании такого мощного инструмента, как сервер БД. Когда одно из этих условий не выполняется - .. накоплена определенная статистика, что делать и чего не делать, дабы у коллег, пользователей и наследников не возникало желания тебя убить.

Как факт - я болтал с парнем, который пришел на мою пред-предыдущую работу уже после моего ухода, и узнал, что он среди прочего приписывает мне авторство нескольких хороших модулей, сделанных не мной. Я разубедил его, но "осадок остался" - приятно быть чем-то вроде живой легенды, которой априори приписывают все хорошие решения.

Если "я полагаю" для Вас достаточное обоснование - значит, давайте. Но обратите внимание: если не ошибаюсь, не нашлось ни одного человека, который поддержал бы Ваш подход (а соответственно - был бы рад работать с Вами или после Вас).
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027277
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieТам, где есть необходимости осуществлять частые изменения такой ключ безусловно неприемлим! Я говорю о возможности хранить в стобце некую последовательность, смысл который изначально не известен (сколько там атрибутов, что она значит и т. п.), и определяется исходя из правил. Пример с ключом в заглавном посте темы это лишь тривиальный случай.

ИМХО , ничего страшного в этом нет. Если работает - пусть работает. Просто иногда проблемы возникают со временем, при развитии системы. Т.е. то что работает сейчас, необязательно будет работать в будущем. Поэтому люди, исходя из опыта, думают (стараются по крайней мере) немного вперед и стараются обезопасить себя заранее. Т.е. для неразвивающейся системы (ничего ругательного, например телефонный справочник) допустимы всякие допущения.
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027280
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621

Может хоть раз постараетесь объяснить?
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027318
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 funikovyuri
Лучше не надо просить. Только "У-у-у" наслушаетесь. Да еще и узнаете что "вы просто неправы". Вот просто неправы и все тут.
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027327
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMА правила эти определяются где - на клиенте?
Правила определяются людьми. А хранятся в соответствующей таблице, как я говорил. Ядро системы будет применять эти правила и соответственно им изменять последовательность.

2ALL
Действительно очень жаль, что среди вас не нашлось ни одного, кто хотя бы допустил возможность использования моей идеи. :( С одной стороны следовало ожидать, что вы будете на чём свет стоит говорить о непогрешимости реляционной теории - многи из вас ведь на ней зарабатывают, знают её как свои 5 пальцев, верят. С другой, всё же грустно, что местами это доходит до "дело ленина бессмертно потому что оно верно". Понимаете, я вовсе не отвергаю нормализацию и суррогатный ключ, наоборот. Просто любая попытка хоть чуть-чуть, хоть где-то выйти за рамки постулатов вызывают чуть ли не ярость... Жаль.
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027373
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieПравила определяются людьми. А хранятся в соответствующей таблице, как я говорил. Ядро системы будет применять эти правила и соответственно им изменять последовательность.
...постоянная эволюция структур данных, правила, хранящиеся в таблице, отказ от реляционной модели... Что-то мне это напоминает...
А! Вот! Обратите свой взор в сторону ООБД, так как ваши идеи более близки к ним. Там тоже не ограничивают себя теорией, и теорий то у них формализованных нет, и разработка универсальных БД приветствуется.
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027406
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankie

Да выходите пожалуйста! О какой ярости вы говорите? Вы спросили о том кто прав - вам сказали что формально прав начальник...


PS> Что мне больше всего понравилось, так это то что некоторые уже заметили здесь ограниченность Р-модели...
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027410
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...постоянная эволюция структур данных, правила, хранящиеся в таблице, отказ от реляционной модели...

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

Имеем три таблицы - Dogovor (Договоры), Client (клиенты), Document (Документ клиента (паспорт) удостоверяющий личность). Каждый договор должен быть подписан клиентом, Каждый клиент может заключить много договоров. В каждом договоре, при распечатке должен быть указан паспорт или другой документ удостоверяющий личность клиента. Известно, что клиент может сменить фамилию. Но интересно получать всю историю о конкретном клиенте. Если поместить атрибуты ФИО в таблицу Client, то получится что на одного клиента приходится несколько записей, и историю работы с клиентом сформировать будет невозможно. Опять же, если поменять ФИО в таблице Client, то распечатать договор в том виде, в котором он был до получения клиентом новой фамилии также будет невозможно. Еще одна мысль - чтобы внести клиента в базу необходимо убедиться в его личности - т.е. необходим документ, удостоверяющий личность. Т.е. без паспорта - никуда... Но странное дело большинство систем построено по стандартной схеме, когда атрибуты ФИО b id клиента лежат в одной таблице. А как на счет того, чтобы отойти от этого стандарта?
Например сделать так:

Код: plaintext
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
-- Kлиенты
create table Client (
   client_id integer not null,
   document_id integer, --default document that can be null
   birthday date, -- дата рождения должна указываться только один раз
   drive_year int , -- год начала водительского стажа
   constraint CLIENT_PK primary key (client_id)
)

create table Document (
   document_id integer not null,
   client_id integer not null,
   doc_type int, -- тип документа
   doc_s char( 10 ), -- серия документа
   doc_n char( 10 ), -- номер документа
   dtbegin date, -- дата выдачи
   dtend date, -- дата окончания срока действия
   Fio char( 50 ), -- атрибут FIO определен конкретным документом
   constraint DOCUMENT_PK primary key (CLIENT_ID,DOCUMENT_ID),
   constraint CLIENT_FK foreign key (client_id) referencing Client(client_id)
      on delete restrict
)

-- Каждый документ может принадлежать только одному клиенту
create unique key IDocument on Document (client_id,document_id)

alter table Client add constraint foreign key (client_id,document_id) references DOCUMENT_FK (client_id,document_id)
-- Таким образом каждый клиент может иметь только один документ по 
-- умолчанию, либо не именть его. Т.е. мы получили две взаимоссылающиеся 
-- таблицы

create table Dogovor (
   dogovor_id int not null,
   document_id int not null,
   client_id int not null,
   ...
   Другие атрибуты договора
   ...
   constraint Dogovor_PK primary key (dogovor_id),
   constraint DOCUMENT_PK foreign key (client_id,document_id) references 
      document (client_id,document_id) on delete restrict
)

В приведенной схеме используется составной первичные и вторичные ключи, причем на мой взгляд - весьма эффективно. Эдакая этажерка. Договор ссылается на документ клиента, а документ ссылается на клиента, и получается косвенным образом договор ссылается на клиента. Т.е. построив правильно иерархию таблиц и правильно раздожив атрибуты уходим от кучи проблем.

Так что же получается? Помнится недавно был топик как однозначно идентифицировать личность. Предлагался вариант ФИО+ДР... А может ну его нафиг такой вариант? потому как в этой схеме он просто не нужен...

Да здравствуют составные первичные ключи!!!!
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027428
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХМОбратите свой взор в сторону ООБД, так как ваши идеи более близки к ним
WOW! :) ООБД, за ними будущее, вы не находите? Мне очень приятно, что вы рекомендуете меня туда ;)

funikovyuriО какой ярости вы говорите?
Ярость в инетллектуальном смысле, разумеется. Ярая защита теории, указание на недостаток знаний...

funikovyuriЧто мне больше всего понравилось, так это то что некоторые уже заметили здесь ограниченность Р-модели...
Вот-вот! И мне :)
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027481
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieС другой, всё же грустно, что местами это доходит до "дело ленина бессмертно потому что оно верно". Понимаете, я вовсе не отвергаю нормализацию и суррогатный ключ, наоборот. Просто любая попытка хоть чуть-чуть, хоть где-то выйти за рамки постулатов вызывают чуть ли не ярость... Жаль.Э нет. Не стоит, как говорится, с больной головы на здоровую (без обид).
Во-первых, нет ничего практичнее хорошей теории (это не мои слова).
Во-вторых, вам ясно дали понять именно практические недостатки вашего "подхода", а именно:
- более сложные в написании запросы
- снижение производительности.
То есть ваш подход неверен с обеих точек зрения, и теоретической , и практической . В этой связи как раз ваша позиция выглядит позицией веры , а не знания . "Я верю, что все сделал правильно, и точка".
Вы говорите, что у вас "все работает". Прекрасно. Рады за вас. Просто поймите, что простенькую систему можно сваять и на коленке, "силовым" методом. А вот для сложных систем нужно уже знать как правильно . Чтобы построить собачью будку особых знаний не надо, достаточно горячего желания и базовых умений. А вот на тех же основаниях мост через серьезную реку не построишь.
Вам здесь пытались сказать "как правильно". К сожалению, ваш подход с позиции веры, а не твердых знаний не позволил вам принять всеобщие рекомендации.
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027491
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri...постоянная эволюция структур данных, правила, хранящиеся в таблице, отказ от реляционной модели...

Уважаемый, какая эвалюция, каких структур? Это вы про вопрос о том сколько нужно полей один или два? Глубоко смотрите однако...
Это я несколько неудачно выразился про подход - ХЗ что будет храниться, поэтому загоним все данные в одно поле, а описание их структуры и правила их извлечения в другое поле, и поручим ядру их разгребать
Frankie
WOW! :) ООБД, за ними будущее, вы не находите? Мне очень приятно, что вы рекомендуете меня туда ;)

Не нахожу. И люди за три года на 80 страницах обсуждения в соседнем форуме тоже не нашли.
funikovyuri
Что мне больше всего понравилось, так это то что некоторые уже заметили здесь ограниченность Р-модели...
... не заметив при этом своей ....
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027520
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanТак что же получается? Помнится недавно был топик как однозначно идентифицировать личность. Предлагался вариант ФИО+ДР...
Непонятно, зачем обсуждать то, что давным-давно решено в официальных структурах. ФИО, дата и место рождения.

gardenmanДа здравствуют составные первичные ключи!!!!
Составные ключи - когда они правильно применены - эффективный механизм денормализации со всеми вытекающими преимуществами.

Ключевой вопрос - именно что "правильно применены". Мне пришлось иметь дело с базой, вполне себе OLTP, где ПК из четырех-восьми полей был нормой, а рекордом было, кажется, четырнадцать. Думаю, представляете себе удобство запросов к такой базе. Начинаешь думать, что NATURAL JOIN имеет право на существование...

Код: plaintext
1.
-- Каждый документ может принадлежать только одному клиенту
create unique key IDocument on Document (client_id,document_id)

Вот этого не понял. Чем это отличается от первичного ключа, сделанного парой строк выше?
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027608
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman

Код: plaintext
document_id int not null,  client_id int not null,

если этот document_id это id документа клиента, возможно, будет достаточно только его?
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027690
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerСоставные ключи - когда они правильно применены - эффективный механизм денормализации со всеми вытекающими преимуществами. Денормализации?!
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027817
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri gardenman

Код: plaintext
document_id int not null,  client_id int not null,

если этот document_id это id документа клиента, возможно, будет достаточно только его?

Ага, я это прекрасно понимаю. Но... т.к. есть внешний ключ от таблицы Dogovor к document, то такой индекс имеет право на существование в целях повышения поизводительности обработки внешнего ключа. И, далее если если к договору прилеплен определенный клиент, то в качестве док-та удостоверяющего личность может быть толь док-т, принадлежащий этому клиенту, либо никакого документа. Короче все до тривиальности просто.
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027836
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Вам знакомо определение системы?
В чьей интерпретации, позвольте осведомиться?
Ладно, не знакомо, так незнакомо, проехали.


> До относительности атомарности атрибута сами мыслю доведете? :)
Вы опять? ;) Т. е. я должен все написанное еще раз процитировать? ;) Не работает Ваше утверждение в общем случае. Примеры imho было достаточно, чтобы в этом убедиться. Какие еще аргументы нужны? ;))
Примеры были приведены для опровержения вашего "общего случая" независимости атомарности от рамок рассматриваемой системы.
Если вы с логикой дружите, должны знать, что примеры для доказательства не используются :)
Поэтому, чтобы не сойти за болтуна, потрудитесь таки обосновать свое общее утверждение более весомыми утверждениями, чем "это очевидно". Удачи :)
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027906
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman

Хм, интересно! Никогда такими вещами не занимался. А где вы про это узнали и где можно более подробно почитать про такой вариант денормализации. Потому как у меня есть сомнения по поводу удобства поддержания такой структуры, возможно я зря волнуюсь - но мне хочется ознакомиться с подходом по-лучше!
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027921
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman

Я все взвесил - получается здорово... :) Мой респект!
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027930
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri gardenman

Я все взвесил - получается здорово... :) Мой респект!

Глазам не верю! обычно все что я тут говорю в форуме - воспринимается в штыки...

Испытываю чувство глубокого удовлетворения...
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027969
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АЛЛ
Это писец!!!
,не... даже ПОЛНЫЙ ПИСЕЦ !!!
вы только писать умеете? а читать?

Если это просто прикол, то СЛИШКОМ правдоподобно звучат заблуждения, и в скором времени надо ожидать систем где не только все столбцы хранятся в одном столбце, но и все строки в одной.
А что парсить элементарно, нарущений уникальности нет.
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027988
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов softwarerСоставные ключи - когда они правильно применены - эффективный механизм денормализации со всеми вытекающими преимуществами. Денормализации?!
А чего, по-Вашему?

Простой пример: есть таблицы A >----- B. Рассматриваем варианты:

1. Суррогатный ключ в B. В A - присутствует поле, не имеющее физического смысла (внешний ключ).

2. Естественный ключ в B. В A - присутствует поле, имеющее физический смысл; в определенной ситуации это поле позволит обойтись без join-а в запросе.

3. В ключ добавляются новые поля (делается составной ключ). Соответственно, в A из B копируются дополнительные поля и их значения.

Как по-Вашему, это нормализация, денормализация или что-либо третье?
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33027999
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
денормализация - так как вводится еще одна ФЗ document_id==>client_id в DOGOVOR'е
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33028127
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда я что-то проектирую я менньше всего думаю о нормальных формах. Просто несколько принципов: Каждое значение атрибута должно появляться по возможности только 1 раз, в одной таблице и в одной строке. Количество объектов (индексы, таблицы и прочее) должно быть минимальным. Должна осуществляться жесткая поддержка ссылочной целостности.

Вот еще один пример: усть будет табица, содержащая 3 поля - Фамилия, Имя, Отчество. И, допустим требуется реализовать скролируемый просмотр этой таблицы в алфавитном порядке на экране пользователя, причем не загружая всю таблицу (которая может содержать миллионы строк). А испоьзовать для повышения производительности кэширование (строк эдак по 20-50).
Понятное дело, что запросы тапа
select * from people where family >= :f and name >=:n and otch >=:o
абсолютно бесполезны.
В оракле, например, можно создать индекс от функции f(family||name||otch),
эту проблему, или index-organized table по полю family||name||otch, которая будет меняться триггером и служить индексом для основной таблицы. А как быть в других базах? Вот и приходится извращаться - типа создавать вычисляемое поле (family||name||otch), и по нему уже строить индекс. Если смотреть со стороны теории, то тут нарушены все нормальные формы, но зато - работает офигительно быстро.
Вывод - теория хорошо, но опыт - лучше...
И нормализация - это не цель проектирования...
Цель проектирования - производительность и согласованность (непротиворечивость)
...
Рейтинг: 0 / 0
Споры о первичном ключе
    #33028193
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, мне с вас смешно. Ну нельзя же так... Как только появляется составной ключ, так сразу "денормализация". В приведённом примере никакой денормализации нет. Если каждый клиент ведёт собственную нумерацию, то никакой дополнительной фунциональной зависимости между договором и клиентом нет. То, что тут показано, называется иногда "миграцией ключей" - обычное дело, ничего удивительного. Создание индексов по функциям и вычисляемых полей - нормальная практика, ничего общего с нормализацией не имеющая.
...
Рейтинг: 0 / 0
25 сообщений из 165, страница 4 из 7
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Споры о первичном ключе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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