SQLite,如何没有外键的实体关联?

时间:2011-09-27 09:14:24

标签: database sqlite

我试图弄清楚在sqlite下创建没有外键的表的方法。我想避免使用外键,因为它在我现在正在使用的一些应用程序中不兼容。

有人可以用两张桌子来展示一个简单的例子吗?谢谢。

简单示例:如何从一位特定艺术家中选择所有曲目?

CREATE TABLE artist(
  artistid    INTEGER PRIMARY KEY, 
  artistname  TEXT
);

CREATE TABLE track(
  trackid     INTEGER, 
  trackname   TEXT, 
  trackartist INTEGER
);

2 个答案:

答案 0 :(得分:1)

如果您没有指定外键,则没有外键。

SELECT t.trackname, t.trackid
  FROM track t
 INNER JOIN artist a
    ON a.artistid = t.trackartist
 WHERE a.artistname = 'Alex'

答案 1 :(得分:1)

您可以在表之间建立关系而不声明外键。你只需要

SELECT a.*, t.* FROM artist a INNER JOIN track t ON a.artistid = t.trackartist;

(用您想要的实际列代替a.*, t.*)。

您可以在不声明跟踪艺术家是艺术家(artistid)的外键的情况下执行此操作。如果您确实做出了声明,那么区别在于SQLite将确保您永远不会在跟踪艺术家中放置一个不是有效艺术品的值,并且您永远不会更改或删除在跟踪艺术家中使用的artistid。

外键是一种维护表之间关联完整性的机制,但您可以在SELECT语句中“创建”任何关联,而与数据库中声明的任何主键或外键无关。