Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / ограничить тип данных в колонке / 8 сообщений из 8, страница 1 из 1
14.01.2014, 18:16
    #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
14.01.2014, 21:42
    #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
15.01.2014, 11:01
    #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
15.01.2014, 13:40
    #38526887
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничить тип данных в колонке
pit_alex,

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

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

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

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

врядли будут вставляться не integer значения , а колонку id добавил по привычке к примеру check constraint она не относится :-)
...
Рейтинг: 0 / 0
15.01.2014, 15:53
    #38527153
jytuiyjht7jgyf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничить тип данных в колонке
действительно табличка у меня для уникальных id неких выполненных задач
...
Рейтинг: 0 / 0
15.01.2014, 16:04
    #38527169
PPA
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
Форумы / SQLite [игнор отключен] [закрыт для гостей] / ограничить тип данных в колонке / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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