Php 针对过期产品的MySQL表设计

Php 针对过期产品的MySQL表设计,php,mysql,sql,Php,Mysql,Sql,我有一家商店,在那里我销售有期限(用户到期时间)的产品。 我有一个mysql表,供这样的用户使用 | user_id | user_name | user_password | user_email | 另一个是关于产品: | product_id | product_name | product_price | 我正在销售两种产品,所以现在我想知道是否应该在用户表中添加两列,使其看起来像这样 | user_id | user_name | user_password | user_ema

我有一家商店,在那里我销售有期限(用户到期时间)的产品。 我有一个mysql表,供这样的用户使用

| user_id | user_name | user_password | user_email |
另一个是关于产品:

| product_id | product_name | product_price |
我正在销售两种产品,所以现在我想知道是否应该在用户表中添加两列,使其看起来像这样

 | user_id | user_name | user_password | user_email | product_one | product_two |
并在这些字段中输入已购买产品的用户的过期日期(默认情况下,两者都为空), 或者我应该为购买的产品创建一个新表,然后存储相应的
用户id


提前感谢,感谢您的帮助。

第二种选择更像是3NF(第三范式)。我在电子商店(主要是Opencart)方面有一些经验,在我看来,从我已经看到的情况来看,这就是他们的工作方式

事实上,最好再多一个表,其中包含“订单”和“用户Id”,另一个表中包含“订单”和“产品Id”

我既不是数据库专家,也不是电子商店平台专家,但根据我的经验,我会选择第二个

编辑

我正在编辑当前答案以添加示例。因此,您已经有了两个表,一个用于用户(客户),另一个用于产品。这两个表(如前所述)如下所示(我不知道实际的表名,所以我将使用我的表名)

表格“用户”:

| user_id | user_name | user_password | user_email |
| product_id | product_name | product_price |
| order_id | product_id | product_exp_date |
表格“产品”:

| user_id | user_name | user_password | user_email |
| product_id | product_name | product_price |
| order_id | product_id | product_exp_date |
因此,我的建议是引入一个新实体(让我们将该实体命名为“order”),并创建一个表,该表将包含与生成该实体的用户匹配的每个订单。因此,“订单”表将如下所示:

| order_id | user_id |
select u.user_name, u.user_email, p.product_name
  from users u
  left join users_products up on u.user_id = p.user_id
  left join products p  on up.product_id = p.product_id
                       and p.expiration >= NOW()
然后,您将有另一个表,该表将使用产品id匹配每个订单。在此表中,您还可以有“过期时间”字段。该表的样本如下所示:

表格“订单产品”:

| user_id | user_name | user_password | user_email |
| product_id | product_name | product_price |
| order_id | product_id | product_exp_date |
然而,最后一个表有一个缺陷:它没有主键。在这里,您必须有点创造性,导入一个字段以保存主键,例如,
order\u product\u id
,它将保存每个单独订单中每个单独产品的唯一标识符。但你必须找到一种方法来做到这一点


希望这澄清了我的想法。

您想要一个单独的表格,我将为用户命名为\u产品。这将允许您添加产品。它通常更灵活

它将有这些列

 user_id    
 product_id
 expiration
您可以找到用户当前拥有的产品,如下所示:

| order_id | user_id |
select u.user_name, u.user_email, p.product_name
  from users u
  left join users_products up on u.user_id = p.user_id
  left join products p  on up.product_id = p.product_id
                       and p.expiration >= NOW()
users\u products表的主键应该是由所有三列组成的复合键

当您向ID为123的用户销售ID为321的产品(30天后到期)时,您可以使用此查询在数据库中表示该产品

 INSERT INTO users_products
             (user_id, product_id, expiration)
      VALUES ( 123,       321,        NOW() + INTERVAL 30 DAY)

你能给我举个例子吗?