Вы правы — в вашем исходном описании 7 таблиц, а я сделал только 6. Я пропустил таблицу «Состав блюд» как связующую между блюдами и продуктами.
Вот исправленный вариант с 7 таблицами (добавлена таблица СоставБлюд_Связь для связи «Блюда — Продукты»):
```sql
-- 1. Продукты (состав блюд - справочник продуктов)
CREATE TABLE Продукты (
КодПродукта INT PRIMARY KEY,
НазваниеПродукта VARCHAR(100) NOT NULL
);
-- 2. Блюда
CREATE TABLE Блюда (
КодБлюда INT PRIMARY KEY,
Название VARCHAR(100) NOT NULL,
Количество INT NOT NULL,
Категория VARCHAR(50),
Цена DECIMAL(10,2) NOT NULL
);
-- 3. Состав блюда (связь "многие ко многим": блюдо состоит из продуктов)
CREATE TABLE СоставБлюда (
КодБлюда INT NOT NULL,
КодПродукта INT NOT NULL,
КоличествоПродукта DECIMAL(10,2), -- сколько грамм/мл и т.д.
PRIMARY KEY (КодБлюда, КодПродукта),
FOREIGN KEY (КодБлюда) REFERENCES Блюда(КодБлюда),
FOREIGN KEY (КодПродукта) REFERENCES Продукты(КодПродукта)
);
-- 4. Столы
CREATE TABLE Столы (
КодСтола INT PRIMARY KEY,
Описание VARCHAR(100)
);
-- 5. Сотрудники
CREATE TABLE Сотрудники (
КодСотрудника INT PRIMARY KEY,
ФИО VARCHAR(150) NOT NULL
);
-- 6. Заказы
CREATE TABLE Заказы (
КодЗаказа INT PRIMARY KEY,
Дата DATE NOT NULL,
Время TIME NOT NULL,
Стол INT NOT NULL,
Официант INT NOT NULL,
Выполнен TINYINT DEFAULT 0,
СуммаЗаказа DECIMAL(10,2) DEFAULT 0,
FOREIGN KEY (Стол) REFERENCES Столы(КодСтола),
FOREIGN KEY (Официант) REFERENCES Сотрудники(КодСотрудника)
);
-- 7. Что заказано (позиции в заказе)
CREATE TABLE ЧтоЗаказано (
НомерПП INT NOT NULL,
КодЗаказа INT NOT NULL,
КодБлюда INT NOT NULL,
PRIMARY KEY (КодЗаказа, НомерПП),
FOREIGN KEY (КодЗаказа) REFERENCES Заказы(КодЗаказа),
FOREIGN KEY (КодБлюда) REFERENCES Блюда(КодБлюда)
);
```
Итого 7 таблиц:
1. Продукты
2. Блюда
3. СоставБлюда — это была пропущенная 7-я таблица
4. Столы
5. Сотрудники
6. Заказы
7. ЧтоЗаказано
Теперь всё соответствует вашему описанию из варианта 17.