|
|
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
Стою перед выбором способа реализации наследования 1й вариант - имеем поля каждое ссылающееся на потомка 2й вариант - имеем одно поле ссылающееся на всех потомков и поле описывающее тип связи Непойму какой вариант лучше и чем. Помогите пожалуста советом и опытом Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2008, 22:55 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
sp wrote: > 1й вариант - имеем поля каждое ссылающееся на потомка > 2й вариант - имеем одно поле ссылающееся на всех потомков и поле > описывающее тип связи Поясните детальнее. Что-то бред какой-то у вас тут написан. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 00:52 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 13:41 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
sp wrote: > Имеем к примеру сущности Оба неправильные. поищите по форуму, обсуждалось много раз. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 14:20 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
MasterZiv sp wrote: > Имеем к примеру сущности Оба неправильные. поищите по форуму, обсуждалось много раз. Posted via ActualForum NNTP Server 1.4 а как хоть темы сформулированы были? как искать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 14:43 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
MasterZiv sp wrote: > Имеем к примеру сущности Оба неправильные. поищите по форуму, обсуждалось много раз. Posted via ActualForum NNTP Server 1.4 если Вы знаете как правильно - наверное лучше было бы мысль свою тут изложить а не отсылать ко всему интернету в сибири весь снег убирать! :) там столько бредятины - я уже 2й час всякую чушь читаю а зерна так и не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 14:53 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
ткине где можно об этом почитать плз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 15:06 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
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. 1й Вариант - будет увеличение полей таблиц будет при увеличении кол-ва типов, но проще будет с запросами. Если не планируется увеличение типов, то имхо лучше это и нагляднее. 2й вариант(плавающая ссылка) - гемор будет с запросами, да и они будут менее понятны, и не будет лишних полей. Но возможы проблемы при опять же увеличении кол-ва типов, путаница будет, да и условия соединения могут быть разномастные. Вообще, мое мнение, от плавающих ссылок лучше избавляться(по мере возможности)! У меня сейчас есть таблица, у которой могут быть 2 типа записей и еще null(считай, 3 типа) - много лишних телодвижений при выборке, обновлении, вставке - просто неудобно. На одной из работ было поле таблицы 3х типов с плавающей ссылкой. Делал там один отчет... При их модели БД(менять не мог) текст запроса был крайне громоздким!!! Ну это имхо. При грамотном построении канеш и с плавающими ссылками можно работать, тем более когда без них не обойтись :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 15:24 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
Спасибо за то что поделились опытом! думаю остановлюсь на 1м варианте, потому как других типов телефонных номеров не планируется в ближайшее десятилетие:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 15:28 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
А почему вы вобще разделяете мобильные и стационарные телефоны? Есть ТЕЛЕФОН у которого бывает: код страны код города/оператора связи телефон extention а мобильный/стационарный/многоканальный/факс - это все характеристики этого телефонного номера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 17:52 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
BelyА почему вы вобще разделяете мобильные и стационарные телефоны? Я думаю, что это просто неудачный пример . spИмеем к примеру сущности Наследования у телефонов я вообще не представляю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 17:57 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
474 BelyА почему вы вобще разделяете мобильные и стационарные телефоны? Я думаю, что это просто неудачный пример . spИмеем к примеру сущности Наследования у телефонов я вообще не представляю... Если у человека в руке молоток - все что он видит вокруг ему кажется гвоздями :) так это Вам видится неудачным примером - Вы не с той стороны на телефоны смотрите - нам такое разделение необходимо для рассылки оперативных SMS - и скажите теперь что это неудачный пример!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 20:16 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
Я все же за второй вариант. Причем первичный ключ дочерней таблицы является внешним ключом ко второй таблице (к его первичному ключу). Таким образом их первичные (суррогатные, конечно) ключи совпадают. С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 21:36 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
NafЯ все же за второй вариант. Причем первичный ключ дочерней таблицы является внешним ключом ко второй таблице (к его первичному ключу). Таким образом их первичные (суррогатные, конечно) ключи совпадают. С уважением, Naf както сложно Вы выразились - не понятно кто первый кто второй и какие ключи мне кажется что со вторым вариантом хуже - потому как поменяй нескоко раз поле "тип телефона" и уже не вспомиш из какой таблицы ключ, а так все четко и понятно и никогда не потеряешся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 21:48 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
spЕсли у человека в руке молоток - все что он видит вокруг ему кажется гвоздями :) так это Вам видится неудачным примером - Вы не с той стороны на телефоны смотрите - нам такое разделение необходимо для рассылки оперативных SMS - и скажите теперь что это неудачный пример!!!!А накой вам вобще наследование в БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 12:06 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
spкакто сложно Вы выразились - не понятно кто первый кто второй и какие ключи мне кажется что со вторым вариантом хуже - потому как поменяй нескоко раз поле "тип телефона" и уже не вспомиш из какой таблицы ключ, а так все четко и понятно и никогда не потеряешся :)А вы для всех объектов всех типов введите сквозную нумерацию. Даже если 10 раз поменяете тип - в других таблицах не окажется записей с таким ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 12:08 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
spЕсли у человека в руке молоток - все что он видит вокруг ему кажется гвоздями :) так это Вам видится неудачным примером - Вы не с той стороны на телефоны смотрите - нам такое разделение необходимо для рассылки оперативных SMS - и скажите теперь что это неудачный пример!!!! Я вообще-то имел в виду не разделение, делите ради бога, а то, что для иллюстрации наследования вы выбрали именно телефоны. Ну, какой-то сложный пример. Трудно понять, что значит наследование для телефонов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 16:35 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
474 spЕсли у человека в руке молоток - все что он видит вокруг ему кажется гвоздями :) так это Вам видится неудачным примером - Вы не с той стороны на телефоны смотрите - нам такое разделение необходимо для рассылки оперативных SMS - и скажите теперь что это неудачный пример!!!! Я вообще-то имел в виду не разделение, делите ради бога, а то, что для иллюстрации наследования вы выбрали именно телефоны. Ну, какой-то сложный пример. Трудно понять, что значит наследование для телефонов. возможно Вы и правы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 18:50 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
Bely spЕсли у человека в руке молоток - все что он видит вокруг ему кажется гвоздями :) так это Вам видится неудачным примером - Вы не с той стороны на телефоны смотрите - нам такое разделение необходимо для рассылки оперативных SMS - и скажите теперь что это неудачный пример!!!!А накой вам вобще наследование в БД? Дабы унифицировать ввод - для всех объектов не описывать в тысячный раз телефоны и в UI однажды создав класс Телефон не мучаться с копированием интерфейса и дублированием функционала. А еще как вы в одной таблице совместите противоречивые данные А таблица Телефоны может содержать их и для ссылки на телефон нужен всего один ID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 18:53 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
Bely spкакто сложно Вы выразились - не понятно кто первый кто второй и какие ключи мне кажется что со вторым вариантом хуже - потому как поменяй нескоко раз поле "тип телефона" и уже не вспомиш из какой таблицы ключ, а так все четко и понятно и никогда не потеряешся :)А вы для всех объектов всех типов введите сквозную нумерацию. Даже если 10 раз поменяете тип - в других таблицах не окажется записей с таким ID. Это несколько усложнит обработку данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 18:54 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
sp BelyА накой вам вобще наследование в БД?Дабы унифицировать ввод - для всех объектов не описывать в тысячный раз телефоны и в UI однажды создав класс Телефон не мучаться с копированием интерфейса и дублированием функционала.И причем здесь структура таблицы? Интерфейс, классы и все прочее - может быть какими угодно. При этом структура таблицы для всех телефонов может быть одна. Есть слой хранения данных. Есть слой отображения данных. spА еще как вы в одной таблице совместите противоречивые данныеКакие противоречивые данные есть у разных телефонов? Если это ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ, то они могут храниться вообще в отдельной таблице. Например, паспортные данные владельца телефона. spА таблица Телефоны может содержать их и для ссылки на телефон нужен всего один IDВы сами себя путаете. Разберитесь сперва что у вас является объектом, а что его свойствами. Сейчас вы говорите так, как будто телефонный номер - это свойство какого-то третьего объекта. Но к наследованию - это вобще никак не относится. И еще. Реализуя в БД наследуемость так же как в C++/C# и прочих языках - вы роете себе яму. Когда вопрос встанет, чтобы было не просто "красиво", а еще и "быстро" - переделывать красоту будет поздно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 19:12 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
И причем здесь структура таблицы? Интерфейс, классы и все прочее - может быть какими угодно. При этом структура таблицы для всех телефонов может быть одна. Есть слой хранения данных. Есть слой отображения данных. Однакоже странный подход к проектирования - сделаем структуру данных абыкак а в интерфейсной части все выправим!!?? Если это ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ, то они могут храниться вообще в отдельной таблице. Так и есть - сущность телефон выделяется в эти 3 таблицы и может являться дополнительным аттрибутом любого объекта Сейчас вы говорите так, как будто телефонный номер - это свойство какого-то третьего объекта. Но к наследованию - это вобще никак не относится. Этож как же ??? разве структура Телефон -> {Телефон стац. | Телефон мобю.} не является наследованием???? И еще. Реализуя в БД наследуемость так же как в C++/C# и прочих языках - вы роете себе яму. Когда вопрос встанет, чтобы было не просто "красиво", а еще и "быстро" - переделывать красоту будет поздно. впервые слышу о том что правильно спроектированная система будет не быстрой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2008, 13:29 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
sp И причем здесь структура таблицы? Интерфейс, классы и все прочее - может быть какими угодно. При этом структура таблицы для всех телефонов может быть одна. Есть слой хранения данных. Есть слой отображения данных. Однакоже странный подход к проектирования - сделаем структуру данных абыкак а в интерфейсной части все выправим!!??Перевираете мои слова. Надо сделать структуру данных ПРАВИЛЬНО с точки зрения ХРАНЕНИЯ и ОБРАБОТКИ ДАННЫХ. При проектировании - не надо оглядываться на програмный интерфейс. А интерфейс можно заставить работать с любой структурой данных. Просто логику работы с БД надо будет сделать отдельным методом (если это объект). sp Сейчас вы говорите так, как будто телефонный номер - это свойство какого-то третьего объекта. Но к наследованию - это вобще никак не относится. Этож как же ??? разве структура Телефон -> {Телефон стац. | Телефон мобю.} не является наследованием????Я бы сказал, что "Телефон стационарный, с номером : 728-4004" - это экземпляр класса "Телефон". У этого экземпляра есть свойство "Стационарный". Я пока так и не вижу чем отличается для вас стационарный телефон от мобильного. а наличие у объекта свойситва "Стационарный / Мобильный" - не делает его разными классами. sp И еще. Реализуя в БД наследуемость так же как в C++/C# и прочих языках - вы роете себе яму. Когда вопрос встанет, чтобы было не просто "красиво", а еще и "быстро" - переделывать красоту будет поздно. впервые слышу о том что правильно спроектированная система будет не быстройПока что правильностью проектирования у вас не пахнет. Если вы размахнетесь слишком широко - то дойдете до хранения данных в EAV структуре. А потом когда дело дойдет до отчетов - будете долго думать как получать данные. При большом количестве данных в системе - у системы могут просто начаться проблемы с производительностью, которых не возникло бы при классическом реляционном подходе при проектировании структуры. Вобщем, вам решать как себя мучать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2008, 15:42 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
sp И причем здесь структура таблицы? Интерфейс, классы и все прочее - может быть какими угодно. При этом структура таблицы для всех телефонов может быть одна. Есть слой хранения данных. Есть слой отображения данных. Однакоже странный подход к проектирования - сделаем структуру данных абыкак а в интерфейсной части все выправим!!?? Тебе говорят про то, что СУБД в большинстве своем реализуют реляционную модель, а не объектно-ориентированную(где есть понятие наследования), и попытаться реляционную СУБД подстроить под ОО-модель часто обращается граблями. Есть канеш ООСУБД, но это уже другой разговор... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2008, 17:19 |
|
||
|
Проетирование наследования
|
|||
|---|---|---|---|
|
#18+
Bely sp И причем здесь структура таблицы? Интерфейс, классы и все прочее - может быть какими угодно. При этом структура таблицы для всех телефонов может быть одна. Есть слой хранения данных. Есть слой отображения данных. Однакоже странный подход к проектирования - сделаем структуру данных абыкак а в интерфейсной части все выправим!!??Перевираете мои слова. Надо сделать структуру данных ПРАВИЛЬНО с точки зрения ХРАНЕНИЯ и ОБРАБОТКИ ДАННЫХ. При проектировании - не надо оглядываться на програмный интерфейс. А интерфейс можно заставить работать с любой структурой данных. Просто логику работы с БД надо будет сделать отдельным методом (если это объект). sp Сейчас вы говорите так, как будто телефонный номер - это свойство какого-то третьего объекта. Но к наследованию - это вобще никак не относится. Этож как же ??? разве структура Телефон -> {Телефон стац. | Телефон мобю.} не является наследованием????Я бы сказал, что "Телефон стационарный, с номером : 728-4004" - это экземпляр класса "Телефон". У этого экземпляра есть свойство "Стационарный". Я пока так и не вижу чем отличается для вас стационарный телефон от мобильного. а наличие у объекта свойситва "Стационарный / Мобильный" - не делает его разными классами. sp И еще. Реализуя в БД наследуемость так же как в C++/C# и прочих языках - вы роете себе яму. Когда вопрос встанет, чтобы было не просто "красиво", а еще и "быстро" - переделывать красоту будет поздно. впервые слышу о том что правильно спроектированная система будет не быстройПока что правильностью проектирования у вас не пахнет. Если вы размахнетесь слишком широко - то дойдете до хранения данных в EAV структуре. А потом когда дело дойдет до отчетов - будете долго думать как получать данные. При большом количестве данных в системе - у системы могут просто начаться проблемы с производительностью, которых не возникло бы при классическом реляционном подходе при проектировании структуры. Вобщем, вам решать как себя мучать... аттрибут "Тип телефона" не позволяет контролировать целостность данных Оператор-КодОператора и уж никак не позволяет гарантировать что указание в типе телефона "Мобильный" наличие действительно мобильного номера а не стационарного Разделение телефонов нв стационарный и мобильный сделано не искусственно, а из-за различных аттрибутов этих телефонов - с вашей структурой вы обречены все время искать виновных в очепятках и наказывать их и страдать... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2008, 15:14 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35560392&tid=1543535]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 516ms |

| 0 / 0 |
