powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проетирование наследования
25 сообщений из 25, страница 1 из 1
Проетирование наследования
    #35553169
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стою перед выбором способа реализации наследования


1й вариант - имеем поля каждое ссылающееся на потомка
2й вариант - имеем одно поле ссылающееся на всех потомков и поле описывающее тип связи


Непойму какой вариант лучше и чем.
Помогите пожалуста советом и опытом

Спасибо
...
Рейтинг: 0 / 0
Проетирование наследования
    #35553255
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp wrote:
> 1й вариант - имеем поля каждое ссылающееся на потомка
> 2й вариант - имеем одно поле ссылающееся на всех потомков и поле
> описывающее тип связи

Поясните детальнее. Что-то бред какой-то у вас тут написан.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проетирование наследования
    #35554223
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
sp wrote:
> 1й вариант - имеем поля каждое ссылающееся на потомка
> 2й вариант - имеем одно поле ссылающееся на всех потомков и поле
> описывающее тип связи

Поясните детальнее. Что-то бред какой-то у вас тут написан.
Posted via ActualForum NNTP Server 1.4

Имеем к примеру сущности

Код: 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.
Стац. телефон
----------------------
ID стац. номера
Код города
Номер 


Моб. телефон
----------------------
ID моб. номера
ID оператора
ID кода моб оператора
Номер


 1 ) вариант
Телефон
----------------
ID
Код страны
Назначение
ID стац. телефона
ID моб. телефона

 2 ) вариант
Телефон
----------------
ID
Код страны
Назначение
ID телефона
ID тип телефона (моб/стац)
...
Рейтинг: 0 / 0
Проетирование наследования
    #35554394
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp wrote:

> Имеем к примеру сущности
Оба неправильные. поищите по форуму, обсуждалось много раз.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проетирование наследования
    #35554501
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
sp wrote:

> Имеем к примеру сущности
Оба неправильные. поищите по форуму, обсуждалось много раз.
Posted via ActualForum NNTP Server 1.4

а как хоть темы сформулированы были? как искать?
...
Рейтинг: 0 / 0
Проетирование наследования
    #35554543
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
sp wrote:

> Имеем к примеру сущности
Оба неправильные. поищите по форуму, обсуждалось много раз.
Posted via ActualForum NNTP Server 1.4

если Вы знаете как правильно - наверное лучше было бы мысль свою тут изложить а не отсылать ко всему интернету в сибири весь снег убирать! :)

там столько бредятины - я уже 2й час всякую чушь читаю а зерна так и не нашел
...
Рейтинг: 0 / 0
Проетирование наследования
    #35554592
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ткине где можно об этом почитать плз
...
Рейтинг: 0 / 0
Проетирование наследования
    #35554642
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spИмеем к примеру сущности

Код: 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.
Стац. телефон
----------------------
ID стац. номера
Код города
Номер 


Моб. телефон
----------------------
ID моб. номера
ID оператора
ID кода моб оператора
Номер


 1 ) вариант
Телефон
----------------
ID
Код страны
Назначение
ID стац. телефона
ID моб. телефона

 2 ) вариант
Телефон
----------------
ID
Код страны
Назначение
ID телефона
ID тип телефона (моб/стац)

1й Вариант - будет увеличение полей таблиц будет при увеличении кол-ва типов, но проще будет с запросами. Если не планируется увеличение типов, то имхо лучше это и нагляднее.
2й вариант(плавающая ссылка) - гемор будет с запросами, да и они будут менее понятны, и не будет лишних полей. Но возможы проблемы при опять же увеличении кол-ва типов, путаница будет, да и условия соединения могут быть разномастные.
Вообще, мое мнение, от плавающих ссылок лучше избавляться(по мере возможности)! У меня сейчас есть таблица, у которой могут быть 2 типа записей и еще null(считай, 3 типа) - много лишних телодвижений при выборке, обновлении, вставке - просто неудобно.
На одной из работ было поле таблицы 3х типов с плавающей ссылкой. Делал там один отчет... При их модели БД(менять не мог) текст запроса был крайне громоздким!!!

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

