MySQL数据库加入非唯一索引

时间:2018-02-17 08:59:29

标签: mysql sql indexing

每个用户都有一个可以管理的本地程序

  • cats(name,...)
  • 饲料(含有不同类型的饲料:液体......)
  • 当猫吃了哪种饲料(cat.nr,feed.nr,datetime)时,列出“吃”信息。

我要将这三个表导入MySQL数据库。 然后我想要一个SELECT语句来获取cat.name,feed.name和date

的所有eat-events

问题是每个用户可能已经分配了一个非唯一的cat.nr或feed.nr(其他用户可能使用了相同的nr)。这不是主要索引,但我将其用作外键关系的INDEX,这是推荐的吗?

为了解决这个问题,我在每个表中添加一个userid字段并添加一个用户表本身(持有user.name,user.id) - 如何完成一个SQL语句,为id为1的用户返回所有eat-events例如?

这是一个很好的方法吗?

1 个答案:

答案 0 :(得分:0)

听起来你只需要表上的复合主键。例如,如果列cat_nr对于任何给定的user_id是唯一的(并且user_id可能是唯一的),那么组合它们将为您提供唯一的主键。您也可以通过这种方式连接表格(即在两列上)。

select *
    from eat_event e
    inner join feed f on f.feed_nr = e.feed_nr and f.user_id = e.user_id

完整查询可能类似于:

select e.event_date, e.event_type, u.user_name, c.cat_nr, f.feed_nr
    from eat_event e
    inner join feed f on f.feed_nr = e.feed_nr and f.user_id = e.user_id
    inner join cat c on c.cat_nr = e.cat_nr and f.user_id = e.user_id
    inner join [user] u on u.user_id = e.user_id

我希望这会有所帮助。