Какова подходящая структура БД моей проблемы? - PullRequest
3 голосов
/ 21 августа 2011

Будет много разных страниц с продуктами.

Данные о продуктах берутся из базы данных (идентификатор, имя, описание ...). Если пользователю нравится продукт, он сможет нажать на кнопку с названием «добавить это», и тогда кнопка будет изменено на "добавлено".

Пользователь может добавить несколько товаров в свой «список пожеланий». Продукт, который он выбрал ранее, будет представлен как «добавлено».

Как новичок, я знаю, что должен быть способ иметь user_id с product_id в строке, когда этот продукт был добавлен.

На данный момент у меня есть таблица products. Я думаю, мне нужно создать другую таблицу, которая будет сохранять user_id с product_id?

Спасибо за ваши идеи, надеясь, что я проясню.

Ответы [ 6 ]

3 голосов
/ 21 августа 2011

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

CREATE TABLE selected_products
(
   choice_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
   user_id INT NOT NULL,
   product_id INT NOT NULL,
   FOREIGN KEY (user_id) REFERENCES users (user_id),
   FOREIGN KEY (product_id) REFERENCES products (product_id)
) ENGINE=InnoDB;

Получать выбор пользователя следующим образом:

SELECT products.product_id, products.description 
FROM products JOIN selected_products ON products.product_id = selected_products.product_id
WHERE user_id = '$someuserid';

Когда пользователь желает удалить продукт из своего выборавам нужно только удалить строку:

DELETE FROM selected_products WHERE user_id = '$someuserid' AND product_id = '$product_id';

Ваша таблица wishlist функционирует точно так же, как ваша таблица selected_products.Та же структура, те же отношения.Вы также можете подумать о добавлении еще одного столбца для указания метки времени, когда продукт был добавлен:

date_added TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
2 голосов
/ 22 августа 2011

enter image description here

Пользователь

id | ...

Список желаний

id | user_id | ...

Список желаемых товаров

wishlist_id | product_id | ...

Продукт

id | ...

Это в основном то, что вы есть в интернет-магазинах, таких как Amazon.User может иметь несколько Wishlists.A Wishlist может содержать много Products, и каждый Product может быть много Wishlists.


Если вы хотите иметь только один Wishlist на User, вы можете перейтиеще проще: enter image description here

Пользователь

id | ...

пожелания

user_id | product_id | ...

Продукт

id | ...
2 голосов
/ 21 августа 2011

Для этого следует использовать справочную таблицу.

Убедитесь, что вы используете InnoDB для своих таблиц, чтобы вы могли использовать реальные внешние ключи

Справочная таблица в основном будет содержать KEYS упомянутых таблици, возможно, некоторые соответствующие метаданные.Простой пример:

CREATE  TABLE `stackoverflow`.`users` (
`id` INT NOT NULL AUTO_INCREMENT ,
`username` VARCHAR(45) NOT NULL ,
`fname` VARCHAR(45) NOT NULL ,
`lname` VARCHAR(45) NOT NULL , 
`cdate` DATETIME NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;

CREATE  TABLE `stackoverflow`.`products` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
`price` INT NOT NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;

Теперь справочная таблица с реальными ФК:

CREATE  TABLE `stackoverflow`.`user_likes_product` (
`id` INT NOT NULL AUTO_INCREMENT ,
`id_user` INT NOT NULL ,
`id_product` INT NOT NULL ,
`time` DATETIME NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_user` (`id_user` ASC) ,
INDEX `fk_product` (`id_product` ASC) ,
CONSTRAINT `fk_user`
FOREIGN KEY (`id_user` )
REFERENCES `stackoverflow`.`users` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_product`
FOREIGN KEY (`id_product` )
REFERENCES `stackoverflow`.`products` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Еще один совет для начала работы с mysql (если вы в Windows): скачайте и используйте Mysql Workbench .

2 голосов
/ 21 августа 2011

1.продукты

id | name | description | ...

2.пользователи

id | name | email | ...

3.списки пожеланий

id | name | ...

4.users_wishlists

user_id | wishlist_id | product_id
2 голосов
/ 21 августа 2011

Я бы сделал это так:

Создайте таблицу с именем user_products добавьте (как минимум) эти столбцы: id (первичный ключ) user_id (внешний ключ к вашей таблице пользователей) product_id (внешний ключ к таблице продуктов)

Вставляйте строку в эту таблицу каждый раз, когда продукт нравится.

2 голосов
/ 21 августа 2011

Таблица пользователей - UserID (+ другая информация о пользователе)

Таблица продуктов - ProdID (+ другая информация о продукте)

Таблица UserFavs - UserID, ProdID (+ другая информация о "faving", например, датасм. ссылку ...)


Я ожидаю, что будут и другие -

Таблица UserWishList - UserID, ProdID (+ другая информация о желаниях)

UserOwned Table- UserID, ProdID (+ другая информация о владельце)


Это дает понять, что у вас может быть одна таблица, которая связывает пользователей с продуктами и описывает это отношение, например

Таблица UserProduct - UserID, ProdID, Relationship (принадлежащий, желаемый, любимый), (+ другая информация об отношениях)

Выполнение этого с одной таблицей - это выбор дизайна, который должен основываться на том, как используется ваша система.Если ваша система связана с отношениями, то одна таблица будет иметь смысл.Если ваша система предназначена для пользователя и «списки» разделены, то отдельные таблицы будут иметь больше смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...