Установка связей между таблицами SQLite
Модератор: Модераторы
Установка связей между таблицами SQLite
Никак не получается установить ссылочную целостность между таблицами в бд SQLite.
Бд.
3 таблицы.
1 таблица(Имя клиента, Адрес)
2 таблица (Наименование товара, Цена за штуку)
3 таблица (Дата,Наименование товара,Имя клиента,Количество)
Требуется согласовать данные. т.е. в 3й таблице "Наименование товара" и "Имя клиента" должны быть из 1й и 2й таблицы.
Естественно прежде чем писать на форум,пробовал установить связи пк и фк. Данные либо не обновлялись в 3й таблице(при изменении в 1й и 2й), либо возникали ошибки.
Ссылка на бд http://f-bit.ru/535344 .
Бд.
3 таблицы.
1 таблица(Имя клиента, Адрес)
2 таблица (Наименование товара, Цена за штуку)
3 таблица (Дата,Наименование товара,Имя клиента,Количество)
Требуется согласовать данные. т.е. в 3й таблице "Наименование товара" и "Имя клиента" должны быть из 1й и 2й таблицы.
Естественно прежде чем писать на форум,пробовал установить связи пк и фк. Данные либо не обновлялись в 3й таблице(при изменении в 1й и 2й), либо возникали ошибки.
Ссылка на бд http://f-bit.ru/535344 .
У вас нет необходимых прав для просмотра вложений в этом сообщении.
ССылочная целостность и возможность обновления данных одной таблицы по данным другой - это разные вещи.
Ссылочная целостность определяется при создании таблицы:
Теперь ВВы не сможете вставить в mytable2 значение, которое отсутствует в mytable1 Это и есть ссылочная целостность.
Возможность обновления одной таблицы по знапчениям из другой определяется триггерами при создании БД.
Определитесь что Вам нужно, а то опять придётся приглашать телепата а это дорого и в бюджет не заложено.
Ссылочная целостность определяется при создании таблицы:
Код: Выделить всё
CREATE TABLE mytable1 (
field1 integer,
field2 string)
CREATE TABLE mytable2 (
field1 integer,
field2 integer REFERENCE mytable1 (field1))Теперь ВВы не сможете вставить в mytable2 значение, которое отсутствует в mytable1 Это и есть ссылочная целостность.
Возможность обновления одной таблицы по знапчениям из другой определяется триггерами при создании БД.
Определитесь что Вам нужно, а то опять придётся приглашать телепата а это дорого и в бюджет не заложено.
Нужно чтобы при и изменении данных в одной таблице, они автоматом изменялись в другой.
Добавлено спустя 2 часа 55 минут 53 секунды:
Я прописывал так:
Добавлено спустя 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
Как объявлены 1 и 2 таблицы?
Версия SQLite?
Как объявлены 1 и 2 таблицы?
Версия SQLite?
SQLite это замена механизма readfile/writefile. Не надо требовать от него чего-то чрезмерного. Нужно согласовать свои пожелание с возможностями, или применить мозги там, где современные БД этого не требуют.
Т.е. нужен триггер, не уверен что в SQLite это возможно.
Plato писал(а):Нужно чтобы при и изменении данных в одной таблице, они автоматом изменялись в другой
Т.е. нужен триггер, не уверен что в SQLite это возможно.
Plato
Самое главное забыл спросить.
У Вас индексы то созданы по связываемым полям? Если нет, то ничего работать и не должно, т.к. вся эта байда работает на индексах.
В общем, если с индексами тоже не заработает, то обращайтесь на форум разработчиков.
Добавлено спустя 8 минут 32 секунды:
Триггер в SQLite возможен. Проверено.
Самое главное забыл спросить.
В общем, если с индексами тоже не заработает, то обращайтесь на форум разработчиков.
Добавлено спустя 8 минут 32 секунды:
stanilar писал(а):Т.е. нужен триггер, не уверен что в SQLite это возможно.
Триггер в SQLite возможен. Проверено.
- Vapaamies
- постоялец
- Сообщения: 292
- Зарегистрирован: 24.07.2012 22:37:59
- Откуда: Санкт-Петербург
- Контактная информация:
Vadim писал(а):В общем, если с индексами тоже не заработает, то обращайтесь на форум разработчиков.
Ссылаться можно только на первичный или уникальный ключ, который в СУБД реализуется индексом. Нужно создать ключ, если его нет.
Vadim писал(а):Триггер в SQLite возможен.
Возможен, но не по умолчанию. Возможно, что его даже на включить.
Мне даже страшно представить как много нам открытий чудных готовит просвещенья дух.
