мне нужно моделировать идею, которая может быть нарушена вниз и мысль о том, как следует:Лучший подход для хранения одного-многим - Практический пример/Дилемма
- BookDetails
- BookPrices
Проблема здесь в том, что у вас может быть много цен на книги, и эти цены могут измениться. Вот пример
BookDetails: ----------------- ID Name 1 Harry Potter…
Это достаточно легко.
Где это более интересно то, что для одной этой книги я мог бы иметь десять различных цен на тот же день, например:
BookPrices: ------------------------------------ Book_Details_Id Kind Price 1 SpecialOffer 10 1 BulkPurchase 20 1 Normal 30
мне нужно предоставить список книг и все их цены в столбцах - что-то например:
BookName SpecialOffer BulkPurchase Normal Harry Potter… 10 20 30
Мой вопрос: стоит ли в книжной ценовой таблице все разные типы цен в качестве столбцов? Для меня это некрасиво, и лучшая идея состоит в том, чтобы иметь каждую цену как строку
Если я использую этот подход, я не могу придумать SQL-запрос, чтобы сгенерировать мне результирующий набор. Я думал об этом все утро.
EDIT: У меня нет возможности рассчитывать цены - их нужно хранить.
EDIT: Это в основном 1-н appraoch я могу думать (спасибо комментарий ниже) - Его, что я на самом деле имел в виду
ВЫБРАТЬ book.bookid, bp1.price, bp2.price из книги JOIN bookprice bp1 JOIN bookprice bp2 ON bp1.bookid = book.bookid AND bp1.pricetype = 1 AND bp2.bookid = book.bookid AND bp2.pricetype = 2 ...
Проблема заключается в десяти ценах, которые вы будете вступая в десятку раз, что воняет!
Не могли бы вы рассказать нам, каковы конкретные и конкретные требования к схеме, которую вы разрабатываете? Некоторые вопросы: нужны ли вам конкретные цены за книгу? Будет ли много предложений? Часто ли меняются типы предложений? –
У меня есть контроль над тем, как это представить - я могу либо выбрать таблицу 1-n (что я предпочитаю делать), но я не могу представить, как я могу получить все цены в столбцах для одной книги. Альтернативой является наличие каждого типа цены в таблице и отображение 1-1. –
Вы хотите использовать функцию «** PIVOT **», которую SQL Server не поддерживает. SQL Server не может создавать такие столбцы. –