Другие языки программирования и технологии

Организация БД в MS SQL

Всем привет!
Объясняю вкратце: к примеру есть таблицы Товары и Чеки. Как понятно, в одном чеке должно быть много позиций с РАЗНЫМИ товарами. Как это организовать? Ведь если в таблице Чеки, создать столбец "Товар", и связать его с таблицой "Товары", то в одном чеке сможет быть только 1 товар.. .

Таблица ЧЕКИ
Номер чека - int primary key
Номер товара - int foreign key
Дата и время - datetime

Таблица ТОВАРЫ
Номер товара - int primary key
Наименование товара - varchar(35)
Цена товара - int

А надо, чтобы в одном чеке был один номер, одна дата, но много разных товаров! Заранее спасибо за помощь!
ОП
Олег Пан
179
Суб таблица с товарами и индентификатором чека (номером)
И по номеру чека соостветственно присваивать код товара или сам товар.
Потом фильтровать по номеру чека и получать список для этого чека
Либо добавить блоб поле и туда товар пихать но это не корректно
Абылай Сабыржанов
Абылай Сабыржанов
57 036
Лучший ответ
правильный ответ у DEN
хотя помещать идентификационный номер товара в чеки тоже покатило бы. просто использовать composite primary key (номер чека + номер товара)

Alex, вы ещё большую бессмыслицу говорите. если делать как вы сказали, то каждое наименование товара может быть связано только с одним чеком. или возможно что вы считаете что каждая единица товара в базу заносится отдельно. тогда у вас дело обстоит ещё хуже.
Таблица ЧЕКИ
Номер чека + Номер товара -> primary key
А то у вас больше одного товара в чек не впихнуть :)
Ну а Foreign - вам тут разве что для cons check на update и insert и, возможно, для ON DELETE RESTRICT чтобы нельзя было убить товар пока он есть в чеках. Исходя из опыта по сути вам все-равно как-то придется решать проблемы с переоценками. А варианта всего 2 - переоцененный товар получает новый ID или надо в чек внести цену (а заодно и кол-во) на момент создания чека. Иначе вас бухи сожрут с костьми :) и без хлеба. Выбор зависит от ассортимента и масштабности переоценок. Например - если это курсо-баксопривязаный магазин то переоценки вам обеспечены каждый день. И если на складе N тыс.. . наименований.. . то очень скоро ваша табличка уберемениет до невозможности. А резать ее низя. Ибо потеряется связь со старыми чеками. Второй вариант позволяет "чистить" таблицы закрытием периодов ценой распухания чека.
Игорь Черенев
Игорь Черенев
13 013
Обычная связь многое ко многим, всё просто к вашим таблицам добавить ещё одну:
Таблица ЧЕКИ
Номер чека - int primary key
Дата и время - datetime

Таблица ТОВАРЫ
Номер товара - int primary key
Наименование товара - varchar(35)
Цена товара - int

Таблица ЧЕКИ_ТОВАРЫ
номер связи
Номер товара
Номер чека
Номер товара в таблице ЧЕКИ бессмысленен. В таблице ТОВАРЫ нужна колонка "НОМЕР ЧЕКА", которая и "привяжет" товар к чеку