2015-03-17 1 views
2

У меня есть заказ, и каждый заказ имеет некоторый продукт, связанный с ним. Я хочу сохранить имя, цену и краткое описание для каждого продукта.Плохой дизайн для использования данных json_encode вместо создания новой таблицы?

Я знаю, что обычный подход создает две таблицы, orders и products, но Что делать, если мне не нужно запрашивать продукты специально? Достаточно ли json_encode продуктов на объекте заказа с PHP и сохранить его как столбец таблицы orders в mysql?

+0

Представьте, хотите ли вы запросить продукты в будущем .... – NaN

+1

Как люди размещают заказы, если они не видят продукт? –

+3

Для РСУБД (которая предназначена для обработки информации) единственным случаем, когда это действительно «не плохо», является то, что это * действительно непрозрачные данные * (думайте о содержимом двоичного файла) - то есть будет * никогда * искать, * никогда * быть частично обновленным/читать, * никогда * участвовать в каких-либо отношениях. Он существует просто как непрозрачный блок данных (а не информация). В этом конкретном случае, поскольку эти «никогда» - это то, что желательно, «плохо» - например. вы * хотите * отношения DRI, вы * хотите *, чтобы иметь возможность запрашивать. Так что правильно используйте RDBMs и двигайтесь дальше. – user2864740

ответ

1

Если данные последовательно структурированы (что звучит так, как есть), вы должны создать таблицу.

JSON или другие последовательные форматы хороши для данных, которые несовместимы.

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


Используйте случай, когда JSON будет полезно:

Допустим, вы отслеживали поток событий, который имел информацию о событиях до проверки. Возможно, вы захотите сохранить данные, которые не сохраняются последовательно. В таблице orders можно сохранить следующее:

{ 
    type: "page_visited", 
    data: { 
     url: "/example/1", 
     title: "Example Page" 
    } 
}, 
{ 
    type: "added_to_cart", 
    data: { 
     product_id: 4, 
     product_name: "Example Product" 
    } 
}, 
{ 
    type: "removed_from_cart", 
    data: { 
     product_id: 4, 
     product_name: "Example Product" 
    } 
} 
-3

Как вы заявляете, что вам «не нужно запрашивать продукт», вы могли бы serialize() ваши данные и unserialize() его читать, это довольно распространенное использование и совершенно правильная практика. Это не будет JSON, но вы можете легко преобразовать его в JSON после unserialize().

+0

Это просто альтернатива json-encoding, но это не вопрос, который он задает. Он спрашивает, имеет ли смысл сериализовать данные и хранить их в одном столбце, а не хранить его на второй таблице. – DesignerGuy

+0

На самом деле он спрашивает, может ли он хранить данные в простом формате строки JSON, который он мог бы, если бы захотел, тоже. Я не понимаю, почему нет, если эти данные являются статическими и никогда не изменятся. Правильно? –

+0

Конечно, он мог. Он специально сказал: «Это плохой дизайн», хотя и указывает, что он спрашивает, является ли это лучшей практикой, а не если это возможно. – DesignerGuy