2011-09-27 92 views
0

我想弄清sqlite中没有外键的情况下创建表的方式。我想避免使用外键,因为它在我现在工作的一些应用程序中不兼容。SQLite,如何实体关联没有外键?

任何人都可以请显示一个简单的例子,也许两个表?谢谢。

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

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

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

回答

1

如果您没有指定外键,那么就没有外键。

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

是的,但如何使表实体之间的关联?为了使调用类似(SELECT 1 FROM artist WHERE artistid = trackartist) – devjs11

+0

@Alex:外键只是约束。没有约束并不意味着你必须改变你的查询。 – Benoit

+0

我对我的帖子进行了更新。我需要做什么查询来选择一个特定艺术家的所有曲目而不使用外键? – devjs11

1

您可以在不声明外键的情况下在表之间建立关系。你根本就

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

(代你代替a.*, t.*要实际列)。

您可以在不声明该trackartist是艺术家(artistid)的外键的情况下执行此操作。如果你做了这个声明,不同之处在于SQLite会确保你永远不会在trackartist中放置一个不是有效的artistid的值,也绝不会改变或移除trackartist中使用的artistid。

外键是一种维护表之间关联完整性的机制,但您可以在独立于数据库中声明的任何主键或外键的情况下“创建”所需的任何关联。