Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.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
如何建立android数据库关系,如;有很多属于你的东西;_Android_Android Sqlite - Fatal编程技术网

如何建立android数据库关系,如;有很多属于你的东西;

如何建立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

我有两张安卓的桌子。我创建了所有CRUD操作。但我很难在他们之间建立关系
所以我有一个表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数据库吗?你有一个