Как я могу ограничить поле базы данных SQLite с помощью Perl?

#perl #sqlite

#perl #sqlite

Вопрос:

Я создаю базу данных SQLite с использованием Perl.

Вот пример моего кода на данный момент

 my $stmt = qq(
  CREATE TABLE PBS_control_data (
    Antibody        TEXT  PRIMARY KEY NOT NULL,
    Raw_data        FLOAT NOT NULL,
    Normalized_data FLOAT NOT NULL
  )
);

my $rv = $dbh->do($stmt);
if ($rv < 0) {
  print "$dbh::errstr";
}
else {
  print "Table created";
}
  

У меня есть шесть элементов в Antibodies поле, и я хочу ограничить поле так, чтобы вы должны были ввести одно из этих шести имен, чтобы предотвратить ошибки.

Как это можно сделать?

Комментарии:

1. Я привел в порядок ваш код Perl, чтобы я мог его понять. Я надеюсь, что вы предпочитаете мою версию, но, пожалуйста, откатите мое изменение, если хотите. Но ваш вопрос меня озадачивает. Похоже, вы знаете достаточно SQL, чтобы иметь возможность проверить, соответствует ли входная строка какому-либо из Antibody полей. Мой единственный комментарий заключается в том, что если у вас всего шесть записей, а ваша база данных либо статична, либо никогда не имеет более одного пользователя, то вы также можете сохранить таблицу в памяти для гораздо более быстрого доступа

2. Боюсь, я немного схитрил — я довольно новичок в программировании, и я следую руководству (здесь tutorialspoint.com/sqlite/sqlite_constraints.htm ). В нем говорится об использовании функции ПРОВЕРКИ, но приводится только числовой пример. Причина, по которой я решил хранить свои данные в базе данных, а не в плоском файле, заключается в том, что у меня есть многомерный набор данных, с которым я постоянно путаюсь. И я считаю, что таблица уже сохранена в памяти (или я не совсем понимаю, что вы имеете в виду под этим). Спасибо.

3. Я не совсем понимаю ваш контекст. Вы можете создать базу данных SQLite в памяти, но данные изменчивы и исчезают при завершении вашего процесса. Гораздо чаще база данных хранится в виде файла на диске, но тогда мне интересно, почему в базе данных хранится всего шесть записей. Похоже, вам просто нужен хэш Perl, а использование SQLite только усложнит для вас задачу. Но, возможно, в вашем приложении есть нечто большее, чем вы объяснили?

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

5. Хорошо, тогда я думаю, что вы ищете не в том месте. Вы должны использовать простой код Perl для проверки данных, которые вы вводите в базу данных. Вы могли бы применить CHECK ограничение к столбцу и просто попробовать вставить все, что вводит пользователь, но это было бы небрежным программированием. Вроде как запихивать все свои продукты в холодильник и выбрасывать вещи, если они становятся зелеными и пахнут

Ответ №1:

Я думаю, вы ищете не в том месте. Вы должны использовать простой код Perl для проверки данных, которые вы вводите в базу данных

Вы могли бы применить CHECK ограничение к столбцу и просто попробовать вставить все, что вводит пользователь, но это было бы небрежным программированием

Ответ №2:

Чтобы позволить базе данных проверять, что внесенное значение имеет одно из шести значений, используйте ограничение ПРОВЕРКИ, подобное этому:

 CREATE TABLE MyTable (
   MyField TEXT CHECK(MyField IN ('a', 'b', 'c', 'd', 'e', 'f')),
   [...]
);