|
|
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинuser7320Да, я об этом и подумал. Теперь у меня так, как ниже. Кто что скажет? Я это с самого начала и посоветовал. В этой новой схеме что Вам мешает сделать PK в Car, а внешние ключи в дочерних таблицах? А можно эти внешние ключи в дочерных таблицах сделать первичными ключами в этих дочерних и одновременно идентификаторами? Чтобы не заводить отдельный столбец для FK в каждой дочерней таблице. Т. е. получится, что Car.Id будет совпадать с соответствующим SportCar.Id. Т. е. примерно так: Car IdPriceCarType9991 000 000SportCar1001500 000FamilyCar SportCar IdMaxSpeed999300 км/ч FamilyCar IdFuelRate10011л/10км Или какие-то подвохи могут быть? Вообще, меня удивляет, что нет какого-то стандартного решения на такую задачу. По идее, такая задача - у каждого первого магазина или склада товаров. Почему ворох решений без явного варианта-лидера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 19:56 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
user7320По идее, такая задача - у каждого первого магазина или склада товаров Нет, ни у магазинов, ни тем более у склада такой задачи нет. С теми задачами, которые у них есть справляется EAV. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 19:58 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
авторА можно эти внешние ключи в дочерных таблицах сделать первичными ключами в этих дочерних и одновременно идентификаторами? Чтобы не заводить отдельный столбец для FK в каждой дочерней таблице. Т. е. получится, что Car.Id будет совпадать с соответствующим SportCar.Id. Т. е. примерно так: Ну и получается, что стоит сделать ещё один шажок и решение вырождается в то, что Dimitry Sibiryakov предложил - всё в одной таблице. Ну, плюс ссылка на таблицу CarType. Я вижу минус в варианте Dimitry Sibiryakov в том, что придётся городить больше логики в редакторе, чтобы скрыть от юзера кучу пустых полей для разных типов машин. Плюс в том, что не надо делать новую таблицу при появлении нового типа машин. Минус - что придётся добавлять новые столбцы при появлении новых параметров. У Mr.Fontaine , вроде, в редакторе меньше логики, но более сложные (и долгие) запросы к БД. Тот же плюс, что и у Dimitry Sibiryakov - не надо городить новых таблиц при появлении нового типа машин. И нету минуса при появлении новых параметров - т. е. не надо вставлять новые столбцы в таблицы, а обойтись всего лишь новыми записями. Мой вариант, улучшенный Котом Матроскиным, позволяет наглядно создать наследование и тем самым улучшить восприятие, но кроме как для самого программиста это никаких плюсов не даст. Надо создавать новые таблицы при появлении новых типов машин. Надо добавлять столбца при появлении новых параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 20:06 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovuser7320По идее, такая задача - у каждого первого магазина или склада товаров Нет, ни у магазинов, ни тем более у склада такой задачи нет. С теми задачами, которые у них есть справляется EAV. Я прочитал в статье в Википедии про EAV про разрежённую матрицу - вы, по сути, это и предлагаете. Т. е. все сущности и их данные в одной таблице, где большинство значений - пустые места, т. к. данные для записи, относящейся к какой-нибудь одной сущности, занимают далеко не все столбцы. Может ли считаться в этой модели минусом то, что придётся добавлять столбцы при добавлении типа машин или параметров машин? В варианте Mr.Fontaine, например, столбцов добавлять не надо. Что вы про его вариант думаете, кстати? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 20:13 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
user7320Мой вариант, улучшенный Котом Матроскиным, позволяет наглядно создать наследование и тем самым улучшить восприятие Он не позволяет одним запросом вывести полный список автомобилей с характеристиками. Точнее, вывести-то можно, но запрос получится монстровитый и тормозной. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 20:14 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
user7320Я прочитал в статье в Википедии про EAV про разрежённую матрицу - вы, по сути, это и предлагаете. Да, я предлагаю разреженную матрицу, поскольку с EAV ты не справишься - там нужны определённым образом заточенные мозг и руки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 20:16 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovuser7320Я прочитал в статье в Википедии про EAV про разрежённую матрицу - вы, по сути, это и предлагаете. Да, я предлагаю разреженную матрицу, поскольку с EAV ты не справишься - там нужны определённым образом заточенные мозг и руки. Ну а что вы всё же скажете про вариант Mr.Fontaine ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 20:26 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
user7320Ну а что вы всё же скажете про вариант Mr.Fontaine Этот вариант и есть EAV, но, поскольку ты его не опознал, см.выше. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 20:31 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
user7320Ещё проблема в том, что надо будет выводить автомобили по типу и для каждого типа - только актуальные для этого типа данные. Т. е. нельзя, например, вывести прочерк в грузоподъёмности для спортивного автомобиля. Это наше фсе. Так и продолжайте пока с облегчением забросив запросы на процедурах все начнете делать. Любой автомобиль в мире обладает одним и тем же набором параметров и т.н. спортивные не исключения. Вы не изучили вопрос, сами придумали что-то и считаете будто так и есть. Спорткары, или правильно фраеркары обладают грузоподьемностью точно так же, как и прочие кары. С той лишь разницей что у грузовика это измеряется в тоннах, а у фраеркара в литрах объема багажника как и для всех прочих легковых автомобилей. Но не потому что таковы особенности каров, а потому что таковы особенности маркетинга. Обывателю не интересно сколько кг он может увезти, ему интересно сколько влезет барахла. Поэтому измерять грузоподъемность можно и в чемоданах http://www.lakelandgear.com/car-top-carrier-bags/car-top-carrier-capacity-guide.html Что касается проектирования такой табли, я даже не не могу представить какие тут могут быть вообще проблемы. Типичнее же некуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 20:39 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
user7320Ещё проблема в том, что надо будет выводить автомобили по типу и для каждого типа - только актуальные для этого типа данные. Т. е. нельзя, например, вывести прочерк в грузоподъёмности для спортивного автомобиля. Ну так и есть. Это не техническая задача, а маркетинговая. И конечно БД должна быть не автомобилецентрическая, а водителетакаяже. Что усугубляет. Например тип водителя "Блондинка" может оказаться с единственным отношением к таблице Цвет машины и полю "розовый". Другими словами вам потребуется куча справочников под каждую характеристику (которые вы сейчас типа сгрупировали по совокупности опций в спорткары, семкары и прочие кары) типа: Цвет, Размер колес, Объем багажника, Грузоподъемность, Сколько мешков картошки можно увезти, Тип трансмиссии, Тип тормозов, Набор свистелок и перделок и так далее и конца края не видно. Затем в таблице "тип водителя" которая состоит из полей код водителя - код характеристики все сводится, а сам тип водителя назван в еще одном справочнике из полей код водителя - описание типа водителя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 22:15 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Про указатель на таблицу забыл. Поскольку у них нет id то придется тупо повторять названия справочников, но тогда и нет смысла связываться со связыванием. Непосредственно в таблю валится наименование характеристики и ее параметры Тогда содержание таблицы тип водителя будет примерно таким 1 Цвет Розовый 1 Объем багажника 110 л 1 Скорость 90 км/час 1 Разгон 10 сек 2 .. 2 .. 2 3 3 4 .. единственное отношение это код водителя слева на таблицу с характеристикой водителей типа 1 - блондинка, 2 - семейный, 3 - холостой 4 - рабочий, 5 - фраер и тд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 22:28 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Дебилоггера понесло. (почти с) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 22:32 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Mr.FontaineВ общем достаточно таблиц Машины(id, name, id_type) Типы машин (id, name) Параметры (id, name) Список параметров по типам машин (id_type, id_parameter, is_main) Характеристики машин (id_car, id_parameter, value) Если так необходимо иметь парметиры разных типов, то сделай в таблице параметров поле type_value А таблицу характиристик машин разбей на требуемое количество типов: Строковые характеристики машин, Числовые характеристики машин, Бинарные характеристики машин и т.д. Я так понимаю, что у таблиц связей ("Список параметров по типам машин", "Характеристики машин") поле идентификатора не обязательно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 10:42 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, я понял как делать и составил схему БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 11:32 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
авторКаскадные удаления - это вообще большой экстрим, который в реальной жизни встречается крайне редко. В норме ограничения выглядят как "не дать удалить родителя, если есть дети", "не дать вставить/обновить ребенка, если нет родителя". И у Вас это можно сделать только триггерами. Т. е. если я хочу удалить все продукты определённого типа, то вместо того, чтобы удалить тип продукта и каскадно автоматически удалить все продукты этого типа, я должен сначала удалить все продукты этого типа, а потом - этот тип? И сделать триггер, который не даст удалить тип продукта, пока есть хоть один продукт этого типа? Так правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 12:12 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
user7320авторя вот чё понять не могу.... Почему у каждого параметра будет свой тип данных? Пример больше задание, а не реальная ситуация, где можно сгладить острые углы. Поэтому нужно делать так, как сказали. авторМашины(id, name, id_type) Типы машин (id, name) Параметры (id, name) Список параметров по типам машин (id_type, id_parameter, is_main) Характеристики машин (id_car, id_parameter, value) Я так понимаю, что при добавлении нового типа машин (и новых параметров) у вас новых таблиц добавлять не надо. Да, это лучше, чем мой вариант. Подумаю над этим. MasterZiv, скажите, как вам пример Mr.Fontaine? Тут и наследование не нужно, и добавление новых типов машин без добавления таблиц выходит. Это Eav, тоже можно, но простое наследование таблиц — более простой и прямой вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 13:23 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
MasterZivMasterZiv, скажите, как вам пример Mr.Fontaine? Тут и наследование не нужно, и добавление новых типов машин без добавления таблиц выходит. Это Eav, тоже можно, но простое наследование таблиц — более простой и прямой вариант.[/quot] Я использовал и то, и другое. В частности, общие поля я вынес в родительскую таблицу, а частные - в потомковые. А EAV, я использовал для той сложной штуки, где надо было сделать отношения между типами машин, собственно машинами, параметрами и главными параметрами, да ещё с разным типом данных. Это упрощённый пример. На самом деле у меня задача немного посложнее, поэтому там нашлось место и наследованию, и EAV. Надеюсь, это не является плохой практикой - смешивать разные способы организации данных в одной БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2013, 19:42 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Это Eav, тоже можно, но простое наследование таблиц — более простой и прямой вариант. Я как бы не дописал -- EAV нужен, если требуется, чтобы пользователь мог добавлять новые атрибуты и классы. Инчее смысла его применять нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 11:40 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Mr.FontaineВ общем достаточно таблиц Машины(id, name, id_type) Типы машин (id, name) Параметры (id, name) Список параметров по типам машин (id_type, id_parameter, is_main) Характеристики машин (id_car, id_parameter, value) Если так необходимо иметь парметиры разных типов, то сделай в таблице параметров поле type_value А таблицу характиристик машин разбей на требуемое количество типов: Строковые характеристики машин, Числовые характеристики машин, Бинарные характеристики машин и т.д. Я вот по последнему не понял, когда нужны разные типы параметров. Как лучше сделать? В таблице числовых характеристик завести столбцы типа stringValue, integerValue, floatValue и т. п. - "разрежённая матрица"? Или лучше на каждый тип значения свою таблицу? Или ещё как-то? Может, сделать все параметры строками, даже числа, а потом поддерживать систему конвертации этих строк в соответствующие числа по типу параметра? Как-то слишком наворочено выглядит. Как обычно делают, когда надо параметры разных типов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 09:14 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
user7320, я подразумевал "разряжённую матрицу" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 11:04 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
user7320 Я придумал так, как на картинке во вложении. Проблема в том, что я сомневаюсь в правильности того, что один внешний ключ в таблице Car может сослаться на несколько первичных в разных таблицах. Также я не знаю, какие лучше правила обновления-удаления к таким отношениям приложить - каскадные, может, не стоит? Но по-другому лучше не могу придумать, как сделать. Посоветуйте, пожалуйста, какой лучше вариант организации таблиц для такой задачи сделать. Придумал ты почти правильно. Но ссылаться должен не Car (родительская таблица) на дочерние, а наоборот, СпортивнаяМашина, ГрузоваяМашина и т.д. должны по FK ссылаться на Car . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 09:19 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин Каскадные удаления - это вообще большой экстрим, который в реальной жизни встречается крайне редко.Если время жизни сущности и связанной с ней совпадает, почему не сделать каскадное удаление? Например, удаляем фактуру, и все её строки сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 18:00 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
ГхостикНапример, удаляем фактуру Да, да, вот так берём и уничтожаем документ строгой отчётности... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 18:02 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
Ну, насчёт правил удаления это с опытом приходит. Где-то надо каскадно, где-то лучше наллы установить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 18:35 |
|
||
|
Один внешний ключ и множество первичных в разных таблицах?
|
|||
|---|---|---|---|
|
#18+
ГхостикКот Матроскин Каскадные удаления - это вообще большой экстрим, который в реальной жизни встречается крайне редко.Если время жизни сущности и связанной с ней совпадает, почему не сделать каскадное удаление? Потому что контроля меньше. Если разработчик хочет удалить фактуру со всеми элементами - пусть укажет это явно. Гораздо лучше получить ошибку constraint-а (потому что разработчик забыл явно удалить все подчиненные элементы), чем молча ошибочно удалить бизнес сущность (потому что разработчик забыл проверить, есть ли у сущности дочерние элементы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2013, 18:43 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38346287&tid=1541126]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 523ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...