2016-09-28 3 views
0

Я создаю базу данных для своего приложения. В котором я хочу сделать сопоставление между несколькими таблицами. Теперь ситуация подобна. Есть одна пользовательская таблица. Пользователь может генерировать несколько заказов. Поэтому я подумал, могу ли я положить json obejct order_id в столбец в таблице заказа. Или я могу создать столбец user_id в таблице заказа & repeat user_id для этого же пользователя. Так что это лучший способ сделать это?Проблема с дизайном базы данных в проекте?

PS: Каков стандартный способ сделать это?

ответ

1

Пользователь может разместить несколько заказов.

Исходя из этого, вы должны поддерживать три различные таблицы, как показано ниже:

  • пользователя (user_id,...)
  • Заказать (order_id,...)
  • UserOrder (user_id,order_id,...)

только первичные ключи в выше таблицы сфокусированы

Сохранение списка разделенных запятыми или объекта json ухудшит дизайн. И это сильно обескураживает.

EDIT:

Как было предложено @NevilleK, выше конструкция, как правило, используется для many-to-many отношений. Для отношения one-to-many вы можете создать ограничение внешнего ключа в таблице orders, где user_id следует ссылаться на user_id в таблице User.

Но все же вы можете принять вышеуказанную конструкцию для связи one-to-many с many-to-many подходит для one-to-many.

+0

Таким образом, я создаю несколько таблиц. Что выгодно – Techiee

+0

На самом деле я не могу сосчитать количество преимуществ. Рассмотрим простой пример использования. Предположим, вы хотите показать «минимальную цену заказа» для каждого пользователя. Как бы вы это сделали в своем предлагаемом проекте? – 1000111

+1

Этот дизайн обычно используется для отношений «многие ко многим» - пользователь может размещать множество заказов, а заказ может иметь много пользователей. Я не считаю, что ситуация - пользователь может разместить много заказов, но заказ принадлежит ровно одному пользователю. Обычно это моделируется наличием внешнего ключа «userID» по заказам. –

1

Вы должны просто user_id в таблице заказа, а затем сделать запросы как

select * from orders where user_id = *some_user_id* 
+0

Но таким образом у меня есть повторное значение user_id в одном столбце для нескольких rows.Is это хороший подход? – Techiee

+0

Это то, как должны работать реляционные базы данных SQL, и работать быстрее всего таким образом ... –

1

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

  1. Создание таблицы пользователя с UserID
  2. Создать таблицу PurchaseOrder с КодЗаказом, UserID и LineItemId
  3. Создать таблицу LINEITEM с КодЗаказом, ProductID и LineItemId
  4. Создать таблицу SKU с ProductID
+0

PurchaseOrder не должен включать LineItemID - это означает, что заказ имеет только на LineItem. –

0

лучше иметь другую таблицу для

  1. стол пользователя - в котором находится информация о пользователе
  2. таблицу транзакций - которые будут Order_ID против каждого user_id.

Таблица транзакций будет содержать всю информацию о транзакции с помощью user_id. Если вы создаете объект JSON, как вы будете сопоставлять USER с транзакцией. Поэтому во время получения json-информации вам все равно придется сопоставить ее с таблицей пользователя. Я предлагаю вам использовать вышеупомянутый метод, который поможет вам значительно упростить и масштабировать приложение.

Смежные вопросы