Skip to content
Snippets Groups Projects
database_create.py 1.77 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jakub Štercl's avatar
    Jakub Štercl committed
    #!/usr/bin/env python3
    
    import sqlite3 as sqlite
    
    conn = sqlite.connect('database.db')
    conn.isolation_level = None  # so we don't have to use self.connection.commit()
    curs = conn.cursor()
    
    curs.execute(
    
        group_id INTEGER PRIMARY KEY,
        name     VARCHAR UNIQUE
                         NOT NULL
    
    Jakub Štercl's avatar
    Jakub Štercl committed
    
    curs.execute(
    
        member_id INTEGER PRIMARY KEY AUTOINCREMENT,
    
        group_id  INTEGER REFERENCES Groups (group_id) ON DELETE CASCADE,
        UNIQUE (
            name,
            group_id
        )
    
    curs.execute(
        '''
        CREATE TABLE Distribution (
        distribution_id INTEGER  PRIMARY KEY AUTOINCREMENT,
        name            VARCHAR  NOT NULL,
    
        creation_time   DATETIME DEFAULT (CURRENT_TIMESTAMP),
        group_id                 REFERENCES Groups (group_id) ON DELETE CASCADE
    );
    '''
    
    )
    
    curs.execute(
        '''
        CREATE TABLE Team (
        team_id         INTEGER PRIMARY KEY AUTOINCREMENT,
        name            VARCHAR,
    
        distribution_id INTEGER REFERENCES Distribution (distribution_id) ON DELETE CASCADE
    
                                NOT NULL
    
    )
    
    curs.execute(
        '''
        CREATE TABLE Member_to_Team (
    
        member_id INTEGER REFERENCES Member (member_id) ON DELETE CASCADE,
        team_id   INTEGER REFERENCES Team (team_id) ON DELETE CASCADE,
    
        PRIMARY KEY (
            team_id,
            member_id
        )
    
    curs.execute(
        '''
        SELECT t1.member_id member_id,
    
    Jakub Štercl's avatar
    Jakub Štercl committed
           t2.member_id With_member_id,
           count( * ) times_together
        FROM Member_to_Team t1
           JOIN
           Member_to_Team t2 ON t1.team_id = t2.team_id AND 
                                t1.member_id != t2.member_id
           JOIN
           Member ON t2.member_id = Member.member_id
        GROUP BY t1.member_id,
                      t2.member_id