sqlite3 schéma aplikace baňka hlasování

hlasů
1

Jsem Baňky začátečník a chci stavět hlasování aplikaci pomocí baňku a sqlite3 jako databázový stroj.

Moje otázka je, jak mohu vytvořit dvě tabulky, ‚otázky‘ a ‚volby‘, takže každá otázka má několik možností (nemusí být pevně stanovený počet.

Můj orginal přístup byl poněkud naivní:

drop table if exists entries;
create table question (
    ques_id integer primary key autoincrement,
    ques string not null,
    choice1 string not null,
    choice2 string not null,
    choice3 string not null,
    choice4 string not null,
    pub_date integer
); 
Položena 06/04/2011 v 06:50
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Dále je ještě normalizovaný přístup. To je dobré pro ukládání oddělenou sadu možností společných pro všechny otázky.

CREATE TABLE choices (
    choice_id integer primary key autoincrement,
    choice string not null
);

CREATE TABLE questions (
    ques_id integer primary key autoincrement,
    ques string not null,
    choice_id integer,
    FOREIGN KEY(choice_id) REFERENCES choice(choice_id)
);

Příklad interpret relace:

>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> c = conn.cursor()
>>> c.execute("""CREATE TABLE choices (
...     choice_id integer primary key autoincrement,
...     choice string not null
... );""")
<sqlite3.Cursor object at 0x7f29f60b8ce8>
>>> c.execute("""CREATE TABLE questions (
...     ques_id integer primary key autoincrement,
...     ques string not null,
...     choice_id integer,
...     pub_date integer,
...     FOREIGN KEY(choice_id) REFERENCES choice(choice_id)
... );""")
<sqlite3.Cursor object at 0x7f29f60b8ce8>
>>> c.execute("INSERT IGNORE  INTO choices (choice) VALUES ('yes')")
<sqlite3.Cursor object at 0x7f29f60b8ce8>
>>> c.execute("""INSERT IGNORE  INTO questions (ques,choice_id) 
                 VALUES ('do you like sqlite?',1)""")
<sqlite3.Cursor object at 0x7f29f60b8ce8>
>>> c.execute("""SELECT ques, choice 
                   FROM questions q 
                        JOIN choices c ON c.choice_id = q.choice_id;""")
>>> c.fetchall()
[(u'do you like sqlite?', u'yes')]
Odpovězeno 06/04/2011 v 07:05
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more