powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Связь одной таблицы с одной из двух других
11 сообщений из 11, страница 1 из 1
Связь одной таблицы с одной из двух других
    #38353924
feddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К примеру: есть таблица "пользователь" и "аноним", а также таблица "заказ". Так вот заказ может сделать либо пользователь, либо аноним. Как лучше осуществить данную связь?
Вижу такие варианты:

1) В таблице "заказ" есть два поля, одно указывает на таблицу "пользователь", другое на таблицу "аноним" в зависимости от того кто осуществил заказ(пользователь либо аноним) в одно поле записываем primary key в другое NULL

2) Создаётся отдельная таблица связей, в которой помимо ключа ещё три поля: ключ таблицы "заказ", ключ таблицы "пользователь", ключ таблицы "аноним". Поле заказ всегда установлено, а пользователь или аноним в зависимости от того кто осуществил заказ.

Как из вариантов лучше применить и правильно ли вобще с точки архитектуры такой подход с двумя таблицами?

П.с.
В данном конкретном случае, лучше сделать таблицу "заказчик" с общими данными для "аноним" и "пользователь" в которой будет поле указывающее пользователь ли это или аноним и таблицу "профиль" в случае если это пользователь там будут хранитсяд анные пользователя. Ну и связи профиль-заказчик 1:1 и заказчик-заказ 1:N. Но всё же интересует в теории, для любых подобных, возникающих ситуаций.
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38353957
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedddВ данном конкретном случае, лучше сделать таблицу "заказчик" с общими данными
для "аноним" и "пользователь"
Вот это и правильно с любой точки зрения, в том числе - теории.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38353998
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы, feddd, задачу не полностью сформулировали. Похожую задачу - рациональную реализацию "лавки - частные лица" обсуждали много раз, - в поиск. С анонимными пользователями всё немного сложнее. Допустимы для одного реального пользователя несколько аккаунтов одновременно? Как вы в этом случае намерены агрегировать данные пользователей? Видите ли, в чём дело: за любым вариантом реализации структуры данных - реальные конкурентные преимущества (или недостатки) бизнес-модели. Если вы пишете одноразовую поделку, подойдет любая реализация из приведённых вами. Если структура данных предполагает развитие (или по крайней мере имеет логические связи с бизнес-моделью), на вашем месте я бы не останавливался ни на одном из приведенных вариантов.
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38354134
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feddd,

Ощущение полного нежелания включить мозг. Вы действительно готовы принимать заказы от анонимов?..
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38355334
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedddК примеру: есть таблица "пользователь" и "аноним", а также таблица "заказ". Так вот заказ может сделать либо пользователь, либо аноним. Как лучше осуществить данную связь?


Через наследование. Связь при этом идёт на общего предка "пользователя" и "анонима".

fedddВижу такие варианты:

1) В таблице "заказ" есть два поля, одно указывает на таблицу "пользователь", другое на таблицу "аноним" в зависимости от того кто осуществил заказ(пользователь либо аноним) в одно поле записываем primary key в другое NULL

2) Создаётся отдельная таблица связей, в которой помимо ключа ещё три поля: ключ таблицы "заказ", ключ таблицы "пользователь", ключ таблицы "аноним". Поле заказ всегда установлено, а пользователь или аноним в зависимости от того кто осуществил заказ.

Как из вариантов лучше применить и правильно ли вобще с точки архитектуры такой подход с двумя таблицами?



Как бы второй вариант -- это вариант первого, N опциональных взаимоисключающих связей, но обобщённый на то, что у заказа может быть много владельцев заказа. Поскольку, как я полагаю, владельцев у заказа всё-таки быть не может больее одного, то
второй вариант неправильный.

Если же вообще о этом варианте, то тут недостаток в том, что то, что связи взаимоисключающие, и то, что одна из них должна обязательно быть, тебе придётся реализовывать логикой приложения (в лучшем случае -- триггерами и процедурами, в худшем -- вне СУБД).


fedddП.с.
В данном конкретном случае, лучше сделать таблицу "заказчик" с общими данными для "аноним" и "пользователь" в которой будет поле указывающее пользователь ли это или аноним и таблицу "профиль" в случае если это пользователь там будут хранитсяд анные пользователя.


