Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 以下哪一种是执行外键的正确方法?_Sql_Database_Database Design_Sqlite - Fatal编程技术网

Sql 以下哪一种是执行外键的正确方法?

Sql 以下哪一种是执行外键的正确方法?,sql,database,database-design,sqlite,Sql,Database,Database Design,Sqlite,所以,我正在尝试sqlite3,我有一个关于外键和索引的问题 以下哪种方法是正确的 CREATE TABLE artist( artistid INTEGER PRIMARY KEY, artistname TEXT ); CREATE TABLE track( trackid INTEGER, trackname TEXT, trackartist INTEGER REFERENCES artist ); CREATE INDEX trackinde

所以,我正在尝试sqlite3,我有一个关于外键和索引的问题

以下哪种方法是正确的

CREATE TABLE artist(
  artistid    INTEGER PRIMARY KEY, 
  artistname  TEXT
);
CREATE TABLE track(
  trackid     INTEGER,
  trackname   TEXT, 
  trackartist INTEGER REFERENCES artist
);
CREATE INDEX trackindex ON track(trackartist);
或者这个:

CREATE TABLE student(
  SudentID INTEGER PRIMARY KEY,
  First TEXT,
  Last,
  Contact Text,
  Year INTEGER)

CREATE TABLE loan(
  StudentID INTEGER,
  ISBN INTEGER,
  out INTEGER,
  FOREIGN KEY(SudentID)
      REFERENCES student(SudentID)
      ON DELETE CASCADE
  PRIMARY KEY(StudentID, ISBN)
)
CREATE INDEX StudentID_Index ON student(StudentID)

我想我找到了解决办法

我正在这样做:

CREATE TABLE users(
    id INTEGER PRIMARY KEY NOT NULL, /* No need for 'autoincrement' keyword */
    username TEXT NOT NULL,
    pwhash TEXT NOT NULL,
    email TEXT,
    created INTEGER NOT NULL
);

CREATE TABLE posts (
    id INTEGER PRIMARY KEY NOT NULL,
    title TEXT NOT NULL,
    description TEXT NOT NULL,
    content TEXT NOT NULL,
    id_user INTEGER NOT NULL,
    FOREIGN KEY (id_user)
        REFERENCES users(id)
        ON DELETE CASCADE
);

CREATE INDEX users_posts ON posts(id_user);

只要它有效,它就是一种风格选择。IMHO在列中对
引用进行内联编码更好,因为这样可以更清楚地显示:

CREATE TABLE users (
    id INTEGER PRIMARY KEY NOT NULL,
    username TEXT NOT NULL,
    pwhash TEXT NOT NULL,
    email TEXT,
    created INTEGER NOT NULL
);

CREATE TABLE posts (
    id INTEGER PRIMARY KEY NOT NULL,
    title TEXT NOT NULL,
    description TEXT NOT NULL,
    content TEXT NOT NULL,
    id_user INTEGER NOT NULL REFERENCES users ON DELETE CASCADE
);

CREATE INDEX posts_id_user ON posts(id_user);
还有。无需对外部表的主键列进行编码-仅引用表就足够了(假定主键)