powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / ограничить тип данных в колонке
8 сообщений из 8, страница 1 из 1
ограничить тип данных в колонке
    #38526054
jytuiyjht7jgyf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет нужна табличка для хранения целых чисел выполняться над ней будут
только две операции поиск и вставка

Код: sql
1.
2.
3.
SELECT COUNT(*) FROM Loaded WHERE Id=@H

INSERT INTO Loaded (Id) VALUES (@H)



табличка называется Loaded с колонкой Id в которой хранится некий идентификатор


вопрос: хотел бы ограничить тип вставляемых в табличку данных потому что если
создавать табличку так

Код: sql
1.
CREATE TABLE IF NOT EXISTS Loaded (Id INTEGER)



то помимо целых можно вставлять все что угодно

но если создавать табличку так

Код: sql
1.
CREATE TABLE IF NOT EXISTS Loaded (Id INTEGER PRIMARY KEY)



то вставить можно только целые и это мне подходит

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

спасибо
...
Рейтинг: 0 / 0
ограничить тип данных в колонке
    #38526260
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jytuiyjht7jgyfвопрос: хотел бы ограничить тип вставляемых в табличку данных Это не SQLite путь.
Хочешь чтобы твоя таблица имела именно тот тип данных в колонке который заявлен - бери другую базу.
http://www.sqlite.org/datatype3.html

jytuiyjht7jgyfно если создавать табличку так

Код: sql
1.
CREATE TABLE IF NOT EXISTS Loaded (Id INTEGER PRIMARY KEY)



то вставить можно только целые и это мне подходит

вопрос в том повлияет ли это как нибудь на что нибудь ?
тоесть помимо того что я внес возможность ограничить тип данных
не навредил ли я чему то другому ?В принципе нет, не повредил ничему. Даже помог слегка - у тебя теперь есть кластерный индекс на это поле, хоть ты это и не заказывал явно.
Но данный трюк сработает только с одним полем в таблице и только с целыми.
...
Рейтинг: 0 / 0
ограничить тип данных в колонке
    #38526691
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Использование Primary Key для хранение данных не есть правильно, Primary Key служит для однозначной идентификации записи в таблице, кроме того так как Primary Key уникален то два одинаковых значения в такое поле не вставить, поэтому лучше использовать Check Constraint

Код: sql
1.
2.
3.
4.
CREATE TABLE IF NOT EXISTS Loaded (
  id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
  data INTEGER, 
  CONSTRAINT [cc_data_int] CHECK(typeof(data) = 'integer'));



при попытке вставить не integer значение будет ошибка
...
Рейтинг: 0 / 0
ограничить тип данных в колонке
    #38526887
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pit_alex,

Судя по задаче у него цель - хранить уникальные идентификаторы.
классическая табличка-событий показывающая что ID-объекта обработан.
А вставлять два одинаковых значения в таблицу из одной колонки - это как-то странно.
Ваш CONSTRAINT - это лишняя нагрузка по CPU + жрет места лишняя колонка с синтетическим ключем id, который никак не используется.

Можно подробнее кто и где написал что хранить данные в PK плохо - чем PK так провинился?
технически это такой-же атрибут, только с констрейнами not null + unique.
для данной задачи подходит идеально.
...
Рейтинг: 0 / 0
ограничить тип данных в колонке
    #38527062
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

Для уникальных идентификаторов существует unique constraint, иметь таблицу из одной колонки с Primary Key и использовать его для задачи ограничения типа вводимых данных тоже как то странно
...
Рейтинг: 0 / 0
ограничить тип данных в колонке
    #38527087
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к тому же при использовании

PPAклассическая табличка-событий показывающая что ID-объекта обработан.

врядли будут вставляться не integer значения , а колонку id добавил по привычке к примеру check constraint она не относится :-)
...
Рейтинг: 0 / 0
ограничить тип данных в колонке
    #38527153
jytuiyjht7jgyf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
действительно табличка у меня для уникальных id неких выполненных задач
...
Рейтинг: 0 / 0
ограничить тип данных в колонке
    #38527169
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pit_alexк тому же при использовании

врядли будут вставляться не integer значения , а колонку id добавил по привычке к примеру check constraint она не относится :-)

1. Даже если будут вставляться всегда целые значения - на обработку чека нужно время.
это ведь аналог триггера.

2. В sqlite если создать таблицу без PRIMARY KEY
то sqlite автоматом добавит еще одну колонку - синтетический rowid.

Попробуйте создать таблички

CREATE TABLE IF NOT EXISTS Loaded1 (Id INTEGER)
CREATE TABLE IF NOT EXISTS Loaded2 (Id INTEGER PRIMARY KEY)
и посмотрите их структуру.
можно еще накидать туда по несколько лимонов записей и замерить время/размер

только в последней версии 3.8.2 приделали фичу - таблички без rowid-а
http://sqlite.org/withoutrowid.html
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / ограничить тип данных в колонке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]