|
|
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
Предположим, имеются следующие виды подтипов: 1) Подтипы, обладающие одинаковым набором атрибутов со своим предком (и между собой). Например, белый и черный хлеб в магазине. У этих булок хлеба однинаковый набор атрибутов (название, цена, вес), но они тем не менее разные, и должны находится на разных полках магазина. Т.е. например первая полка может содержать только буханки черного хлеба. Как лучше делать - просто ввести поле Тип, и при вставке в таблицу Полка проверять в триггере тип: Код: plaintext Или сделать одну общую таблицу, где собрать атрибуты хлеба, и 2 дочерние таблицы с типами хлеба, а на таблицу Полка повесить FK на соответствующую таблицу с хлебом: Код: plaintext 1. 2. 2) Подтипы, различающиеся 1-2 атрибутами. Скажем, круглый хлеб и хлеб "кирпичем". Предположим, они будут будут отличаться тем, что у круглого хлеба будет диаметр, а у кирпича - длина и высота. Как делать тут - сложить их в одну таблицу и у отсутсвующих атрибутов проставлять null (и триггером проверять, что-бы у нужного типа null был на нужном атрибуте) и в таблице Полка опять проверять допустимость вставки триггером, или разбить на 2 таблицы, содержащие отличные атрибуты ? 3) Количество атрибутов более 2. Какой из методов применять ? Или возможно есть еще какие-то критерии, которые нужно учитывать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 18:46 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
Сложился стереотип, что белый и черный хлеб нельзя класть на одну полку? Я бы добавил атрибут состав: хлеб пшеничный, хлеб рханой, хлеб смешанный. А раскладывал бы по наименованию, выданному производителем. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 08:50 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
про хлеб это просто пример, можете придумать другой пример с подтипами если хотите, интересует сам принцип ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 08:58 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
Таблицы типа: Атрибут_String(ID_Изделия, Название_атрибута, Значение) Атрибут_Int(ID_Изделия, Название, Значение) и т.д.? А что конкретно проектируете? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 09:07 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
attrИли возможно есть еще какие-то критерии, которые нужно учитывать ? Надо учитывать удобство в каждом конкретном случае и перспективу изменения ситуации в будущем. Одного правильного решения нет и быть не может. Valentin Kotelnitski Таблицы типа: Атрибут_String(ID_Изделия, Название_атрибута, Значение) Атрибут_Int(ID_Изделия, Название, Значение) и т.д.? А что конкретно проектируете? Расстрел на месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 15:08 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
softwarerНадо учитывать удобство в каждом конкретном случае и перспективу изменения ситуации в будущем. Одного правильного решения нет и быть не может. но все-таки, какой подход бы вы выбрали в каждом из приведенных примеров ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 15:16 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
attrно все-таки, какой подход бы вы выбрали в каждом из приведенных примеров ? Это бессмысленный вопрос. Смотреть "по месту" в искусственном, неполном примере невозможно. Скажем, для физиков-юриков очевидно стоит раскладывать по разным таблицам. Для хлеба... если мы говорим о хранении-торговле, вряд ли там существуют задачи, где не стоит класть в одну. А вот в производстве хлеба может и существуют. Итп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 15:22 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
2softwarer Из чего стреляем? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 16:21 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
2softwarer Расстрел на месте - Ты отдаешь себе отчет в том что говоришь? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 16:38 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
softwarer Это бессмысленный вопрос. Смотреть "по месту" в искусственном, неполном примере невозможно. Скажем, для физиков-юриков очевидно стоит раскладывать по разным таблицам. Для хлеба... если мы говорим о хранении-торговле, вряд ли там существуют задачи, где не стоит класть в одну. А вот в производстве хлеба может и существуют. Итп. а чем физики-юрики так принципиально отличаются от хлебного магазина ? Ведь вроде как задача и там и там одинаковая - есть набор сущностей, обладающих неким набором общих признаков (в одном случае набор признаков одинаковый, в другом отличаются), нужно контролировать добавление ссылок этих сущностей в другие (раскладывать черный/белый хлеб по полкам, заключать договора с физиками/юриками) и просто контролировать добавление этих сущностей (например недопускать появление параметра Диаметр у хлеба "кирпичем"). Разве одинаковые задачи в разных предметных областях должны решаться по-разному ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 18:14 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
attrа чем физики-юрики так принципиально отличаются от хлебного магазина ?Предлагаю поставить вопрос КРУЧЕ! А чем все базы отличаются друг от друга?! предлагаю создать одну базу на все случаи жизни (EAV forever), всем ее зазубрить и пользовать! Шаг в право, шаг в лево - растрел на месте, исполнитель "Valentin Kotelnitski". attrРазве одинаковые задачи в разных предметных областях должны решаться по-разному ?Задачи слегка похожие, но разные. Хлеб, например, не может превратиться из "Батона" в "Ржаной кирпич", а человек может: перейти в другую организацию, сменить фамилию, паспорт, пол. И при этом, в некоторых системах, он должен оставаться ТЕМ ЖЕ САМЫМ ЧЕЛОВЕКОМ. У хлеба - может быть пересортица. А у организаций и людей? Ну разве что, в роддоме... :) ну и т.д. Общее у этих задач только то, что и те и эти задачи автоматизируют ИТ службы, которым надо это как-то запихнуть в БД таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 18:29 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
attrа чем физики-юрики так принципиально отличаются от хлебного магазина ? Мелочами. Тем, что на эту разницу часто и существенно завязана бизнес-логика, в то время как для хлеба придумали исключительно искусственный пример с полками. Тем, что новые типы контрагентов появляются крайне редко, в то время как к хлебу будет регулярно добавляться "диетический", "с отрубями" и прочее вплоть до печенья. Тем, что общих атрибутов и зависимостей у них скорее мало, чем много. attrВедь вроде как задача и там и там одинаковая - есть набор сущностей, обладающих неким набором общих признаков Неумеренное обобщение - один из лучших способов организовать полный пэ. Рассуждая таким образом, легко сказать, например, "а что - у физика жена и дети, а у юрика - дружественные и дочерние предприятия" и положить эти связи в одну таблицу. Собственно, легко вообще понять, что задача "хранить данные" везде одинакова, и положить всю базу в EAV. attrРазве одинаковые задачи в разных предметных областях должны решаться по-разному ? Разве в моем алгоритме присутствует зависимость от предметной области? Мне кажется, "проанализировать и понять, как будет лучше в каждом конкретном случае" - вполне себе "решаться одинаково". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2008, 18:35 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
60 человек, Bely? attr спрашивал про универсальную организацию аттрибутов - вот я ему и ответил я даже спросил о конкретной задаче, если ты не заметил никто тебе не предлагал зубрить одну базу на все случаи жизни Есть Витамин Пентовит, есть Витамин Ундевит, есть богатое витаминами подсолнечное масло Есть колбаса Московская, есть колбаса Ростовская, есть колбаса Сочинская Есть апельсиновый сок, есть сок яблочный, есть сок малиновый Почувствуй разницу, мой дорогой И это еще не все примеры Заметив твои мирные намерения, я не стал классифицировать танки или, скажем, самолеты А вдруг, ты расстреливаешь с бронепоезда? И почему ты считаешь всех за лохов? А по жизни - в руки любимое орудие проектирования - и удачи милый друг. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 08:19 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
Valentin KotelnitskiИ почему ты считаешь всех за лохов?Не всех, а только тех, кто предлагает такие структуры. Атрибут_String(ID_Изделия, Название_атрибута , Значение) А по делу - есть что сказать-то? А то шума много, а толку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 13:09 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
2Bely Я шумлю - ты шумишь - они шумят... А толку - как с козла молока :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 13:39 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
softwarerМелочами. Тем, что на эту разницу часто и существенно завязана бизнес-логика, в то время как для хлеба придумали исключительно искусственный пример с полками. Тем, что новые типы контрагентов появляются крайне редко, в то время как к хлебу будет регулярно добавляться "диетический", "с отрубями" и прочее вплоть до печенья. Тем, что общих атрибутов и зависимостей у них скорее мало, чем много. значит существенна зависимость от количества подтипов, частоты их добавления и общего количества атрибутов ? На количестве атрибутов у меня и был основан вопрос. Тогда давайте переформулирую вопрос: как влияет на выбор метода решения (кстати, кроме двух указанных мной случайно не существуют еще какие-то ?) количество атрибутов, частота их добавления и количество подтипов :) softwarerНеумеренное обобщение - один из лучших способов организовать полный пэ. Рассуждая таким образом, легко сказать, например, "а что - у физика жена и дети, а у юрика - дружественные и дочерние предприятия" и положить эти связи в одну таблицу. Собственно, легко вообще понять, что задача "хранить данные" везде одинакова, и положить всю базу в EAV. неумереное разобщение тоже ни к чему хорошему не приведет, всегда должна быть золотая середина. softwarer Разве в моем алгоритме присутствует зависимость от предметной области? Мне кажется, "проанализировать и понять, как будет лучше в каждом конкретном случае" - вполне себе "решаться одинаково". вот я и про то-же, вы ведь анализируете исходя из каких-то принципов, верно ? Если этими принципами являются "количество подтипов, частота их добавления и общее количество атрибутов", то имхо вполне можно сформулировать какие-то общие подходы, верно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 13:41 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
Где вы на практике решаете типовую задачу? Каков набор подтипов? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 14:04 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
Valentin Kotelnitski Где вы на практике решаете типовую задачу? Каков набор подтипов? металлургия, углубляться в нее смысла мало, тем более что меня все-таки интересуют общие подходы. А то знаете, сегодня металлургия, завтра биллинг ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 14:12 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
attrнеумереное разобщение тоже ни к чему хорошему не приведет, всегда должна быть золотая середина. Безусловно. attrвот я и про то-же, вы ведь анализируете исходя из каких-то принципов, верно ? Если этими принципами являются "количество подтипов, частота их добавления и общее количество атрибутов", то имхо вполне можно сформулировать какие-то общие подходы, верно ? Не общее количество атрибутов, а количество и соотношение "общих" и "различающихся" атрибутов. В принципе верно, но прямо сейчас я не готов сформулировать разумные четкие рекомендации, поэтому скрываюсь за общим "думать, как будет удобнее". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 14:12 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
softwarer В принципе верно, но прямо сейчас я не готов сформулировать разумные четкие рекомендации, поэтому скрываюсь за общим "думать, как будет удобнее". если вдруг надумаете, то был бы благодарен. А то в литературечетких рекомендаций тоже особо не попадается, разве что за исключением того, что если различающихся аттрибутов мало, то предлагают валить в одну таблицу (Луис Дэвидсон), хотя особых обоснований этого я там не увидел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 14:34 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
Дело в том, что объектный анализ довольно конкретен. Существует объект, у объекта набор атрибутов. Причем все это существует объективно, независимо от наблюдателя. Задача аналитика - выявить эти сущности, исследовать природу объектов. Может быть так, что посчитаете одно, однако окажется что что-то не было учтено. Если поставите конкретную задачу, возможно можно будет что-то сказать. Кто знает, может ваша программа завоюет всю металлургическую промышленность? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 14:45 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
Я бы сказал, в принципе возможны следующие подходы: 1. В одну таблицу, в зависимости от типа те или иные поля не используются. 2. В одну таблицу, в зависимости от типа одни и те же поля имеют разный смысл. 3. Каждый подтип в своей таблице, общие поля повторяются в каждой из таблиц. 4. Каждый подтип в своей таблице, общие поля вынесены в "общую" таблицу. Четких критериев не назову, но общие замечания: Если требуется или может потребоваться ссылаться на "запись любого типа", нужна "общая" таблица, то есть все решения кроме 3 2-е решение в принципе ублюдочно; думать о нем можно тогда, когда много подтипов - десятки и более - у большинства хватает особых атрибутов, поэтому таблица 1-го стиля окажется ну очень широкой, такой, что со списком ее полей будет очень неудобно работать. При этом желательно накрыть такие подтипы view-шками и работать через них Чем больше требуется ссылаться на записи определенного типа, тем больше смысла в решениях 3-4 Чем вероятнее добавление новых типов, тем больше смысла в решениях 1-2 Чем больше доля "общих" полей, тем больше смысла в решениях 1-2 Чем больше "особых" полей, тем больше смысла в решениях 3-4 Чем чаще требуются "общие" операции, скажем "вывести название контрагента независимо от типа", тем больше смысла в решении 4 по сравнению с 3 Наверное, можно и еще придумать, это так, что сходу пришло в голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 14:56 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
2 softwarer К твоей скорости и количеству (в среднем 13 в день! (данные из профиля)) выдачи ответов: Предположим, мы открыли бистро. Какие решения подойдут? У нас имеются пирожные 5 типов и кофе (черный или со сливками) Сливки - это общее - это ублюдочно, поэтому можно применить тип решения 2 Кофе у нас экслюзивный, поэтому свои плюсы имеют решения 3-4. Но поскольку у нас бистро, для среднего посетителя сойдет и посредственный кофе или напиток типа Crash? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2008, 15:22 |
|
||
|
Как правильно проектировать подтипы
|
|||
|---|---|---|---|
|
#18+
softwarerЯ бы сказал, в принципе возможны следующие подходы: 1. В одну таблицу, в зависимости от типа те или иные поля не используются. 2. В одну таблицу, в зависимости от типа одни и те же поля имеют разный смысл. 3. Каждый подтип в своей таблице, общие поля повторяются в каждой из таблиц. 4. Каждый подтип в своей таблице, общие поля вынесены в "общую" таблицу.Остается еще добавить, что есть 5-й подход. А именно: 5. хранение атрибутов на основе модели EAV. Причем, вохможно совмещение подходов 1 и 5, 4 и 5. 3 и 5 - тоже возможно, но крайне неудобно. Использование только модели EAV - должно быть сильно осмысленно и обосновано, потому что при последующем использовании (если это не 20 позиций с 10 атрибутам) - могут возникнуть проблемы с доступом к данным, контролем целостности и производительностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2008, 11:42 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35489885&tid=1543706]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
189ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 522ms |

| 0 / 0 |