Вот это как раз и есть наследование. Только пользователь и его профиль -- это одно и то же.
Важно как кодировать ключи. Ключи должны быть уникальны в одном дереве насделования.
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38356008
Hopkroft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Злой Бобрfeddd,

Ощущение полного нежелания включить мозг. Вы действительно готовы принимать заказы от анонимов?..
Эта фишка есть на многих интернет-магазинах. Типа можно добавлять в корзину всё что хочешь, но когда нужно оформить заказ, то необходима регистрация.
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38356039
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HopkroftЗлой Бобрfeddd,

Ощущение полного нежелания включить мозг. Вы действительно готовы принимать заказы от анонимов?..
Эта фишка есть на многих интернет-магазинах. Типа можно добавлять в корзину всё что хочешь, но когда нужно оформить заказ, то необходима регистрация.Есть интернет-магазины, которые действительно принимают заказы без регистрации. Были, во всяком случае - я в таких покупал.
На самом деле, анонимностью здесь и не пахнет: остается адрес доставки и данные кредитной карты, можно по ним потом анализировать.

Но, конечно, лучше так не делать.
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38356250
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelHopkroftпропущено...

Эта фишка есть на многих интернет-магазинах. Типа можно добавлять в корзину всё что хочешь, но когда нужно оформить заказ, то необходима регистрация.Есть интернет-магазины, которые действительно принимают заказы без регистрации. Были, во всяком случае - я в таких покупал.
На самом деле, анонимностью здесь и не пахнет: остается адрес доставки и данные кредитной карты, можно по ним потом анализировать.

Но, конечно, лучше так не делать.
1. данные кредитной карты попадают в магазин редко - обычно есть какой-нибудь агрегатор типа Cyberplat. Можно пытаться что-то анализировать по телефону (контактный телефон обычно-таки требуется) - но см. ниже

2. Насчет "лучше не делать" - это зависит от бизнеса. Если 95% покупателей делают в мгагазине ровно один заказ (в каком-нибудь магазине холодильников, например) - зачем сдалась обязательная регистрация, какая от нее польза? Если 90% заказов делаются по телефону - зачем сдалась обязательная регистрация, какая от нее польза?
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38356314
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

От таких регистраций очень большая польза - на емейлы можно потом рассылки слать, рекламные. Ну и я не помню уже, как с этим в РФ - может, и есть магазины, которые торгуют исключительно холодильниками, но таких должно быть мало. Кроме того, даже если это только холодильники, кто сказал, что человеку не может через неделю понадобиться второй - на дачу например, или друзья тоже собрались покупать, а тут вот пожалуйста, купон со скидкой. Да миллион ситуаций придумать можно.
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38356482
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelКот Матроскин,

От таких регистраций очень большая польза - на емейлы можно потом рассылки слать, рекламные.

Напоминаю, люди по условию не делают несколько заказов -> им не нужны рассылки, они не работают.
При этом регистрация - это обьективное увеличение времени на первый (он же единственный) заказ, что ведет к обьективным же потерям (растет процент людей, бросивших на полдороги, увеличивается загруженность колл-центра при телефонных заказах, etc.)
В любом случае "нужна регистрация или нет?" - это, очевидно, не технический вопрос.
...
Рейтинг: 0 / 0
Связь одной таблицы с одной из двух других
    #38357727
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelHopkroftпропущено...

Эта фишка есть на многих интернет-магазинах. Типа можно добавлять в корзину всё что хочешь, но когда нужно оформить заказ, то необходима регистрация.Есть интернет-магазины, которые действительно принимают заказы без регистрации. Были, во всяком случае - я в таких покупал.
На самом деле, анонимностью здесь и не пахнет: остается адрес доставки и данные кредитной карты, можно по ним потом анализировать.

Но, конечно, лучше так не делать.

Пляшите "от сессии".
Т.е. не привязывайтесь при оплате к пользователю вообще.
Привязывайтесь к сессии.
Соответственно все транзакции должны "висеть" на сессии.

А авторизованный пользователь просто получит дополнительное удобство - ему не нужно будет вводить некоторые данные по оплате.

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


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