думаю остановлюсь на 1м варианте, потому как других типов телефонных номеров не планируется в ближайшее десятилетие:)
...
Рейтинг: 0 / 0
Проетирование наследования
    #35555110
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему вы вобще разделяете мобильные и стационарные телефоны?

Есть ТЕЛЕФОН у которого бывает:
код страны
код города/оператора связи
телефон
extention

а мобильный/стационарный/многоканальный/факс - это все характеристики этого телефонного номера.
...
Рейтинг: 0 / 0
Проетирование наследования
    #35555120
474
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyА почему вы вобще разделяете мобильные и стационарные телефоны?
Я думаю, что это просто неудачный пример .
spИмеем к примеру сущности
Наследования у телефонов я вообще не представляю...
...
Рейтинг: 0 / 0
Проетирование наследования
    #35555326
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
474 BelyА почему вы вобще разделяете мобильные и стационарные телефоны?
Я думаю, что это просто неудачный пример .
spИмеем к примеру сущности
Наследования у телефонов я вообще не представляю...

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

както сложно Вы выразились - не понятно кто первый кто второй и какие ключи
мне кажется что со вторым вариантом хуже - потому как поменяй нескоко раз поле "тип телефона" и уже не вспомиш из какой таблицы ключ, а так все четко и понятно и никогда не потеряешся :)
...
Рейтинг: 0 / 0
Проетирование наследования
    #35556351
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spЕсли у человека в руке молоток - все что он видит вокруг ему кажется гвоздями :)
так это Вам видится неудачным примером - Вы не с той стороны на телефоны смотрите - нам такое разделение необходимо для рассылки оперативных SMS - и скажите теперь что это неудачный пример!!!!А накой вам вобще наследование в БД?
...
Рейтинг: 0 / 0
Проетирование наследования
    #35556358
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spкакто сложно Вы выразились - не понятно кто первый кто второй и какие ключи
мне кажется что со вторым вариантом хуже - потому как поменяй нескоко раз поле "тип телефона" и уже не вспомиш из какой таблицы ключ, а так все четко и понятно и никогда не потеряешся :)А вы для всех объектов всех типов введите сквозную нумерацию.
Даже если 10 раз поменяете тип - в других таблицах не окажется записей с таким ID.
...
Рейтинг: 0 / 0
Проетирование наследования
    #35557452
474
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spЕсли у человека в руке молоток - все что он видит вокруг ему кажется гвоздями :)
так это Вам видится неудачным примером - Вы не с той стороны на телефоны смотрите - нам такое разделение необходимо для рассылки оперативных SMS - и скажите теперь что это неудачный пример!!!!
Я вообще-то имел в виду не разделение, делите ради бога, а то, что для иллюстрации наследования вы выбрали именно телефоны. Ну, какой-то сложный пример. Трудно понять, что значит наследование для телефонов.
...
Рейтинг: 0 / 0
Проетирование наследования
    #35557967
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
474 spЕсли у человека в руке молоток - все что он видит вокруг ему кажется гвоздями :)
так это Вам видится неудачным примером - Вы не с той стороны на телефоны смотрите - нам такое разделение необходимо для рассылки оперативных SMS - и скажите теперь что это неудачный пример!!!!
Я вообще-то имел в виду не разделение, делите ради бога, а то, что для иллюстрации наследования вы выбрали именно телефоны. Ну, какой-то сложный пример. Трудно понять, что значит наследование для телефонов.

возможно Вы и правы
...
Рейтинг: 0 / 0
Проетирование наследования
    #35557976
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely spЕсли у человека в руке молоток - все что он видит вокруг ему кажется гвоздями :)
так это Вам видится неудачным примером - Вы не с той стороны на телефоны смотрите - нам такое разделение необходимо для рассылки оперативных SMS - и скажите теперь что это неудачный пример!!!!А накой вам вобще наследование в БД?

