|
|
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
Надо сделать следующий констрейнт Есть таблица parent есть таблица child. Они связанны между собой отношением многие ко многими, т.к. один парент имеет несколько child, возможно вхождение одних и тех же child в разные parent. Надо установить констрейнт на то, чтобы в БД небыло двух разных parent с одинаковой номенкулатурой child. Ничего лучше чем добавить в парента текстовое поле и перечислить в нем PK детей в алфовитном порядке через запятую и наложить на это поле юник в голову не приходит что есть явное нарушение 1НФ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 21:22 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
мимопроходомНадо сделать следующий констрейнт Есть таблица parent есть таблица child. Они связанны между собой отношением многие ко многими, т.к. один парент имеет несколько child, возможно вхождение одних и тех же child в разные parent. Надо установить констрейнт на то, чтобы в БД небыло двух разных parent с одинаковой номенкулатурой child. Ничего лучше чем добавить в парента текстовое поле и перечислить в нем PK детей в алфовитном порядке через запятую и наложить на это поле юник в голову не приходит что есть явное нарушение 1НФ. Это только цветочки, там еще парент может не один а набор парентов (несколько входов и несколько выходов), ацикличность, альтернативы для входов и выходов, зависимость внутри списка входов, выходов и т.д. и не просто да-нет, а сложные правила, а если преставить такие зависимости межуровневые, то пора вешаться. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 21:48 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов Это только цветочки, Ягодки пусть потом будут. А это мне ща надо. Вот спрашиваю у мирового разума ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 21:52 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
мимопроходом Сахават Юсифов Это только цветочки, Ягодки пусть потом будут. А это мне ща надо. Вот спрашиваю у мирового разума ))) Мировой разум обсуждает чала. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 21:55 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
мимопроходомНадо сделать следующий констрейнт Есть таблица parent есть таблица child. Они связанны между собой отношением многие ко многими, т.к. один парент имеет несколько child, возможно вхождение одних и тех же child в разные parent. Надо установить констрейнт на то, чтобы в БД небыло двух разных parent с одинаковой номенкулатурой child. Ничего лучше чем добавить в парента текстовое поле и перечислить в нем PK детей в алфовитном порядке через запятую и наложить на это поле юник в голову не приходит что есть явное нарушение 1НФ. Надо как в школе учат сделать третью таблицу, которая связывает parent и child. А далее как Вы и предложили организовать вспомогательный "индекс" для целей ускорения. Это может быть цепочка id, но в общем случае это м.б. любая функция, которая дает уникальное значение для каждого уникального набора children. Список не очень хорошо из-за переменной длины, но зато его легко вычислять, так что если количество детей ограничено, то сойдет. Далее при обновлении связей надо делать: 1. проверять по индексу валидность операции, и если да, то 2. обновлять данные, а далее 3. обновлять этот индекс (в простейшем случае значение одного поля) Естественно, внутри транзакции. На НФ вообще не стоит обращать большого внимания, но если Вы все-таки хотите концептуальной чистоты, то проблем нет никаких. Вы имеете право создавать индексы для оптимизации доступа к данным, которые как следствие будут повторять содержимое в том или ином виде (необходимая избыточность). Пример, если хранить строки, то может понадобиться знать количество гласных ну или еще что-то. Это можно хранить в отдельной колонке, но очевидно, что это избыточность. То же самое здесь. Вы просто храните вспомогательный индекс. Конечно, в хорошей модели данных эта информация (используемая для доступа к целевым данным) не должна храниться вместе с оригинальными данными на том же уровне. Например, встроенные СУБД индексы хранятся отдельно. Но так уже РМ устроена, а РСУБД реализованы, что там все в одну кучу свалено, да и понятия доступа не существует. Да что приходится юзать что есть. Но главное здесь это понимать роль этой вспомогательной колонки: это не (оригинальные) данные - эти ваш индекс, а у него своя собственная логика, отличная от логики основных данных. Для связи же данных по-прежнему используется третья таблица. Такой подход используется очень часто, так что никакого криминала тут нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 22:29 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
Спасибо! Очень толково все написали. Подозревал я такое дело, но теплилась надежда, что я не знаю как, а РСУБД это все уже сами умеют делать. Вроде типовая задачка то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 23:38 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
> Надо сделать следующий констрейнт Тупая задача - тупое решение. Hint: не умеете формулировать задачи - наймите того, кто умеет это делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 23:49 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
мимопроходомНадо сделать следующий констрейнт СУБД поддерживают только ссылочную целостность, т.е. ссылки некогда не будут битыми. Вам нужна семантическая целостность, которая обеспечивается приложением, например триггерами. В вашем случае связующая таблица содержит ссылки (ФК) на parent и child. Все прочие проверки надо программировать самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 10:06 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
Вот можем же когда хотим. небольшие ньюансы СуперЧАЛ[] Вы имеете право создавать индексы для оптимизации доступа к данным, которые как следствие будут повторять содержимое в том или ином виде (необходимая избыточность). [] Конечно, в хорошей модели данных эта информация (используемая для доступа к целевым данным) не должна храниться вместе с оригинальными данными на том же уровне. Например, встроенные СУБД индексы хранятся отдельно. В реальных РСУБД для отделения хранения вычисляемых индексов от данных можно использовать материализованные представления. Не все модели, называемые моделями данных, озабочены способами хранения. РМД концентрируются собственно на данных. Можно выражать суть подобного рода ограничений в виде запросов непосредственно над данными. А материализованные представления в СУБД использовать для ускорения таких запросов. Это второй вариант решения задачки, но в данном случае я бы также начал с первого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 10:44 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
а это разве не противоречит одно другому? - возможно вхождение одних и тех же child в разные parent - чтобы небыло двух разных parent с одинаковой child ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 11:10 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
бухой быка это разве не противоречит одно другому? - возможно вхождение одних и тех же child в разные parent - чтобы небыло двух разных parent с одинаковой child - чтобы небыло двух разных parent с одинаковым НАБОРОМ child ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 11:31 |
|
||
|
Ограничения целостности
|
|||
|---|---|---|---|
|
#18+
мимопроходомНичего лучше чем добавить в парента текстовое поле и перечислить в нем PK детей в алфовитном порядке через запятую и наложить на это поле юник в голову не приходит И это вполне нормальное решение. мимопроходом что есть явное нарушение 1НФ. 1НФ, как и все прочие, стоит воспринимать с головой, а не как догму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 18:27 |
|
||
|
|

start [/forum/topic.php?fid=32&tid=1544299]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 449ms |

| 0 / 0 |
