образуется таблица (рис 2. 6), содержащая 21 х 3 х 5 х 33 = 10395 строк. Эквисоединение таблиц
Если из декартова произведения убрать ненужные строки и столбцы, то можно получить актуальные таблицы, соответствующие любому из соединений. Меню Трапезы Вид_блюд Блюда Т В БЛ Т Трапеза В Вид БЛ Блюдо В Основа Выход Труд 1 З 3 1 Завтрак З Закуска 1 Салат летний З Овощи 200. 3 1 З 3 1 Завтрак З Закуска 2 Салат мясной З Мясо 200. 4 1 З 3 1 Завтрак З Закуска 3 Салат витаминный З Овощи 200. 4 * ... . 1 З 3 1 Завтрак З Закуска 12 Суп молочный С Молоко 500. 3 1 З 3 1 Завтрак З Закуска 13 Бастурма Г Мясо 300. 5 ... . 1 З 3 1 Завтрак З Закуска 32 Кофе черный Н Кофе 100. 1 1 З 3 1 Завтрак З Закуска 33 Кофе на молоке Н Кофе 200. 2 1 З 6 1 Завтрак З Закуска 1 Салат летний З Овощи 200. 3 1 З 6 1 Завтрак З Закуска 2 Салат мясной З Мясо 200. 4 1 З 6 1 Завтрак З Закуска 3 Салат витаминный З Овощи 200. 4 1 З 6 1 Завтрак З Закуска 4 Салат рыбный З Рыба 200. 4 1 З 6 1 Завтрак З Закуска 5 Паштет из рыбы З Рыба 120. 5 1 З 6 1 Завтрак З Закуска 6 Мясо с гарниром З Мясо 250. 3 * ... . Рисунок 2. 5
Очевидно, что отбор актуальных строк обеспечивается вводом в запрос WHERE фразы, в которой устанавливается соответствие между: кодами трапез (Т) в таблицах Меню и Трапезы (Меню. Т = Трапезы. Т), кодами видов блюд (В) в таблицах Меню и Вид_блюд (Меню. В = Вид_блюд. В), номерами блюд (БЛ) в таблицах Меню и Блюда (Меню. БЛ = Блюда. БЛ). Такой скорректированный запрос SELECT Меню. *, Трапезы. *, Вид_блюд. *, Блюда. * FROM Меню, Трапезы, Вид_блюд, Блюда WHERE Меню. Т = Трапезы. Т AND Меню. В = Вид_блюд. В AND Меню. БЛ = Блюда. БЛ;
позволит получить эквисоединение таблиц Меню, Трапезы, Вид_блюд и Блюда: Т В БЛ Т Трапеза В Вид БЛ Блюдо В Основа Выход Труд 1 З Овощи 200. 4 1 З Мясо 250. 3 1 Г Яйца 200. 5 ... . 3 Г Яйца 180. 4 3 Н Фрукты 200. 2 3 Н Молоко 200. 2 Естественное соединение таблиц
Легко заметить, что в эквисоединение таблиц вошли дубликаты столбцов, по которым проводилось соединение (Т, В и БЛ). Для исключения этих дубликатов можно создать естественное соединение тех же таблиц: SELECT Т, В, БЛ, Трапеза, Вид, Блюдо, Основа, Выход, Труд FROM Меню, Трапезы, Вид_блюд, Блюда WHERE Меню. Т = Трапезы. Т AND Меню. В = Вид_блюд. В AND Меню. БЛ = Блюда. БЛ; Реализация естественного соединения таблиц имеет вид Т В БЛ Трапеза Вид Блюдо Основа Выход Труд 1 З 200. 4 1 З 250. 3 1 Г 200. 5 … 3 Г 180. 4 3 Н 200. 2 3 Н 200. 2 Композиция таблиц
Для исключения всех столбцов, по которым проводится соединение таблиц, надо создать композицию SELECT Трапеза, Вид, Блюдо, Основа, Выход, Труд FROM Меню, Трапезы, Вид_блюд, Блюда WHERE Меню. Т = Трапезы. Т AND Меню. В = Вид_блюд. В AND Меню. БЛ = Блюда. БЛ; имеющую вид Трапеза Блюдо Вид Основа Выход Труд Завтрак Салат витаминный Закуска Овощи 200. 4 Завтрак Мясо с гарниром Закуска Мясо 250. 3 Завтрак Омлет с луком Горячее Яйца 200. 5 ... . Ужин Драчена Горячее Яйца 180. 4 Ужин Компот Напиток Фрукты 200. 2 Ужин Молочный напиток Напиток Молоко 200. 2 Тета-соединение таблиц
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9