Дабы унифицировать ввод - для всех объектов не описывать в тысячный раз телефоны и в UI однажды создав класс Телефон не мучаться с копированием интерфейса и дублированием функционала.
А еще как вы в одной таблице совместите противоречивые данные
А таблица Телефоны может содержать их и для ссылки на телефон нужен всего один ID
...
Рейтинг: 0 / 0
Проетирование наследования
    #35557978
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely spкакто сложно Вы выразились - не понятно кто первый кто второй и какие ключи
мне кажется что со вторым вариантом хуже - потому как поменяй нескоко раз поле "тип телефона" и уже не вспомиш из какой таблицы ключ, а так все четко и понятно и никогда не потеряешся :)А вы для всех объектов всех типов введите сквозную нумерацию.
Даже если 10 раз поменяете тип - в других таблицах не окажется записей с таким ID.

Это несколько усложнит обработку данных
...
Рейтинг: 0 / 0
Проетирование наследования
    #35558007
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp BelyА накой вам вобще наследование в БД?Дабы унифицировать ввод - для всех объектов не описывать в тысячный раз телефоны и в UI однажды создав класс Телефон не мучаться с копированием интерфейса и дублированием функционала.И причем здесь структура таблицы?
Интерфейс, классы и все прочее - может быть какими угодно.
При этом структура таблицы для всех телефонов может быть одна.
Есть слой хранения данных.
Есть слой отображения данных.

spА еще как вы в одной таблице совместите противоречивые данныеКакие противоречивые данные есть у разных телефонов?
Если это ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ, то они могут храниться вообще в отдельной таблице.
Например, паспортные данные владельца телефона.

spА таблица Телефоны может содержать их и для ссылки на телефон нужен всего один IDВы сами себя путаете.
Разберитесь сперва что у вас является объектом, а что его свойствами.

Сейчас вы говорите так, как будто телефонный номер - это свойство какого-то третьего объекта.
Но к наследованию - это вобще никак не относится.

И еще. Реализуя в БД наследуемость так же как в C++/C# и прочих языках - вы роете себе яму.
Когда вопрос встанет, чтобы было не просто "красиво", а еще и "быстро" - переделывать красоту будет поздно.
...
Рейтинг: 0 / 0
Проетирование наследования
    #35559319
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И причем здесь структура таблицы?
Интерфейс, классы и все прочее - может быть какими угодно.
При этом структура таблицы для всех телефонов может быть одна.
Есть слой хранения данных.
Есть слой отображения данных.


Однакоже странный подход к проектирования - сделаем структуру данных абыкак а в интерфейсной части все выправим!!??


Если это ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ, то они могут храниться вообще в отдельной таблице.

Так и есть - сущность телефон выделяется в эти 3 таблицы и может являться дополнительным аттрибутом любого объекта


Сейчас вы говорите так, как будто телефонный номер - это свойство какого-то третьего объекта.
Но к наследованию - это вобще никак не относится.
Этож как же ??? разве структура Телефон -> {Телефон стац. | Телефон мобю.} не является наследованием????


И еще. Реализуя в БД наследуемость так же как в C++/C# и прочих языках - вы роете себе яму.
Когда вопрос встанет, чтобы было не просто "красиво", а еще и "быстро" - переделывать красоту будет поздно.
впервые слышу о том что правильно спроектированная система будет не быстрой
...
Рейтинг: 0 / 0
Проетирование наследования
    #35559911
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp И причем здесь структура таблицы?
Интерфейс, классы и все прочее - может быть какими угодно.
При этом структура таблицы для всех телефонов может быть одна.
Есть слой хранения данных.
Есть слой отображения данных.
Однакоже странный подход к проектирования - сделаем структуру данных абыкак а в интерфейсной части все выправим!!??Перевираете мои слова.
Надо сделать структуру данных ПРАВИЛЬНО с точки зрения ХРАНЕНИЯ и ОБРАБОТКИ ДАННЫХ.
При проектировании - не надо оглядываться на програмный интерфейс.

А интерфейс можно заставить работать с любой структурой данных.
Просто логику работы с БД надо будет сделать отдельным методом (если это объект).

sp
Сейчас вы говорите так, как будто телефонный номер - это свойство какого-то третьего объекта.
Но к наследованию - это вобще никак не относится.
Этож как же ??? разве структура Телефон -> {Телефон стац. | Телефон мобю.} не является наследованием????Я бы сказал, что "Телефон стационарный, с номером : 728-4004" - это экземпляр класса "Телефон". У этого экземпляра есть свойство "Стационарный".
Я пока так и не вижу чем отличается для вас стационарный телефон от мобильного.
а наличие у объекта свойситва "Стационарный / Мобильный" - не делает его разными классами.

