Установка связей между таблицами SQLite

Модератор: Модераторы

Установка связей между таблицами SQLite

Сообщение Plato » 01.11.2014 18:50:28

Никак не получается установить ссылочную целостность между таблицами в бд SQLite.
Бд.
3 таблицы.
1 таблица(Имя клиента, Адрес)
2 таблица (Наименование товара, Цена за штуку)
3 таблица (Дата,Наименование товара,Имя клиента,Количество)

Требуется согласовать данные. т.е. в 3й таблице "Наименование товара" и "Имя клиента" должны быть из 1й и 2й таблицы.
Естественно прежде чем писать на форум,пробовал установить связи пк и фк. Данные либо не обновлялись в 3й таблице(при изменении в 1й и 2й), либо возникали ошибки.
Ссылка на бд http://f-bit.ru/535344 .
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Plato
новенький
 
Сообщения: 13
Зарегистрирован: 25.10.2014 21:09:03

Re: Установка связей между таблицами SQLite

Сообщение Vadim » 01.11.2014 19:12:17

ССылочная целостность и возможность обновления данных одной таблицы по данным другой - это разные вещи.
Ссылочная целостность определяется при создании таблицы:
Код: Выделить всё
CREATE TABLE mytable1 (
  field1 integer,
  field2 string)

CREATE TABLE mytable2 (
  field1 integer,
  field2 integer REFERENCE mytable1 (field1))

Теперь ВВы не сможете вставить в mytable2 значение, которое отсутствует в mytable1 Это и есть ссылочная целостность.
Возможность обновления одной таблицы по знапчениям из другой определяется триггерами при создании БД.
Определитесь что Вам нужно, а то опять придётся приглашать телепата а это дорого и в бюджет не заложено. ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Установка связей между таблицами SQLite

Сообщение Plato » 01.11.2014 21:10:55

Нужно чтобы при и изменении данных в одной таблице, они автоматом изменялись в другой.

Добавлено спустя 2 часа 55 минут 53 секунды:
Vadim писал(а):ССылочная целостность и возможность обновления данных одной таблицы по данным другой - это разные вещи.
Ссылочная целостность определяется при создании таблицы:
Код: Выделить всё
CREATE TABLE mytable1 (
  field1 integer,
  field2 string)

CREATE TABLE mytable2 (
  field1 integer,
  field2 integer REFERENCE mytable1 (field1))

Теперь ВВы не сможете вставить в mytable2 значение, которое отсутствует в mytable1 Это и есть ссылочная целостность.
Возможность обновления одной таблицы по знапчениям из другой определяется триггерами при создании БД.
Определитесь что Вам нужно, а то опять придётся приглашать телепата а это дорого и в бюджет не заложено. ;-)


Я прописывал так:
Код: Выделить всё
CREATE TABLE [Orders] (
  [Дата] DATETIME,
  [Наименование товара] VARCHAR(50) REFERENCES [Items]([Наименование товара]) ON DELETE CASCADE ON UPDATE CASCADE,
  [Имя клиента] VARCHAR(50) REFERENCES [Clients]([Имя клиента]) ON DELETE CASCADE ON UPDATE CASCADE,
  [Количество] INTEGER);
Аватара пользователя
Plato
новенький
 
Сообщения: 13
Зарегистрирован: 25.10.2014 21:09:03

Re: Установка связей между таблицами SQLite

Сообщение Vadim » 02.11.2014 04:30:34

Plato
Как объявлены 1 и 2 таблицы?
Версия SQLite?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Установка связей между таблицами SQLite

Сообщение stanilar » 02.11.2014 07:17:56

SQLite это замена механизма readfile/writefile. Не надо требовать от него чего-то чрезмерного. Нужно согласовать свои пожелание с возможностями, или применить мозги там, где современные БД этого не требуют.

Plato писал(а):Нужно чтобы при и изменении данных в одной таблице, они автоматом изменялись в другой


Т.е. нужен триггер, не уверен что в SQLite это возможно.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: Установка связей между таблицами SQLite

Сообщение Vadim » 02.11.2014 11:08:11

Plato
Самое главное забыл спросить. :-) У Вас индексы то созданы по связываемым полям? Если нет, то ничего работать и не должно, т.к. вся эта байда работает на индексах.
В общем, если с индексами тоже не заработает, то обращайтесь на форум разработчиков.

Добавлено спустя 8 минут 32 секунды:
stanilar писал(а):Т.е. нужен триггер, не уверен что в SQLite это возможно.

Триггер в SQLite возможен. Проверено.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Установка связей между таблицами SQLite

Сообщение Vapaamies » 03.11.2014 02:32:33

Vadim писал(а):В общем, если с индексами тоже не заработает, то обращайтесь на форум разработчиков.

Ссылаться можно только на первичный или уникальный ключ, который в СУБД реализуется индексом. Нужно создать ключ, если его нет.
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 291
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

Re: Установка связей между таблицами SQLite

Сообщение stanilar » 04.11.2014 04:56:49

Vadim писал(а):Триггер в SQLite возможен.


Возможен, но не по умолчанию. Возможно, что его даже на включить.

Мне даже страшно представить как много нам открытий чудных готовит просвещенья дух.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru