Как я уже сказал в своем комментарии, трудно сказать, что вы пытаетесь сделать, но внешние ключи, которые вы пытались создать, выглядят подозрительно.
Все должно быть проще для понимания, если вы ограничите каждую таблицу, чтобы она представляла только одну вещь, то есть, соответственно:
Это приводит к:
CREATE TABLE Students (
idnr NUMERIC(10) PRIMARY KEY,
name TEXT NOT NULL,
login TEXT NOT NULL
);
CREATE TABLE Branches(
name TEXT,
program TEXT,
PRIMARY KEY(name, program)
);
CREATE TABLE StudentBranches (
student NUMERIC(10) REFERENCES Students(idnr),
branch TEXT NOT NULL,
program TEXT NOT NULL,
FOREIGN KEY (branch, program) REFERENCES Branches(name, program)
);
StudentBranches
. PRIMARY KEY
из StudentBranches
, потому что ваш предыдущий комментарий о «получить весь столбец» звучал так, как будто студент должен иметь возможность зарегистрироваться в более чем 1 программе. Если студент может зарегистрироваться ровно в 1 программе, вам нужно добавить его обратно. Несколько лет назад я пытался сжать свой исполняемый файл, чтобы уменьшить загрузку.
В конечном итоге я рекомендую вам использовать программу установки, например Inno Setup . Он не только создает один EXE-файл, который будет устанавливать / удалять вашу программу, но он также сжимает, что EXE практически столько же, сколько отдельный компрессор сделал бы с вашим исполняемым файлом.
Когда программа установлена, она распаковывается, поэтому она никогда не выглядит как вирус и не увеличивает время загрузки.
Таким образом, я получаю преимущества меньшего размера загрузки и профессиональный внешний вид установочного скрипта.
ps Inno Setup бесплатен.
Советуем вам не делать этого:
) Этот сумасшедший сайт приводит аргумент, который я слышал в далекое прошлое (правда это или нет сегодня, я не уверен, что современные упаковщики, вероятно, сегодня имеют другую стратегию) В этой статье упоминается Win32! :)
http: //topic.csdn. net / t / 20000408/08 / 6785.html
Современные многозадачные ОС, такие как Windows 95/98 и NT используют то, что называется системой «виртуальной памяти». когда программы запускаются, весь их код не загружается в память сразу при запуске, как было в случае с DOS программы. Вместо этого только части код активно выполняется хранится в памяти. Например, скажем ваша программа имеет опцию печати на меню и код позади него, который обрабатывает печать. Этот код будет только загружен в память после печати Функция впервые выбирается пользователем. И если после того, как код загружен в память функция печати не используется какое-то время система будет «сбрасывать» код, освобождая память занято, если другое приложение отчаянно нужна память. Это часть процесса под названием "пейджинг" и является полностью прозрачен для программы.
Еще один способ подкачки под Win32 сохраняет память, это вызывает несколько экземпляры программы (или DLL) для разделить ту же память для кода. В другими словами, под нормальным обстоятельств нет реальных разница в количестве физического память, выделенная для кода между запуск 100 экземпляров программы и запуск одного экземпляра.
Если все программы Win32 вели себя как DOS-программы, загружающие все в память и держать его там до Программа прекращена, а также нет разделяя любую память между несколькими случаи, вы можете себе представить как быстро может работать физическая память в системах с ограниченным количеством, вызывая замену диска, чтобы начать.
Тем не менее, это именно то, что в настоящее время Компрессоры Win32 EXE делают для вашего EXE в / DLL файлы! Они полностью уходят против системы подкачки ОС распаковка всего кода в память и держать его там до окончания. И потому, что код не хранится в «сырой» формат в файле EXE (т.е. так же, как он хранится в памяти), ОС не может поделиться кодом между несколько экземпляров.
Вероятно, вы подумали о ASPack - это компрессор EXE, написанный на Delphi, но сжимающий любой EXE. Это может быть очень хорошо на Delphi EXE, хотя. Я согласен с другими ответами, что вы не должны использовать EXE-компрессор, просто чтобы сэкономить время загрузки. Могут быть конкретные ситуации, когда сжатие EXE является хорошей идеей, но обычно это не так.
Вместо этого используйте хороший компоновщик установки, особенно если вы можете найти тот, который использует сжатие 7zip. Я знаю InstallAware использует 7zip для максимального сжатия. В зависимости от того, какие версии Delphi у вас есть, у вас также может быть лицензия InstallAware.
Если ничего другого, вы можете создать самораспаковывающийся архив с базовым поведением установки с помощью 7zip бесплатно.
Я не знаю ни одного, специально предназначенного для Delphi, но UPX очень популярен для такого рода вещей. Единственным недостатком является то, что исполняемый файл должен быть распакован при запуске, и это может занять некоторое время. Тем не менее, он кажется очень быстрым для исполняемых файлов разумного размера.
Я задал вопрос о недостатках использования UPX на исполняемых файлах Delphi здесь, на SO, некоторое время назад, и получил несколько отличных ответов.
Недостатки использования UPX для сжатия исполняемого файла Windows?
UPX должен работать, хотя это не специфично для Delphi.
You can use PECompact since people can't decrypt it easily, and as test showed (showed on main page, just scroll down a bit) it's better than ASPack or UPX, i've using it on my previous Delphi projects
Используйте UPX с опцией lzma для максимального сжатия.
upx --lzma yourfile.exe
I believe Terminal servers (Like Citrix) will use the same memory for you're application binary if it is uncompressed. Meaning a compressed exe could smell a small disaster in a Citrix environment.
Основное неудобство сжатых EXE или DLL заключается в том, что ОС не может совместно использовать код между несколькими экземплярами.
Таким образом, вы тратите память, приходится распаковывать каждый раз при запуске экземпляра, проявлять вирусоподобное поведение, даже не имея преимущества при загрузке по сравнению со сжатой установкой.
Единственный положительный случай - при запуске непосредственно с сетевого диска.
Я бы тоже проголосовал за upx. Помимо недостатков, которые были упомянуты, он также защищает от базового реверс-инжиниринга и от этих «хакерских» инструментов. Их, кстати, много, и большинству из них не удается открыть сжатый исполняемый файл.