sp
И еще. Реализуя в БД наследуемость так же как в C++/C# и прочих языках - вы роете себе яму.
Когда вопрос встанет, чтобы было не просто "красиво", а еще и "быстро" - переделывать красоту будет поздно.
впервые слышу о том что правильно спроектированная система будет не быстройПока что правильностью проектирования у вас не пахнет.
Если вы размахнетесь слишком широко - то дойдете до хранения данных в EAV структуре.
А потом когда дело дойдет до отчетов - будете долго думать как получать данные.
При большом количестве данных в системе - у системы могут просто начаться проблемы с производительностью, которых не возникло бы при классическом реляционном подходе при проектировании структуры.

Вобщем, вам решать как себя мучать...
...
Рейтинг: 0 / 0
Проетирование наследования
    #35560392
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp И причем здесь структура таблицы?
Интерфейс, классы и все прочее - может быть какими угодно.
При этом структура таблицы для всех телефонов может быть одна.
Есть слой хранения данных.
Есть слой отображения данных.


Однакоже странный подход к проектирования - сделаем структуру данных абыкак а в интерфейсной части все выправим!!??

Тебе говорят про то, что СУБД в большинстве своем реализуют реляционную модель, а не объектно-ориентированную(где есть понятие наследования), и попытаться реляционную СУБД подстроить под ОО-модель часто обращается граблями.
Есть канеш ООСУБД, но это уже другой разговор...
...
Рейтинг: 0 / 0
Проетирование наследования
    #35702929
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely sp И причем здесь структура таблицы?
Интерфейс, классы и все прочее - может быть какими угодно.
При этом структура таблицы для всех телефонов может быть одна.
Есть слой хранения данных.
Есть слой отображения данных.
Однакоже странный подход к проектирования - сделаем структуру данных абыкак а в интерфейсной части все выправим!!??Перевираете мои слова.
Надо сделать структуру данных ПРАВИЛЬНО с точки зрения ХРАНЕНИЯ и ОБРАБОТКИ ДАННЫХ.
При проектировании - не надо оглядываться на програмный интерфейс.

А интерфейс можно заставить работать с любой структурой данных.
Просто логику работы с БД надо будет сделать отдельным методом (если это объект).

sp
Сейчас вы говорите так, как будто телефонный номер - это свойство какого-то третьего объекта.
Но к наследованию - это вобще никак не относится.
Этож как же ??? разве структура Телефон -> {Телефон стац. | Телефон мобю.} не является наследованием????Я бы сказал, что "Телефон стационарный, с номером : 728-4004" - это экземпляр класса "Телефон". У этого экземпляра есть свойство "Стационарный".
Я пока так и не вижу чем отличается для вас стационарный телефон от мобильного.
а наличие у объекта свойситва "Стационарный / Мобильный" - не делает его разными классами.

sp
И еще. Реализуя в БД наследуемость так же как в C++/C# и прочих языках - вы роете себе яму.
Когда вопрос встанет, чтобы было не просто "красиво", а еще и "быстро" - переделывать красоту будет поздно.
впервые слышу о том что правильно спроектированная система будет не быстройПока что правильностью проектирования у вас не пахнет.
Если вы размахнетесь слишком широко - то дойдете до хранения данных в EAV структуре.
А потом когда дело дойдет до отчетов - будете долго думать как получать данные.
При большом количестве данных в системе - у системы могут просто начаться проблемы с производительностью, которых не возникло бы при классическом реляционном подходе при проектировании структуры.

Вобщем, вам решать как себя мучать...

аттрибут "Тип телефона" не позволяет контролировать целостность данных Оператор-КодОператора и уж никак не позволяет гарантировать что указание в типе телефона "Мобильный" наличие действительно мобильного номера а не стационарного

Разделение телефонов нв стационарный и мобильный сделано не искусственно, а из-за различных аттрибутов этих телефонов - с вашей структурой вы обречены все время искать виновных в очепятках и наказывать их и страдать... :)
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проетирование наследования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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