Настройка реляционной таблицы - PullRequest
0 голосов
/ 21 апреля 2011

Я хочу добавить реляционные данные , не имея идентификаторов .Позволь мне объяснить.Например, Nokta1 и Nokta2 относятся к Cihaz1.Nokta3 относится к Cihaz2.Так что это отношение один ко многим .

Сразу после добавления Cihaz1 и Cihaz2 строк в таблицу cihaz, как мне вставить Nokta1, Nokta2 и Nokta3 строк в nokta таблицу с этими отношениями?

Есть ли ошибки в моем коде?

import sqlite3

# data
NOKTALAR = (
    ('Nokta1', 'AO', 'CVXY', '1'),
    ('Nokta2', 'AO', 'CVXY', '1'),
    ('Nokta3', 'BO', 'MESR', '1'),
    ('Nokta4', 'BO', 'MESR', '1'),
    ('Nokta5', 'BI', 'APTU', '2'),
    ('Nokta6', 'AI', 'FTRE', '1'),
    ('Nokta7', 'AI', 'FTRE', '1'),
)
CIHAZLAR = (
    ('Cihaz1'),
    ('Cihaz2'),
    ('Cihaz3'),
    ('Cihaz4'),
    ('Cihaz5'),
    ('Cihaz6'),
)

# get connection and cursor objects
conn = sqlite3.connect('iodatabase')
c = conn.cursor()

# create tables
c.execute('''create table cihaz (
    id integer primary key autoincrement,
    name text
)''')

c.execute('''create table nokta (
    id integer primary key autoincrement,
    name text,
    module text,
    type text,
    desc text,
    cihaz_id integer
    FOREIGN KEY(cihaz_id) REFERENCES cihaz(id)
)''')
c.execute('''create table link (
    nokta_id integer,
    cihaz_id integer,
)''')

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Если вы хотите связать их по имени, а не по идентификатору, просто используйте внешний ключ к имени.

c.execute('''create table nokta
             id integer primary key autoincrement,
             name text,
             parent text
             FOREIGNKEY(parent) REFERENCES cihaz(name)''')

Теперь, когда вы вставляете нокту, просто используйте соответствующий родительский элемент.

 c.execute('insert into nokta (text, parent) values ?, ?', ('Nokta1', 'Cihaz1'))

Теперь, чтобы запросить все нокты, связанные с конкретным цихазом, просто используйте имя.

 c.execute('select * from nokta where parent = ?', ('Cihaz1',))
0 голосов
/ 21 апреля 2011

Таблица ссылок должна быть определена как:

   create table link (     
       nokta_id integer,      
       cihaz_id integer,
       FOREIGN KEY(nokta_id) REFERENCES nokta(id),
       FOREIGN KEY(cihaz_id) REFERENCES cihaz(id)
   )   

но вам действительно не нужен этот стол. Это просто проекция таблицы Nokta на атрибуты id и cihaz_id (то есть эквивалент выбора id, chaz_id из Nokta).

Сразу после добавления строк "Cihaz1" и "Cihaz2" в таблицу "cihaz", как я могу> вставить строки "Nokta1", "Nokta2" и "Nokta3" в таблицу "nokta" с этими отношениями?

Не должно быть проблем с добавлением Nokta1, Nokta2 и Nokta3, если они ссылаются только на существующие значения в таблице cihaz.

1012 *, например *

INSERT INTO CIHAZ(name) VALUES('Cihaz1');
...
INSERT INTO CIHAZ(name) VALUES('Cihaz7');

INSERT INTO NOKTA(name, module, type, desc, cihaz_id) VALUES ('Nokta1', 'AO', 'CVXY', '1', 1),

Для последнего поля (поля внешнего ключа) значения 1, 2, 3, 4, 5, 6 или 7 были бы в порядке, потому что мы уже вставили строки с этими ключами в CIHAZ (автоматически создается).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...