Add Foreign Keys, Primary Keys, and NOT NULL constraints.
This commit is contained in:
		
							parent
							
								
									33d506ddaf
								
							
						
					
					
						commit
						d383000441
					
				
					 3 changed files with 222 additions and 27 deletions
				
			
		|  | @ -21,7 +21,7 @@ FILENAME_BADCHARS = '\\/:*?<>|"' | ||||||
| # Note: Setting user_version pragma in init sequence is safe because it only | # Note: Setting user_version pragma in init sequence is safe because it only | ||||||
| # happens after the out-of-date check occurs, so no chance of accidentally | # happens after the out-of-date check occurs, so no chance of accidentally | ||||||
| # overwriting it. | # overwriting it. | ||||||
| DATABASE_VERSION = 10 | DATABASE_VERSION = 11 | ||||||
| DB_INIT = ''' | DB_INIT = ''' | ||||||
| PRAGMA cache_size = 10000; | PRAGMA cache_size = 10000; | ||||||
| PRAGMA count_changes = OFF; | PRAGMA count_changes = OFF; | ||||||
|  | @ -30,32 +30,33 @@ PRAGMA user_version = {user_version}; | ||||||
| 
 | 
 | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS users( | CREATE TABLE IF NOT EXISTS users( | ||||||
|     id TEXT, |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|     username TEXT COLLATE NOCASE, |     username TEXT NOT NULL COLLATE NOCASE, | ||||||
|     password BLOB, |     password BLOB NOT NULL, | ||||||
|     created INT |     created INT | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_users_id on users(id); | CREATE INDEX IF NOT EXISTS index_users_id on users(id); | ||||||
| CREATE INDEX IF NOT EXISTS index_users_username on users(username COLLATE NOCASE); | CREATE INDEX IF NOT EXISTS index_users_username on users(username COLLATE NOCASE); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS albums( | CREATE TABLE IF NOT EXISTS albums( | ||||||
|     id TEXT, |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|     title TEXT, |     title TEXT, | ||||||
|     description TEXT |     description TEXT | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_albums_id on albums(id); | CREATE INDEX IF NOT EXISTS index_albums_id on albums(id); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS bookmarks( | CREATE TABLE IF NOT EXISTS bookmarks( | ||||||
|     id TEXT, |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|     title TEXT, |     title TEXT, | ||||||
|     url TEXT, |     url TEXT, | ||||||
|     author_id TEXT |     author_id TEXT, | ||||||
|  |     FOREIGN KEY(author_id) REFERENCES users(id) | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_bookmarks_id on bookmarks(id); | CREATE INDEX IF NOT EXISTS index_bookmarks_id on bookmarks(id); | ||||||
| CREATE INDEX IF NOT EXISTS index_bookmarks_author on bookmarks(author_id); | CREATE INDEX IF NOT EXISTS index_bookmarks_author on bookmarks(author_id); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS photos( | CREATE TABLE IF NOT EXISTS photos( | ||||||
|     id TEXT, |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|     filepath TEXT COLLATE NOCASE, |     filepath TEXT COLLATE NOCASE, | ||||||
|     override_filename TEXT COLLATE NOCASE, |     override_filename TEXT COLLATE NOCASE, | ||||||
|     extension TEXT, |     extension TEXT, | ||||||
|  | @ -69,7 +70,8 @@ CREATE TABLE IF NOT EXISTS photos( | ||||||
|     thumbnail TEXT, |     thumbnail TEXT, | ||||||
|     tagged_at INT, |     tagged_at INT, | ||||||
|     author_id TEXT, |     author_id TEXT, | ||||||
|     searchhidden INT |     searchhidden INT, | ||||||
|  |     FOREIGN KEY(author_id) REFERENCES users(id) | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_photos_id on photos(id); | CREATE INDEX IF NOT EXISTS index_photos_id on photos(id); | ||||||
| CREATE INDEX IF NOT EXISTS index_photos_filepath on photos(filepath COLLATE NOCASE); | CREATE INDEX IF NOT EXISTS index_photos_filepath on photos(filepath COLLATE NOCASE); | ||||||
|  | @ -81,8 +83,8 @@ CREATE INDEX IF NOT EXISTS index_photos_author_id on photos(author_id); | ||||||
| CREATE INDEX IF NOT EXISTS index_photos_searchhidden on photos(searchhidden); | CREATE INDEX IF NOT EXISTS index_photos_searchhidden on photos(searchhidden); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS tags( | CREATE TABLE IF NOT EXISTS tags( | ||||||
|     id TEXT, |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|     name TEXT, |     name TEXT NOT NULL, | ||||||
|     description TEXT |     description TEXT | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_tags_id on tags(id); | CREATE INDEX IF NOT EXISTS index_tags_id on tags(id); | ||||||
|  | @ -92,8 +94,9 @@ CREATE INDEX IF NOT EXISTS index_tags_name on tags(name); | ||||||
| 
 | 
 | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS album_associated_directories( | CREATE TABLE IF NOT EXISTS album_associated_directories( | ||||||
|     albumid TEXT, |     albumid TEXT NOT NULL, | ||||||
|     directory TEXT COLLATE NOCASE |     directory TEXT NOT NULL COLLATE NOCASE, | ||||||
|  |     FOREIGN KEY(albumid) REFERENCES albums(id) | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_album_associated_directories_albumid on | CREATE INDEX IF NOT EXISTS index_album_associated_directories_albumid on | ||||||
|     album_associated_directories(albumid); |     album_associated_directories(albumid); | ||||||
|  | @ -101,40 +104,49 @@ CREATE INDEX IF NOT EXISTS index_album_associated_directories_directory on | ||||||
|     album_associated_directories(directory); |     album_associated_directories(directory); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS album_group_rel( | CREATE TABLE IF NOT EXISTS album_group_rel( | ||||||
|     parentid TEXT, |     parentid TEXT NOT NULL, | ||||||
|     memberid TEXT |     memberid TEXT NOT NULL, | ||||||
|  |     FOREIGN KEY(parentid) REFERENCES albums(id), | ||||||
|  |     FOREIGN KEY(memberid) REFERENCES albums(id) | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_album_group_rel_parentid on album_group_rel(parentid); | CREATE INDEX IF NOT EXISTS index_album_group_rel_parentid on album_group_rel(parentid); | ||||||
| CREATE INDEX IF NOT EXISTS index_album_group_rel_memberid on album_group_rel(memberid); | CREATE INDEX IF NOT EXISTS index_album_group_rel_memberid on album_group_rel(memberid); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS album_photo_rel( | CREATE TABLE IF NOT EXISTS album_photo_rel( | ||||||
|     albumid TEXT, |     albumid TEXT NOT NULL, | ||||||
|     photoid TEXT |     photoid TEXT NOT NULL, | ||||||
|  |     FOREIGN KEY(albumid) REFERENCES albums(id), | ||||||
|  |     FOREIGN KEY(photoid) REFERENCES photos(id) | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_album_photo_rel_albumid on album_photo_rel(albumid); | CREATE INDEX IF NOT EXISTS index_album_photo_rel_albumid on album_photo_rel(albumid); | ||||||
| CREATE INDEX IF NOT EXISTS index_album_photo_rel_photoid on album_photo_rel(photoid); | CREATE INDEX IF NOT EXISTS index_album_photo_rel_photoid on album_photo_rel(photoid); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS id_numbers( | CREATE TABLE IF NOT EXISTS id_numbers( | ||||||
|     tab TEXT, |     tab TEXT NOT NULL, | ||||||
|     last_id TEXT |     last_id TEXT NOT NULL | ||||||
| ); | ); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS photo_tag_rel( | CREATE TABLE IF NOT EXISTS photo_tag_rel( | ||||||
|     photoid TEXT, |     photoid TEXT NOT NULL, | ||||||
|     tagid TEXT |     tagid TEXT NOT NULL, | ||||||
|  |     FOREIGN KEY(photoid) REFERENCES photos(id), | ||||||
|  |     FOREIGN KEY(tagid) REFERENCES tags(id) | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_photo_tag_rel_photoid on photo_tag_rel(photoid); | CREATE INDEX IF NOT EXISTS index_photo_tag_rel_photoid on photo_tag_rel(photoid); | ||||||
| CREATE INDEX IF NOT EXISTS index_photo_tag_rel_tagid on photo_tag_rel(tagid); | CREATE INDEX IF NOT EXISTS index_photo_tag_rel_tagid on photo_tag_rel(tagid); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS tag_group_rel( | CREATE TABLE IF NOT EXISTS tag_group_rel( | ||||||
|     parentid TEXT, |     parentid TEXT NOT NULL, | ||||||
|     memberid TEXT |     memberid TEXT NOT NULL, | ||||||
|  |     FOREIGN KEY(parentid) REFERENCES tags(id), | ||||||
|  |     FOREIGN KEY(memberid) REFERENCES tags(id) | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_tag_group_rel_parentid on tag_group_rel(parentid); | CREATE INDEX IF NOT EXISTS index_tag_group_rel_parentid on tag_group_rel(parentid); | ||||||
| CREATE INDEX IF NOT EXISTS index_tag_group_rel_memberid on tag_group_rel(memberid); | CREATE INDEX IF NOT EXISTS index_tag_group_rel_memberid on tag_group_rel(memberid); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS tag_synonyms( | CREATE TABLE IF NOT EXISTS tag_synonyms( | ||||||
|     name TEXT, |     name TEXT NOT NULL, | ||||||
|     mastername TEXT |     mastername TEXT NOT NULL | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_tag_synonyms_name on tag_synonyms(name); | CREATE INDEX IF NOT EXISTS index_tag_synonyms_name on tag_synonyms(name); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
|  | @ -149,6 +161,7 @@ for statement in DB_INIT.split(';'): | ||||||
|     column_names = statement.split('(')[1].rsplit(')', 1)[0] |     column_names = statement.split('(')[1].rsplit(')', 1)[0] | ||||||
|     column_names = column_names.split(',') |     column_names = column_names.split(',') | ||||||
|     column_names = [x.strip().split(' ')[0] for x in column_names] |     column_names = [x.strip().split(' ')[0] for x in column_names] | ||||||
|  |     column_names = [c for c in column_names if c.lower() != 'foreign'] | ||||||
|     SQL_COLUMNS[table_name] = column_names |     SQL_COLUMNS[table_name] = column_names | ||||||
| 
 | 
 | ||||||
| def _sql_dictify(columns): | def _sql_dictify(columns): | ||||||
|  |  | ||||||
|  | @ -5,6 +5,8 @@ import sys | ||||||
| 
 | 
 | ||||||
| import etiquette | import etiquette | ||||||
| 
 | 
 | ||||||
|  | import old_inits | ||||||
|  | 
 | ||||||
| def upgrade_1_to_2(photodb): | def upgrade_1_to_2(photodb): | ||||||
|     ''' |     ''' | ||||||
|     In this version, a column `tagged_at` was added to the Photos table, to keep |     In this version, a column `tagged_at` was added to the Photos table, to keep | ||||||
|  | @ -174,6 +176,57 @@ def upgrade_9_to_10(photodb): | ||||||
|         new_thumbnail_path = '.' + new_thumbnail_path.replace(thumbnail_dir, '') |         new_thumbnail_path = '.' + new_thumbnail_path.replace(thumbnail_dir, '') | ||||||
|         cur.execute('UPDATE photos SET thumbnail = ? WHERE id == ?', [new_thumbnail_path, photo.id]) |         cur.execute('UPDATE photos SET thumbnail = ? WHERE id == ?', [new_thumbnail_path, photo.id]) | ||||||
| 
 | 
 | ||||||
|  | def upgrade_10_to_11(photodb): | ||||||
|  |     ''' | ||||||
|  |     Added Primary keys, Foreign keys, and NOT NULL constraints which cannot be | ||||||
|  |     done in-place and requires the reconstruction of all the affected tables. | ||||||
|  |     ''' | ||||||
|  |     tables_to_delete = [ | ||||||
|  |         'users', | ||||||
|  |         'albums', | ||||||
|  |         'bookmarks', | ||||||
|  |         'photos', | ||||||
|  |         'tags', | ||||||
|  |         'album_associated_directories', | ||||||
|  |         'album_group_rel', | ||||||
|  |         'album_photo_rel', | ||||||
|  |         'id_numbers', | ||||||
|  |         'photo_tag_rel', | ||||||
|  |         'tag_group_rel', | ||||||
|  |         'tag_synonyms', | ||||||
|  |     ] | ||||||
|  |     cur = photodb.sql.cursor() | ||||||
|  |     cur.execute('PRAGMA foreign_keys = OFF') | ||||||
|  | 
 | ||||||
|  |     print('Renaming existing tables.') | ||||||
|  |     for table in tables_to_delete: | ||||||
|  |         statement = 'ALTER TABLE %s RENAME TO %s_old' % (table, table) | ||||||
|  |         cur.execute(statement) | ||||||
|  | 
 | ||||||
|  |     lines = [line.strip() for line in old_inits.V11.splitlines()] | ||||||
|  |     lines = [line for line in lines if not line.startswith('--')] | ||||||
|  |     statements = '\n'.join(lines).split(';') | ||||||
|  |     statements = [x.strip() for x in statements] | ||||||
|  |     create_tables = [x for x in statements if x.lower().startswith('create table')] | ||||||
|  |     create_indices = [x for x in statements if x.lower().startswith('create index')] | ||||||
|  | 
 | ||||||
|  |     print('Recreating tables.') | ||||||
|  |     for statement in create_tables: | ||||||
|  |         cur.execute(statement) | ||||||
|  | 
 | ||||||
|  |     print('Migrating table data.') | ||||||
|  |     for table in tables_to_delete: | ||||||
|  |         statement = 'INSERT INTO %s SELECT * FROM %s_old' % (table, table) | ||||||
|  |         cur.execute(statement) | ||||||
|  |         statement = 'DROP TABLE %s_old' % table | ||||||
|  |         cur.execute(statement) | ||||||
|  | 
 | ||||||
|  |     print('Recreating indices.') | ||||||
|  |     for statement in create_indices: | ||||||
|  |         cur.execute(statement) | ||||||
|  | 
 | ||||||
|  |     cur.execute('PRAGMA foreign_keys = ON') | ||||||
|  | 
 | ||||||
| def upgrade_all(data_directory): | def upgrade_all(data_directory): | ||||||
|     ''' |     ''' | ||||||
|     Given the directory containing a phototagger database, apply all of the |     Given the directory containing a phototagger database, apply all of the | ||||||
|  | @ -188,11 +241,11 @@ def upgrade_all(data_directory): | ||||||
|     needed_version = etiquette.constants.DATABASE_VERSION |     needed_version = etiquette.constants.DATABASE_VERSION | ||||||
| 
 | 
 | ||||||
|     if current_version == needed_version: |     if current_version == needed_version: | ||||||
|         print('Already up-to-date with version %d.' % needed_version) |         print('Already up to date with version %d.' % needed_version) | ||||||
|         return |         return | ||||||
| 
 | 
 | ||||||
|     for version_number in range(current_version + 1, needed_version + 1): |     for version_number in range(current_version + 1, needed_version + 1): | ||||||
|         print('Upgrading from %d to %d' % (current_version, version_number)) |         print('Upgrading from %d to %d.' % (current_version, version_number)) | ||||||
|         upgrade_function = 'upgrade_%d_to_%d' % (current_version, version_number) |         upgrade_function = 'upgrade_%d_to_%d' % (current_version, version_number) | ||||||
|         upgrade_function = eval(upgrade_function) |         upgrade_function = eval(upgrade_function) | ||||||
|         upgrade_function(photodb) |         upgrade_function(photodb) | ||||||
|  |  | ||||||
							
								
								
									
										129
									
								
								utilities/old_inits.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								utilities/old_inits.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,129 @@ | ||||||
|  | V11 = ''' | ||||||
|  | PRAGMA cache_size = 10000; | ||||||
|  | PRAGMA count_changes = OFF; | ||||||
|  | PRAGMA foreign_keys = ON; | ||||||
|  | PRAGMA user_version = 11; | ||||||
|  | 
 | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS users( | ||||||
|  |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|  |     username TEXT NOT NULL COLLATE NOCASE, | ||||||
|  |     password BLOB NOT NULL, | ||||||
|  |     created INT | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_users_id on users(id); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_users_username on users(username COLLATE NOCASE); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS albums( | ||||||
|  |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|  |     title TEXT, | ||||||
|  |     description TEXT | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_albums_id on albums(id); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS bookmarks( | ||||||
|  |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|  |     title TEXT, | ||||||
|  |     url TEXT, | ||||||
|  |     author_id TEXT, | ||||||
|  |     FOREIGN KEY(author_id) REFERENCES users(id) | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_bookmarks_id on bookmarks(id); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_bookmarks_author on bookmarks(author_id); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS photos( | ||||||
|  |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|  |     filepath TEXT COLLATE NOCASE, | ||||||
|  |     override_filename TEXT COLLATE NOCASE, | ||||||
|  |     extension TEXT, | ||||||
|  |     width INT, | ||||||
|  |     height INT, | ||||||
|  |     ratio REAL, | ||||||
|  |     area INT, | ||||||
|  |     duration INT, | ||||||
|  |     bytes INT, | ||||||
|  |     created INT, | ||||||
|  |     thumbnail TEXT, | ||||||
|  |     tagged_at INT, | ||||||
|  |     author_id TEXT, | ||||||
|  |     searchhidden INT, | ||||||
|  |     FOREIGN KEY(author_id) REFERENCES users(id) | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photos_id on photos(id); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photos_filepath on photos(filepath COLLATE NOCASE); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photos_override_filename on | ||||||
|  |     photos(override_filename COLLATE NOCASE); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photos_created on photos(created); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photos_extension on photos(extension); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photos_author_id on photos(author_id); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photos_searchhidden on photos(searchhidden); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS tags( | ||||||
|  |     id TEXT PRIMARY KEY NOT NULL, | ||||||
|  |     name TEXT NOT NULL, | ||||||
|  |     description TEXT | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_tags_id on tags(id); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_tags_name on tags(name); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS album_associated_directories( | ||||||
|  |     albumid TEXT NOT NULL, | ||||||
|  |     directory TEXT NOT NULL COLLATE NOCASE, | ||||||
|  |     FOREIGN KEY(albumid) REFERENCES albums(id) | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_album_associated_directories_albumid on | ||||||
|  |     album_associated_directories(albumid); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_album_associated_directories_directory on | ||||||
|  |     album_associated_directories(directory); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS album_group_rel( | ||||||
|  |     parentid TEXT NOT NULL, | ||||||
|  |     memberid TEXT NOT NULL, | ||||||
|  |     FOREIGN KEY(parentid) REFERENCES albums(id), | ||||||
|  |     FOREIGN KEY(memberid) REFERENCES albums(id) | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_album_group_rel_parentid on album_group_rel(parentid); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_album_group_rel_memberid on album_group_rel(memberid); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS album_photo_rel( | ||||||
|  |     albumid TEXT NOT NULL, | ||||||
|  |     photoid TEXT NOT NULL, | ||||||
|  |     FOREIGN KEY(albumid) REFERENCES albums(id), | ||||||
|  |     FOREIGN KEY(photoid) REFERENCES photos(id) | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_album_photo_rel_albumid on album_photo_rel(albumid); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_album_photo_rel_photoid on album_photo_rel(photoid); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS id_numbers( | ||||||
|  |     tab TEXT NOT NULL, | ||||||
|  |     last_id TEXT NOT NULL | ||||||
|  | ); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS photo_tag_rel( | ||||||
|  |     photoid TEXT NOT NULL, | ||||||
|  |     tagid TEXT NOT NULL, | ||||||
|  |     FOREIGN KEY(photoid) REFERENCES photos(id), | ||||||
|  |     FOREIGN KEY(tagid) REFERENCES tags(id) | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photo_tag_rel_photoid on photo_tag_rel(photoid); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_photo_tag_rel_tagid on photo_tag_rel(tagid); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS tag_group_rel( | ||||||
|  |     parentid TEXT NOT NULL, | ||||||
|  |     memberid TEXT NOT NULL, | ||||||
|  |     FOREIGN KEY(parentid) REFERENCES tags(id), | ||||||
|  |     FOREIGN KEY(memberid) REFERENCES tags(id) | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_tag_group_rel_parentid on tag_group_rel(parentid); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_tag_group_rel_memberid on tag_group_rel(memberid); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS tag_synonyms( | ||||||
|  |     name TEXT NOT NULL, | ||||||
|  |     mastername TEXT NOT NULL | ||||||
|  | ); | ||||||
|  | CREATE INDEX IF NOT EXISTS index_tag_synonyms_name on tag_synonyms(name); | ||||||
|  | ---------------------------------------------------------------------------------------------------- | ||||||
|  | ''' | ||||||
		Loading…
	
		Reference in a new issue