如何建立android数据库关系,如;有很多属于你的东西;
我有两张安卓的桌子。我创建了所有CRUD操作。但我很难在他们之间建立关系如何建立android数据库关系,如;有很多属于你的东西;,android,android-sqlite,Android,Android Sqlite,我有两张安卓的桌子。我创建了所有CRUD操作。但我很难在他们之间建立关系 所以我有一个表Recepit,它将有许多日志(来自表日志)。 如果我创建Recepit1,并且它有13个日志,那么我将在listview中显示Recepit1,并在项目上单击它,它必须显示这13个日志下面是我创建日志和Recepit的方法 String CREATE_LOGS_TABLE = "CREATE TABLE " + TABLE_LOGS + " (" + KEY_ID + " I
所以我有一个表Recepit,它将有许多日志(来自表日志)。
如果我创建Recepit1,并且它有13个日志,那么我将在listview中显示Recepit1,并在项目上单击它,它必须显示这13个日志
下面是我创建日志和Recepit的方法
String CREATE_LOGS_TABLE = "CREATE TABLE " + TABLE_LOGS + " (" +
KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
KEY_CREATED_AT + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP,"+
KEY_PLATENUMBER + " TEXT, " +
KEY_SORT + " TEXT, "+
KEY_GRADE+ " TEXT, "+
KEY_DIAMETER + " INTEGER, " +
KEY_LENGTH + " INTEGER);";
String CREATE_RECEPITES_TABLE = "CREATE TABLE " + TABLE_RECEPIT + " (" +
RECEPIT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
RECEPIT_PLACE + " TEXT, " + RECEPIT_SHIPPING + " TEXT, " +
RECEPIT_WAREHOUSE + " TEXT, " + RECEPIT_CARRIER + " TEXT, " +
RECEPIT_LICENCE + " TEXT, " + RECEPIT_DRIVER + " TEXT, " +
RECEPIT_CUSTOMER + " TEXT, " + RECEPIT_DEST_WAREHOUSE + " TEXT, " +
RECEPIT_EMPLOYEE + " TEXT, " +
RECEPIT_CREATED_AT + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP);";
问题:如何设置表Recepit有许多日志的关系?您可以创建另一个表来维护多对多关系:)这就是您在RDBMS中维护多对多或多对多关系的方式 正如你所说,有两张桌子。日志和2.receipt,它们都有主键:) 现在创建一个名为example:LOGS\u beliens\u TO\u receipt的表。 此表将有两列。col1:LogsID和col2:ReciptID。这两个表分别是Logs表和Recipt表的外键引用:) 我的意思是col1:LogsID引用Logs表主键。 col2:ReciptID引用接收表主键 因此,每当您为特定接收输入新日志时,您都会在此处输入:) 像日志一样,你属于你接受
RecieptID LogsID
1 L1
1 L2
1 L3
2 L4
2 L5
因此,您可以从receipts表中查询所有收据,并在其列表视图中显示它。当用户点击列表时,从logs_Attributes_TO_Receipt中获取与其关联的所有日志id,然后从logs表中查询所有日志并显示:)
干净简单但有效:)不是吗:)
编辑:
好的,这里有一个查询,您可以尝试:)编辑您自己的查询,粘贴在注释中
public static final String KEY_ID = "id"; //my logs id
public static final String RECEPIT_ID = "id"; //recepit id
CREATE_LOGS_BELONGS_TO_RECEPIT_TABLE = "CREATE TABLE " + TABLE_LOGS_BELONGS_TO_RECEPIT + " (" + RECEPIT_ID + " INTEGER, " + KEY_ID + " INTEGER, FOREIGN KEY("+ RECEPIT_ID +") REFERENCES "+ TABLE_RECEPIT +"("+ RECEPIT_ID +"), FOREIGN KEY("+ KEY_ID +") REFERENCES "+ TABLE_LOGS +"("+ KEY_ID +"));"
此表不需要任何主键:)
编辑
额外要点:)
如果您想获取与recipt相关的所有日志,您可以编写如下查询
Select * from TABLE_LOGS where KEY_ID IN (select KEY_ID from LOGS_BELONGS_TO_RECEPIT_TABLE where RECEPIT_ID = 'whatever user tapped');
Happy coding buddy:)您可以创建另一个表来维护多对多关系:)这就是您在RDBMS中维护多对多或多对多关系的方式 正如你所说,有两张桌子。日志和2.receipt,它们都有主键:) 现在创建一个名为example:LOGS\u beliens\u TO\u receipt的表。 此表将有两列。col1:LogsID和col2:ReciptID。这两个表分别是Logs表和Recipt表的外键引用:) 我的意思是col1:LogsID引用Logs表主键。 col2:ReciptID引用接收表主键 因此,每当您为特定接收输入新日志时,您都会在此处输入:) 像日志一样,你属于你接受
RecieptID LogsID
1 L1
1 L2
1 L3
2 L4
2 L5
因此,您可以从receipts表中查询所有收据,并在其列表视图中显示它。当用户点击列表时,从logs_Attributes_TO_Receipt中获取与其关联的所有日志id,然后从logs表中查询所有日志并显示:)
干净简单但有效:)不是吗:)
编辑:
好的,这里有一个查询,您可以尝试:)编辑您自己的查询,粘贴在注释中
public static final String KEY_ID = "id"; //my logs id
public static final String RECEPIT_ID = "id"; //recepit id
CREATE_LOGS_BELONGS_TO_RECEPIT_TABLE = "CREATE TABLE " + TABLE_LOGS_BELONGS_TO_RECEPIT + " (" + RECEPIT_ID + " INTEGER, " + KEY_ID + " INTEGER, FOREIGN KEY("+ RECEPIT_ID +") REFERENCES "+ TABLE_RECEPIT +"("+ RECEPIT_ID +"), FOREIGN KEY("+ KEY_ID +") REFERENCES "+ TABLE_LOGS +"("+ KEY_ID +"));"
此表不需要任何主键:)
编辑
额外要点:)
如果您想获取与recipt相关的所有日志,您可以编写如下查询
Select * from TABLE_LOGS where KEY_ID IN (select KEY_ID from LOGS_BELONGS_TO_RECEPIT_TABLE where RECEPIT_ID = 'whatever user tapped');
Happy coding buddy:)我不确定您在java中是否有什么特别之处,但是,纯粹在mysql中,您可以这样做: 如果两个表之间有1-n关系:
您基本上需要在两个表中的一个表中添加一个。此外键是将“指向”另一个表的列。
始终使用有N行的表指向有1行的表,最好使用唯一字段来创建外键。
Mysql有一个很好的例子
CREATE TABLE person (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE shirt (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
PRIMARY KEY (id)
);
您可以看到,在表shirt
中,owner
列是对表person
中id
的引用,id
是一个主键,因此是唯一的
在您的示例中,应该是TABLE\u LOGS
指向TABLE\u RECEPIT
。
然后,您可以使用一个简单的连接来知道哪些日志属于哪个recepit
SELECT table_logs.*, table_recepit.id as belongs_to
FROM table_logs LEFT JOIN table_recepit
ON (table_logs.recepit_id = table_recepit.id);
要获取一个recepit有多少日志,可以使用
如果您有n-n关系:
在您的示例中,这意味着一个日志可以属于多个recepit
,一个recepit可以有多个日志。
在这种情况下,您必须创建一个关系表来记录表的关系。
此表如下所示:
CREATE TABLE recepit_to_logs (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
recepit_id INT UNSIGNED NOT NULL REFERENCES table_recepit(id),
logs_id INT UNSIGNED NOT NULL REFERENCES table_logs(id),
PRIMARY KEY (id)
);
希望能有所帮助:)我不确定您在java中是否有什么特别之处可以做到这一点,但是,纯粹在mysql中,以下是您可以做到的:
如果两个表之间有1-n关系:
您基本上需要在两个表中的一个表中添加一个。此外键是将“指向”另一个表的列。
始终使用有N行的表指向有1行的表,最好使用唯一字段来创建外键。
Mysql有一个很好的例子
CREATE TABLE person (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE shirt (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
PRIMARY KEY (id)
);
您可以看到,在表shirt
中,owner
列是对表person
中id
的引用,id
是一个主键,因此是唯一的
在您的示例中,应该是TABLE\u LOGS
指向TABLE\u RECEPIT
。
然后,您可以使用一个简单的连接来知道哪些日志属于哪个recepit
SELECT table_logs.*, table_recepit.id as belongs_to
FROM table_logs LEFT JOIN table_recepit
ON (table_logs.recepit_id = table_recepit.id);
要获取一个recepit有多少日志,可以使用
如果您有n-n关系:
在您的示例中,这意味着一个日志可以属于多个recepit
,一个recepit可以有多个日志。
在这种情况下,您必须创建一个关系表来记录表的关系。
此表如下所示:
CREATE TABLE recepit_to_logs (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
recepit_id INT UNSIGNED NOT NULL REFERENCES table_recepit(id),
logs_id INT UNSIGNED NOT NULL REFERENCES table_logs(id),
PRIMARY KEY (id)
);
希望有帮助:)你有一个在android上运行的MySQL数据库吗?你有一个