Построить правильный логический дБ - PullRequest
0 голосов
/ 30 июня 2018

Я использую 4 таблицы в базе данных.

Пример:

Create table applicant(
Id int not null primary key,
IdName integer
idSkill integer,
idContact integer
Constraint initial foreign key (idName) References Initiale(id)
CONSTRAINT contacT foreign key (idContact) References contact(id)
CONSTRAINT Skills foreign key (idSkill) references skill(id))

Create table Initiale(
Id int not null primary key,
 firstname text,
middlename text)

Create table contact(
Id int not null primary key,
phone text,
email text)

Create tabke Skills(
Id int not null primary key,,
Nane text)

Я хочу оперативно вставить данные в 4 таблицы, но я не понимаю, что нужно получить идентификатор и вставить в заявителя.

1 Ответ

0 голосов
/ 30 июня 2018

Create tabke Skills ..... не удастся. Вы должны использовать Create table Skills.

Также не должно быть Id int not null primary key,, (две запятые), это не получится.

Скорее всего, вы должны использовать Id INTEGER PRIMARY KEY, а не Id int not null primary key.

Это потому, что обычно столбец Id должен быть уникальным идентификатором строки. С SQLite INTEGER PRIMARY KEY имеет особый смысл, в то время как INT PRIMARY KEY does not.

То есть, если используется INTEGER PRIMARY KEY, то столбец будет псевдонимом столбца rowid , который должен быть уникальным 64-разрядным целым числом со знаком и, что важно, если при вставке строки не указывается значение тогда SQLite назначит уникальное целое число. т.е. все важные Id .

Этот Id первоначально будет равен 1, затем, вероятно, 2, затем, вероятно, 3 и т. Д., Хотя нет никакой гарантии, что Id будет монотонно увеличиваться.

Есть дополнительные ошибки, в основном, пропущенные запятые. Следующее должно работать: -

CREATE TABLE IF NOT EXISTS applicant(
Id INTEGER PRIMARY KEY,
IdName integer,
idSkill integer,
idContact integer,
Constraint initial foreign key (idName) References Initiale(id),
CONSTRAINT contacT foreign key (idContact) References contact(id),
CONSTRAINT Skills foreign key (idSkill) references Skills(id));

Create table IF NOT EXISTS Initiale(
Id INTEGER PRIMARY KEY,
 firstname text,
middlename text);

Create table IF NOT EXISTS contact(
Id INTEGER PRIMARY KEY,
phone text,
email text);

Create table IF NOT EXISTS Skills(
Id INTEGER PRIMARY KEY,
Nane text);

Затем вы можете вставить данные в виде: -

INSERT INTO Initiale (firstname,middlename)  -- Note absence of Id so SQLite will generate
VALUES
    ('Fred','James'), -- very likely id 1
    ('Alan','Roy'), -- very likely id 2
    ('Simon','Gerorge')-- very likely id 3
;

INSERT INTO contact  -- alternative way of getting Id generated (specify null for Id)
VALUES
    (null,'0123456789','email01@email.com'), -- very likely id 1
    (null,'0987654321','email02@email.com'), -- very likely id 2
    (null,'3333333333','email03.@email.com') -- very likely id 3
;

INSERT INTO Skills (Nane)
VALUES
    ('Skill01'),('Skill02'),('Skill03') -- very likely id's 1,2 and 3
;

INSERT INTO applicant (IdName,idSkill,idContact)
VALUES
        -- First applicant
        (2, -- Alan Roy
        3, -- Skill 3
        1), -- Contact 0123456789 )

        -- Second Applicant
        (3, -- Simon George
        3, -- Skill 3
        2), -- Contact 0987654321 )

        -- Third Applicant
        (2, -- Alan Roy again????
        1, -- Skill 1
        3), -- contact 3333333333)

        (1,1,1) -- Fred James/ Skill 1/ Contact  0123456789
        --- etc
;

Принимая во внимание, что строки в таблице Initiale, Contact и Skills ДОЛЖНЫ существовать до того, как в таблицу «Заявитель» могут быть внесены вставки.

Затем можно выполнить запрос, например: -

SELECT * FROM applicant 
    JOIN Initiale ON Initiale.Id = idName
    JOIN contact ON contact.Id = idContact
    JOIN Skills ON Skills.Id = idSkill

Это приведет к (используя данные, как указано выше): -

enter image description here

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