2015-12-23 1 views
0

я извинюсь сейчас подхожу из C++ ОПП шаблона проектированияВ SQLite является возможностью перекрестной ссылки на чужой ключ

Для примера три таблицы базы данных (неключевой полех опущенный) является возможным здравомыслящим пересечь -отличить другую таблицу в разделе ССЫЛКИ?

CREATE TABLE `Attempt` (
    `attempt_ID` INTEGER PRIMARY KEY AUTOINCREMENT, 
    `username` TEXT NOT NULL, 
    `assessment_ID` INTEGER NOT NULL, 
    `timestamp` INTEGER NOT NULL, 
    FOREIGN KEY(`username`) REFERENCES Students (username), 
    FOREIGN KEY(`assessment_ID`) REFERENCES Assessments (assessment_ID) 
); 
CREATE TABLE `Questions` (
    `assessment_ID` INTEGER NOT NULL, 
    `question_number` INTEGER NOT NULL, 
    PRIMARY KEY(assessment_ID,question_number) 
); 
CREATE TABLE "Responses" (
    `attempt_ID` INTEGER, 
    `question_number` INTEGER, 
    PRIMARY KEY(attempt_ID,question_number), 
    FOREIGN KEY(`attempt_ID`) REFERENCES Attempt (attempt_ID) 
); 

Очевидным решением является включение assessment_ID в каждом question.row но если мы уже знаем attempt_ID тогда мы можем LookUp оценочный ID?

CREATE TABLE "Responses" (
    `attempt_ID` INTEGER, 
    `assessment_ID` INTEGER, 
    `question_number` INTEGER, 
    PRIMARY KEY(attempt_ID,question_number), 
    FOREIGN KEY(`attempt_ID`) REFERENCES Attempt (attempt_ID) 
    FOREIGN KEY(`assessment_ID`,`question_number`) REFERENCES `Questions` (`assessment_ID`,`question_number`) 
); 

Sub_Reference может быть?

+0

При дальнейшем изучении ограничений внешнего ключа SQLITE не работают в базах данных. На всякий случай кто-то приезжает сюда с подобной идеей. – ArchNemSyS

ответ

0

Что вы, похоже, хотите сделать, это не «здорово».

Это то, что вы, похоже, хотите сделать в таблице Response.

FOREIGN KEY(question_number) 
    REFERENCES Questions(assessment_ID, question_number) 

Это не «здорово». (Это не SQL.) Один столбец (question_number) не может ссылаться на два столбца (оценка_ID, question_number).

Трудно сказать, что вам нужно сделать, чтобы исправить это. Разница между попыткой и ответом не ясна. Если ответ является ответом на вопрос, то ваша таблица ответов должна, вероятно, выглядеть примерно так.

CREATE TABLE responses (
attempt_ID integer not null, 
assessment_ID integer not null, 
question_number integer not null, 
primary key (attempt_ID, assessment_ID, question_number), 
foreign key (attempt_ID) references Attempt (attempt_ID), 
foreign key (assessment_ID, question_number) 
    references questions (assessment_ID, question_number) 
); 

Очевидным решением является включение assessment_ID в каждом question.row но если мы уже знаем attempt_ID то может поиск оценка ID?

Независимо от того, находите ли вы способ навигации к необходимой вам информации, это не имеет особого отношения. На самом деле, такая проблема является проблемой, с которой реляционная модель данных была разработана для решения. В настоящее время мы разрабатываем базы данных на основе функциональных зависимостей и нормализации.

Кроме того, если вы разрабатываете новую базу данных в SQLite, вам, вероятно, не следует писать код с использованием синтаксиса MySQL.

+0

Спасибо за информацию, я подумал, что немного настроен по поводу синтаксического смешения всего SQL, который мне чуждо. – ArchNemSyS

Смежные вопросы