[identity profile] haviras.livejournal.com posting in [community profile] useful_faq
Вопрос опять наверное не по адресу.

Но вобщем у меня такая ситуация:

Надо написать СУБД. С этим проблем нету как бы.
Я не могу представить как хранить клиентские заказы.

Имею таблицу клиенты (имя, адрес, глобальная сумма заказа и прочее)
Имею таблицу типы заказов (список возможных услуг)

Не могу придумать в своей светлой голове такую вещь, как возможность нескольких заказов одним клиентом. Как мне эту вещь хранить и как это на SQL записать (синтаксис) .


БД -MySQL
Вебсервер: Apache
Язык субд: php

UPD: вопрос закрыт. Йа креведко

Date: 2007-12-29 05:40 pm (UTC)
From: [identity profile] hcjack.livejournal.com
Если вы не представляете - может стоит сначала научится этому, и не заниматься теми вещами в которых не разбираетесь?

Вам нужна еще одна таблица в которую будет записываться ID заказа, ID клиента, тип заказа, ну и какая нить сопутствующая информация если нужно (дата/время например).

Date: 2007-12-29 05:46 pm (UTC)
From: [identity profile] hcjack.livejournal.com
Честно говоря ваши знания у меня вызывают сомнения :)
У меня в книге "PHP для ламеров" подобная схема описана в первых главах :)
Военного тут абсолютно ничего нет.

Date: 2007-12-29 05:53 pm (UTC)
From: [identity profile] hcjack.livejournal.com
левые отмазки :)
такие вещи у программеров отскакивают от зубов в любом состоянии

Date: 2007-12-29 07:05 pm (UTC)
From: [identity profile] homa.livejournal.com
Хехе, это верно. Я свой коммент как раз в таком состоянии и писал. И ничего.

Date: 2007-12-29 08:48 pm (UTC)
From: [identity profile] homa.livejournal.com
С этим мы уже определились. Не секрет, а зачем тогда вы полезли на эти галеры? :)

Date: 2007-12-29 09:05 pm (UTC)
From: [identity profile] homa.livejournal.com
Что ж, с этим мы тоже определились.

Вы неправы.

Date: 2007-12-29 09:14 pm (UTC)
From: [identity profile] homa.livejournal.com
В отношении к своей фирме и к участникам этого сообщества.

Вы оказываете медвежью услугу своей фирме, пытаясь сделать то, в чем не разбираетесь.

Вы оказываете неуважение участникам сообщества, пытаясь переложить на них работу и ответственность, которую зачем-то взяли на себя.

В общем, оставим эту тему.

Date: 2007-12-29 07:41 pm (UTC)
From: [identity profile] guest-o.livejournal.com
Уже исходя из терминологии: "я умею писать БД" -- возникает ряд сомнений по этому поводу...

Date: 2007-12-29 05:41 pm (UTC)
From: [identity profile] antropovalexey.livejournal.com
обожемой

Date: 2007-12-29 05:47 pm (UTC)
From: [identity profile] homa.livejournal.com
Таблица Clients: ID, Name, Address, TotalAmount.
Таблица OrderTypes: ID, Title.
Таблица Orders: ID, ClientID, TypeID, Amount, Date...

В первой таблице хранятся данные по клиентам (сводные).

Во второй — типы заказов.

В третьей — конкретные заказы конкретных клиентов (ClientID) конкретного типа (TypeID). На каждого клиента может в этой третьей таблице иметься произвольное число записей, в чем траблема?

Добавление заказа:

insert into orders (ClientID, TypeID, Amount, Date)
values (10, 9, 500.00, '2007-12-29')

Вот в таком ключе. В данном случае 10 — это некий клиент из таблицы Clients, а 9 — это некий тип заказа. Заказ на сумму $500 зарегистрирован сегодня.

Date: 2007-12-29 08:34 pm (UTC)
From: [identity profile] homa.livejournal.com
Таблица Clients и таблица Orders в данном случае и находятся в отношении один ко многим. Каждой записи в таблице Orders соответствует одна запись в таблице Clients, но одной записи в таблице Clients может соответствовать ноль, одна или несколько записей в таблице Orders.

Date: 2007-12-29 08:46 pm (UTC)
From: [identity profile] homa.livejournal.com
Другими словами, вас интересовал дурацкий ответ :) Это не таблица для связи двух других. Судя по всему, это и есть основная таблица вашей базы данных, а две другие - лукап-таблицы, содержащие повторяющиеся и сводные данные.

Re

Date: 2007-12-29 05:50 pm (UTC)
From: [identity profile] granite-golem.livejournal.com
Самое простое решение - таблица заказов клиентом. Актуальных заказов, не типов. В одном поле - идентификатор заказа (primary key), в другом поле - ID клиента, в третьем - тип заказа.

Re

Date: 2007-12-29 05:51 pm (UTC)
From: [identity profile] granite-golem.livejournal.com
Ну я и не сомневался, что все подумают так же.

Date: 2007-12-29 06:51 pm (UTC)
From: [identity profile] meanab.livejournal.com
Надо написать СУБД. С этим проблем нету как бы.

Это очень круто. То есть, вообще, люди, способные написать в одиночку СУБД (http://ru.wikipedia.org/wiki/%D0%A1%D0%A3%D0%91%D0%94) вызывают огромное уважение, но такие попадались. А вот такие, для кого это еще и «не проблема» — это очень-очень круто.

Date: 2007-12-29 07:33 pm (UTC)
From: [identity profile] meanab.livejournal.com
Не берите в голову, это просто придирка к словам. «Написать СУБД» означает написать нечто из ряда продуктов таких, к примеру, фирм, как Sybase, Oracle и т.д. (если говорить о реляционных СУБД). «Написать БД» — вообще бессмысленное выражение. Можно разработать структуру БД из пяти таблиц, можно написать программу, использующую БД из пяти таблиц.

Date: 2007-12-29 08:12 pm (UTC)
From: [identity profile] meanab.livejournal.com
А что именно они подразумевают, когда так говорят?

Date: 2007-12-29 08:37 pm (UTC)
From: [identity profile] meanab.livejournal.com
Ага, понятно, спасибо.

Date: 2007-12-29 09:25 pm (UTC)
From: [identity profile] meanab.livejournal.com
Все же, наверное не стоит так говорить. Так, как вы написали в пояснении — намного лучше, хотя тоже есть нюансы. Так, от выражения «привязка к гую» у меня создается впечатление, что «гуй» уже существует, и нужно только написать слой, который будет заниматься сохранением/восстановлением из реляционной базы, возможно, этакий небольшой object-relational mapper.

Но никогда — умоляю! — не используйте выражение «написать СУБД». У этого выражения есть только один смысл, тот, который подразумевает вопросы типа «реляционную, объектную или что-то более экзотическое?»

Date: 2007-12-29 08:44 pm (UTC)
From: [identity profile] homa.livejournal.com
Именно проектирование. Замечание по поводу выбора термина было пустяковым, конечно, но вполне справедливым. А насчет привязки к гую (господи, ну и выражение!), так это как раз совершенно другая задача, никаким местом к формату данных и структуре базы отношения не имеющая. Можно более-менее механически создать интерфейс, следуя структуре базы. Можно более-менее механически повторить логику интерфейса в структуре базы. А можно и вообще их независимо создавать, хотя при этом система получится нелогичной и потенциально проблемной. Лучше всего продумывать структурную и интерфейсную составляющую системы заранее, в целом, комплексно.