Связь один ко многим в Dart
Связь один ко многим означает: одна строка родителя
может иметь много дочерних, а каждая дочерняя
указывает ровно на одного родителя. В таблице книг
колонка author_id повторяет один и тот
же номер автора.
Два автора и три книги с общими внешними ключами оформляют так:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('otm_books.db');
db.execute('PRAGMA foreign_keys = ON');
db.execute('''
CREATE TABLE IF NOT EXISTS authors (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
)
''');
db.execute('''
CREATE TABLE IF NOT EXISTS books (
id INTEGER PRIMARY KEY,
author_id INTEGER NOT NULL,
title TEXT NOT NULL,
FOREIGN KEY (author_id)
REFERENCES authors (id)
)
''');
db.execute(
'INSERT INTO authors (name) VALUES (?)',
['Mira Cole'],
);
db.execute(
'INSERT INTO authors (name) VALUES (?)',
['Jon Reed'],
);
db.execute(
'INSERT INTO books (author_id, title) VALUES (?, ?)',
[1, 'Quiet Harbor'],
);
db.execute(
'INSERT INTO books (author_id, title) VALUES (?, ?)',
[1, 'Stone Path'],
);
db.execute(
'INSERT INTO books (author_id, title) VALUES (?, ?)',
[2, 'Wide Field'],
);
db.dispose();
Подсчет книг у автора выполняют фильтром по
author_id. У первого автора в примере
получается две строки:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('otm_books.db');
db.execute('PRAGMA foreign_keys = ON');
db.execute('''
CREATE TABLE IF NOT EXISTS authors (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
)
''');
db.execute('''
CREATE TABLE IF NOT EXISTS books (
id INTEGER PRIMARY KEY,
author_id INTEGER NOT NULL,
title TEXT NOT NULL,
FOREIGN KEY (author_id)
REFERENCES authors (id)
)
''');
db.execute(
'INSERT INTO authors (name) VALUES (?)',
['Mira Cole'],
);
db.execute(
'INSERT INTO books (author_id, title) VALUES (?, ?)',
[1, 'Quiet Harbor'],
);
db.execute(
'INSERT INTO books (author_id, title) VALUES (?, ?)',
[1, 'Stone Path'],
);
var rows = db.select(
'''
SELECT COUNT(*) AS total
FROM books WHERE author_id = ?
''',
[1],
);
if (rows.isNotEmpty) {
print(rows.first['total']);
}
db.dispose();
В otm_books.db добавьте автора
"Eva Nash" и две его книги. Выведите
число книг с author_id этого автора.
Создайте otm_brands.db с таблицами
brands и models. Одной марке
сопоставьте три модели и выведите их названия.