|
|
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVaПоэтому делают наоборот, PK в основных сущностях уникальны в пределах БД и являются FК на Объект.Если при этом связь "чисто логическая" - то каким образом будет находиться нужная таблица? Вот есть у нас таблица "Телефоны" и есть у нее ссылка на 10 таблиц "Физлица", "Организации" итп. Как найти на какой имеено объект ссылается телефон, если есть номер? Перебирать все 10 таблиц "а где у нас такой PK имеется"? А если добавить поле "название таблицы для ссылки" - то надобность в сквозной нумерации во всей базе отпадает. Ну и к чему Ваш совет тогда был? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 14:54 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
On Fri, 09 Nov 2007 14:54:07 +0300, Bely <nospam@sql.ru> wrote: > Автор: Bely > SeVa > Поэтому делают наоборот, PK в основных сущностях уникальны в пределах БД > и > являются FК на Объект. > Если при этом связь "чисто логическая" - то каким образом будет > находиться > нужная таблица? > > Вот есть у нас таблица "Телефоны" и есть у нее ссылка на 10 таблиц > "Физлица", "Организации" > итп. > Как найти на какой имеено объект ссылается телефон, если есть номер? > Перебирать все 10 таблиц "а где у нас такой PK имеется"? > > А если добавить поле "название таблицы для ссылки" - то надобность в > сквозной > нумерации во всей базе отпадает. > > Ну и к чему Ваш совет тогда был? > Тема Ответить Сообщение "название таблицы для ссылки" - это атрибут Объекта, а не таблицы с FK на нее. CREATE TABLE Objects ( id INT PRIMARY KEY IDENTITY, tableName SYSNAME ); CREATE TABLE Human ( id INT PRIMARY KEY REFERENCES Objects(id) ); CREATE TABLE House ( id INT PRIMARY KEY REFERENCES Objects(id) ); CREATE TABLE ObjectsInPhoto photoId INT REFERENCES Photo(id), objectId INT REFERENCES Object(id) ); -- Здесь у нас туманы и дожди, здесь у нас холодные рассветы, Здесь на неизведанном пути ждут замысловатые сюжеты! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2007, 20:37 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
BelyВот есть у нас таблица "Телефоны" и есть у нее ссылка на 10 таблиц "Физлица", "Организации" итп. Как найти на какой имеено объект ссылается телефон, если есть номер? Перебирать все 10 таблиц "а где у нас такой PK имеется"? Уникальность как раз и позволяет избежать подобных извратов.Это будет тривиальный join одной view c таблицей телефонов. А вот мне хотелось бы посмотреть, как тебе поможет TableName если усложнить задачу - выводить не название таблицы, а более вразумительную информацию: ФИО, название организации и тд.Причем один телефон может быть у разных объектов(такие варианты могут быть для фотографий, которые здесь и обсуждаются) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 12:09 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVa BelyВот есть у нас таблица "Телефоны" и есть у нее ссылка на 10 таблиц "Физлица", "Организации" итп. Как найти на какой имеено объект ссылается телефон, если есть номер? Перебирать все 10 таблиц "а где у нас такой PK имеется"? Уникальность как раз и позволяет избежать подобных извратов.Пример схемы и запроса "узнать тип объекта" - можете привести? А то пока все слова, да слова... SeVaЭто будет тривиальный join одной view c таблицей телефонов. А вот мне хотелось бы посмотреть, как тебе поможет TableName если усложнить задачу - выводить не название таблицы, а более вразумительную информацию: ФИО, название организации и тд.Вы не поверите - будут точно такие же элементарные JOIN-ы Код: plaintext 1. 2. 3. SeVaПричем один телефон может быть у разных объектов(такие варианты могут быть для фотографий, которые здесь и обсуждаются)То же самое, только тип объекта (можно использовать название таблицы) указывается в связующей таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 12:21 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
BelyПример схемы и запроса "узнать тип объекта" - можете привести? А то пока все слова, да слова... Ворос абстрактный и для клиентских запросов он не нужен. SELECT * FROM View WHERE Uid = @Uid.Хотя признак к какому объекту относится запись в табл. Объект у меня присутствует, но с одним существенным отличием,этот атрибут-целое число. По одной простой причине,такая таблица - узкое место, которое должно быть максимально оптимизированно и varchar'ам там не место, для них резервируется пустое место и индексы уж больно пухлые будут. BelyВы не поверите - будут точно такие же элементарные JOIN-ы Да, джойны будут элементарные, но километровые и при добавлении нового объекта их всех прийдется переписывать.Если нравится вариант, когда нужно перелопачивать сотни запросов, мне добавить нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 13:32 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVaХотя признак к какому объекту относится запись в табл. Объект у меня присутствует, но с одним существенным отличием,этот атрибут-целое число.Мы говорим про наличие/отсутствие такого атрибута, а не про какого типа он должен быть. Вы же говорили - что достаточно одного уникального PK по всей базе. Теперь оказывается уже не достаточно. Зачем такое надо? Ответ простой - программе надо узнать какую форму открыть, если пользователь пытается открыть объект из общего списка объектов. т.е. надо знать тип объекта. SeVaДа, джойны будут элементарные, но километровые и при добавлении нового объекта их всех прийдется переписывать.Если нравится вариант, когда нужно перелопачивать сотни запросов, мне добавить нечего.1. Откройте для себя VIEW :) 2. Все зависит от дизайна - если добавление типа ведет к перелопачиванию всего - то это проблема дизайна. При схеме описанной мной (как оказалось - и Вашей в том числе) - перелопачивать придется только то, что использует все типы сразу. А таких мест, как правило, не очень много. И там будет происходить, как правило, добавление функционала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 13:54 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
1.Я не говорил об одном уникальном PK(такой вариант возможен, но опять же, это может быть узким местом). 2.Открывать весь список и ставить varchar - полный моветон.Это можно делать только на игрушечных БД. 3. автор1. Откройте для себя VIEW :) Приведите примеры запросов для поиска по телефонам и ,скажем, по адресам, с выводом дополнительной информации(думаю, вывод списка Он, Она, Оно будет мало информативен для пользователя)?Что нужно будет сделать с ними при добавлении нового объекта? Вопрос о дизайне я не задаю, думаю, и так все будет ясно после ответа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 14:46 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVa1.Я не говорил об одном уникальном PK(такой вариант возможен, но опять же, это может быть узким местом). Перечитайте... SeVaНе понятно, поскольку FK на несколько таблиц одновременно не бывает. Поэтому делают наоборот, PK в основных сущностях уникальны в пределах БД и являются FК на Объект. SeVa2.Открывать весь список и ставить varchar - полный моветон.Это можно делать только на игрушечных БД.300 тыс строк - проблем не было. Что касается индексов - не стоит забывать, что 4-х символьная строка - не сильно отличается по размеру от INTEGER-а. SeVa3. автор1. Откройте для себя VIEW :) Приведите примеры запросов для поиска по телефонам и ,скажем, по адресам, с выводом дополнительной информации(думаю, вывод списка Он, Она, Оно будет мало информативен для пользователя)?Что нужно будет сделать с ними при добавлении нового объекта? Вопрос о дизайне я не задаю, думаю, и так все будет ясно после ответа.Ладно, напишу еще один студенческий запрос (от Вас так ничего и не дождался... может запросы писать не умеете? :) ). Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 15:00 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. в другом топике было сказано: авторЭто бывает удобно. Например: Таблица ОБЪЕКТ, в которой записано название, тип и прочие общие св-ва объекта. Например, у нас в системе есть объект: Дом, Организация, Человек. Для дома нам надо хранить его: адрес, координаты на карте, план помещений (файл). Для организации: ИНН, счет и пр. реквизиты. Для человека: ФИО, пол, телефон, личный e-mail итп. Для каждого типа объекта - в таком случае можно создать по отдельной таблице в которой будет храниться эта информация. И получится, что во всех этих трех таблицах первичный ключ совпадет с внешним ключем. В схеме чуть выше, в ОБЪЕКТЕ никаких фотографий и номеров телефонов не присутствовало. А теперь всплывает obj_type в телефонах. PS. А что у вас пользователи делали с 300000? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 15:40 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVaУгу.Для внятности еще хотелось бы и схему БДЯ, к сожалению, не имею достаточно свободного времени, что полностью задокументировать и привести все свои элементарные примеры - чтобы избежать Ваших придирок. Примерную схему - приводил чуть выше. Далее - все примеры надо рассматривать в контексте разговора. SeVaВ схеме чуть выше, в ОБЪЕКТЕ никаких фотографий и номеров телефонов не присутствовало.А теперь всплывает obj_type в телефонах.Если у нас есть таблица OBJECTS (единый реестр объектов) - то все эти связки пот типу между разнородными таблицами - не нужны. Все связи проводятся через эту центральную таблицу. Если такой таблицы нет - то тогда необходимо в связующих таблицах с логической связью - держать поле "ТИП СВЯЗАННОГО ОБЪЕКТА". И вообще - все это было ответом, на "Поэтому делают наоборот, PK в основных сущностях уникальны в пределах БД и являются FК на Объект." Так вот: я говорил, что единая нумерация объектов во всей БД 1) этого не достаточно 2) Можно обойтись и без нее (нумеровать объекты внутри своей таблицы) остальное - см. выше. SeVaPS. А что у вас пользователи делали с 300000?Обрабатывали эти данные, что же еще :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 15:52 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
Меньше смайлов и "логических связей", а больше конкретики. А то описывается одна схема, а запрос из другой оперы(думаю, уже понятно почему,если нет,то не стоит и продолжать). Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 16:16 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVaМеньше смайлов и "логических связей", а больше конкретики.Где же, уважаемый, Ваша схема? Ее так просили показать, но никто не дождался... Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 16:20 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
Ерничать время нашлось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 17:13 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVa, задокументируйте, пожалуйста, Вашу схему и опубликуйте ее в разделе "Антипаттерны" и "Черный юмор". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 17:27 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
Ну, вот guest объявился.Я предупреждал. Это логическая схема, физических реализаций может быть вагон и маленькая тележка.Достоинства и недостатки стратегий: -одна таблица на подкласс -одна таблица на классовую иерархию -одна таблица на конкретный класс давно уже обсосаны и абстрактное обсуждение их мало интересно, особенно в камотозном стиле . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 18:39 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVa Это та самая давно обещанная схема или другая? Не вижу в ней решения для обсуждавшейся коллизии... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 18:39 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
А почему б дискриминатор не завести - в Erwin кажись они даже на уровне нотации поддерживались? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 18:57 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVa, достоинств в Вашей схеме нет. Ни одного. Абсолютно тупая а-ля Тенцер структура. В общем, аФФтАр, пЕши ИСЧО. А лучше - задокументировать и опубликовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 19:15 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
2 Bely > Вы не поверите - будут точно такие же элементарные JOIN-ы. Отлично сказано! 2 guest_20040621 А что Вы скажете о моем варианте (см. начало топика)? Только сразу предупреждаю – это непромышленная система, а для домашнего пользования, где я сам во всех ролях – от проектировщика до пользователя. Хотя согласен, что проектировать надо в любом случае "чтоб из пушки стрелять". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 06:04 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
> для домашнего пользования А зачем Вам для домашнего пользования база данных? Может, задачу можно проще решить? > проектировать надо в любом случае "чтоб из пушки стрелять" Абсолютный результат требует бесконечного времени. Не бывает идеальных решений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 08:00 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Абсолютный результат требует бесконечного времени. где почитать доказательство этого утверждения :) ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 09:29 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
Чендлергде почитать доказательство этого утверждения :) ??? Для этого достаточно почитать топики guest'a aka Shuklin изобретателя "однопользовательской файловой desktop базы" с "наличием миллионов threads одновременно"(To guest. Для каких воробьев это нужно?) Там много интересного, не пожалеете. Shuklin, жду продолжения! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 13:24 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
SeVa Для этого достаточно почитать топики guest'a aka Shuklin мне надо это для того чтобы если не успеваю по срокам то было что ответить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2007, 10:41 |
|
||
|
Связывание таблиц различных объектов с одной
|
|||
|---|---|---|---|
|
#18+
2 guest_20040621 > А зачем Вам для домашнего пользования база данных? Может, задачу можно проще решить? Я видел, как люди "базу" ведут на карточках. Знаете, таких, библиографических Я уж лучше на компьютере… > Абсолютный результат требует бесконечного времени. Не бывает идеальных решений. "Будем делать хорошо, а плохо само получится" (не помню, кто сказал). А по теме что-н.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2007, 08:25 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34932753&tid=1544188]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
179ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 460ms |

| 0 / 0 |
