外键 - id或只是UNIQUE列

时间:2015-10-18 07:13:54

标签: mysql sql

假设我有一个包含以下列的表:

CREATE TABLE users
{
  id INTEGER PRIMARY KEY,
  login VARCHAR(50) UNIQUE,
  password VARCHAR(50)
}

我需要创建一个表格,为每个帐户存储一个cookie。还有什么更好的 - 创建引用第一个表中login列的外键

CREATE TABLE cookies
{
  id INTEGER PRIMARY KEY,
  cookie VARCHAR(50),
  login VARCHAR(50) FOREIGN KEY REFERENCES users(login)
}

或创建引用id列的外键?

CREATE TABLE cookies
{
  id INTEGER PRIMARY KEY,
  cookie VARCHAR(50),
  expires DATETIME,
  id_user INTEGER FOREIGN KEY REFERENCES users(id)
}

为什么?

3 个答案:

答案 0 :(得分:3)

好的,因为你在cookie表中有几列,因为这是一个单独的实体,我同意并且在单独的表中使用这些额外的列是有意义的。 pks和fks怎么样?由于每个用户只有一行,我会同时userid primary keyforeign key

cookies
{
  id_user(pk, fk), 
  cookie,
  expires
}

答案 1 :(得分:1)

CREATE TABLE cookies
{
  id INTEGER PRIMARY KEY,
  cookie VARCHAR(50),
  login VARCHAR(50) FOREIGN KEY REFERENCES users(login)
}

我认为这是更好的选择,因为您需要与login进行沟通。

答案 2 :(得分:1)

使用与users表的主键相关的外键:

create a foreign key that refers to the id column?

CREATE TABLE cookies
(
    id INTEGER PRIMARY KEY,
    cookie VARCHAR(50),
    expires DATETIME,
    user_id INTEGER,
    FOREIGN KEY (user_id) REFERENCES users(id)
)

作为一般约定执行此操作的原因是users(id)主键是不可变值。登录'表示数据库外部对象的元数据的列或任何其他数据可能会随时间而变化,因此不太适合在外键引用中使用。