|
|
|
ссылки из одного поля в несколько таблиц
|
|||
|---|---|---|---|
|
#18+
в бд есть таблица со списком неких объектов, журнальные данные по которым хранятся в разных таблицах, откуда для построения отчета извлекаются значения столбца val (общего для всех журналов) по этим объектам за период времени таблица объектов имеет вид (id, title, table_name, obj_Id), где table_name - имя журнала, откуда будет извлекаться val; obj_Id - пк объекта в этом журнале (не совпадает с Id, на самом деле этот ключ составной, но для примера я упростил) проблема в том, что криво написанные клиенты/чьи-то руки могут в obj_Id могут помещать значения, нарушающие целостность данных, то есть id, которых нет в журнале table_name вижу вариант, как от этого избавиться: навесить сложное ограничение на сочетание table_name и obj_id, либо же вместо этих двух сделать несколько столбцов table_n_Id, повесить на них fk на нужные таблицы и установить ограничение, что заполнен может быть только один. какой вариант лучше (удобнее для построения отчетных запросов, быстрее выборка, удобнее поддерживать) и почему? ms sql 2008 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2010, 14:04 |
|
||
|
ссылки из одного поля в несколько таблиц
|
|||
|---|---|---|---|
|
#18+
Shakill проблема в том, что криво написанные клиенты/чьи-то руки могут в obj_Id могут помещать значения, нарушающие целостность данных, то есть id, которых нет в журнале table_name не то написал, имел в виду что в obj_Id могут попадать значения ключа, которых нет в справочниках объектов соотв. типов, и варианты констрейтов будут связаны с этими справочниками, а не с журналами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2010, 14:36 |
|
||
|
ссылки из одного поля в несколько таблиц
|
|||
|---|---|---|---|
|
#18+
Автор, приведите, пожалуйста, схему, иллюстрирующую то, что Вы на словах рассказали Извините, со слов трудно воспринимается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2010, 15:35 |
|
||
|
ссылки из одного поля в несколько таблиц
|
|||
|---|---|---|---|
|
#18+
Паганель, в Table_Name хранятся названия журналов - Table_1, Table_2, ... нужно сделать чтоб в obj_Id не могли попасть значения, которых нет в соотв-щих Obj_Type_N, рассматриваю вариант разбить Obj_Id на несколько полей Obj_N_id по количеству журналов, навесить FK и убрать поле Table_Name либо при существующей схеме придумать констрейнт на Table_Name + obj_Id. не могу выбрать что лучше, критерии написал выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2010, 15:57 |
|
||
|
ссылки из одного поля в несколько таблиц
|
|||
|---|---|---|---|
|
#18+
Я - за вариантShakillразбить Obj_Id на несколько полей Obj_N_id по количеству журналов, навесить FK и убрать поле Table_Nameпочему - не знаю, честное пионерское на всякий случай свежак: условие на поля таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2010, 16:08 |
|
||
|
ссылки из одного поля в несколько таблиц
|
|||
|---|---|---|---|
|
#18+
Паганель, тоже не могу объяснить, но выбрал тот же вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2010, 17:10 |
|
||
|
ссылки из одного поля в несколько таблиц
|
|||
|---|---|---|---|
|
#18+
Shakill, а чем грозит потеря "целостности данных", почему Вы ее так боитесь? Судя по описанию, обычный реестр объектов. Самое страшное что можно придумать - это плодить поля с ID для каждого типа объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2010, 17:25 |
|
||
|
ссылки из одного поля в несколько таблиц
|
|||
|---|---|---|---|
|
#18+
iscrafm, вот конкретно в этом примере оно и не так страшно, просто хочу быть последовательным. если какой-то пользователь или сторонний софт начинает поставлять в базу некорректные данные и это выплывает не сразу, то работы становится больше, в том числе и мне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2010, 17:30 |
|
||
|
|

start [/forum/search_topic.php?author=oldtoad&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 453ms |
| total: | 732ms |

| 0 / 0 |
