
Новичок

Покинул форум
Сообщений всего: 56
Дата рег-ции: Авг. 2017
Откуда: замкадье
Помог: 1 раз(а)

|
tonchikp пишет:ведь тут по сути 3 поля с UNIQUE (rowid, id, obj)
ТУТ только 2 поля UNIQUE т.к. rowid и id - два именя для одного и того же поля
Проведем небольшой эксперимент:
CODE ( SQL):
скопировать код в буфер обмена
CREATE TABLE table1 (id INTEGER PRIMARY KEY AUTOINCREMENT, obj TEXT UNIQUE); INSERT INTO table1 (obj) VALUES ('aaaaa'),('bbbbb'),('ccccc'); INSERT INTO table1 VALUES (25,'zzzzz'); SELECT rowid,id FROM table1;
получим
как выдно, 1. значения совпадают 2. даже в загловке выдно, что это одно и то же поле (кстати, чтобы включить вывод заголовка в SQLite, дайте команду .header on, по умолчанию заголовки не выводятся)
Продолжим эксперименты, теперь создадим поле без AUTOINCREMENT
CODE ( SQL):
скопировать код в буфер обмена
CREATE TABLE table2 (id INTEGER PRIMARY KEY, obj TEXT UNIQUE); INSERT INTO table2 (obj) VALUES ('aaaaa'),('bbbbb'),('ccccc'); INSERT INTO table2 VALUES (25,'zzzzz'); SELECT rowid,id FROM table2;
Результат в точности тот же, т.е. INTEGER PRIMARY KEY оказывается достаточно.
Попробуем еще поэкспериментировать, заменим INTEGER на INT:
CODE ( SQL):
скопировать код в буфер обмена
CREATE TABLE table3 (id INT PRIMARY KEY, obj TEXT UNIQUE); INSERT INTO table3 VALUES (25,'zzzzz'); SELECT rowid,id FROM table3;
Как видим, результат изменился, т.е. теперь id и rowid - два разных поля.
Т.е. резюме, поле rowid создается не всегда иногда это просто другое имя длы уже имеющегося поля. Когда конкретно? Тут есть некая магия, порой противоречащая здравому смыслу, надо просто заучить, либо пробовать и смотреть что получается (как пробовать я показал).
(Добавление)
tonchikp пишет:Может лучше так: Чтобы ответить на этот вопрос, нужно посмотреть на всю задачу целиком, а не только на структуру таблицы. Но, (мое скромное ИМХО) скорее всего нет, не лучше. Если поле id нужно, (где-то еще используется) то оставьте как есть. А если не нужно - можно его и убрать, физически таблица останется точно такая же. Но неявное поле rowid по умолчанию заводится не случайно, так в данной конкретной СУБД опримизированы индексы, что с ним лучше. Не претендую на истину в последней инстанции.(Отредактировано автором: 28 Августа, 2017 - 14:05:43)
|